mirror of https://github.com/AMT-Cheif/drift.git
Support moor file AST in the plugin
This commit is contained in:
parent
1b7721a98f
commit
a5cecd3ba6
|
@ -20,6 +20,20 @@ class _FoldingVisitor extends RecursiveVisitor<void> {
|
||||||
|
|
||||||
_FoldingVisitor(this.collector);
|
_FoldingVisitor(this.collector);
|
||||||
|
|
||||||
|
@override
|
||||||
|
void visitMoorFile(MoorFile e) {
|
||||||
|
// construct a folding region for import statements
|
||||||
|
final imports = e.imports.toList();
|
||||||
|
if (imports.isNotEmpty) {
|
||||||
|
final first = imports.first.firstPosition;
|
||||||
|
final last = imports.last.lastPosition;
|
||||||
|
|
||||||
|
collector.addRegion(first, last - first, FoldingKind.DIRECTIVES);
|
||||||
|
}
|
||||||
|
|
||||||
|
super.visitChildren(e);
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void visitCreateTableStatement(CreateTableStatement e) {
|
void visitCreateTableStatement(CreateTableStatement e) {
|
||||||
final startBody = e.openingBracket;
|
final startBody = e.openingBracket;
|
||||||
|
|
|
@ -21,7 +21,7 @@ class MoorHighlightContributor implements HighlightsContributor {
|
||||||
result.parsedFile.accept(visitor);
|
result.parsedFile.accept(visitor);
|
||||||
|
|
||||||
for (var token in result.parseResult.tokens) {
|
for (var token in result.parseResult.tokens) {
|
||||||
if (token is KeywordToken) {
|
if (token is KeywordToken && !token.isIdentifier) {
|
||||||
final start = token.span.start.offset;
|
final start = token.span.start.offset;
|
||||||
final length = token.span.length;
|
final length = token.span.length;
|
||||||
collector.addRegion(start, length, HighlightRegionType.BUILT_IN);
|
collector.addRegion(start, length, HighlightRegionType.BUILT_IN);
|
||||||
|
|
|
@ -11,16 +11,9 @@ class MoorOutlineContributor implements OutlineContributor {
|
||||||
@override
|
@override
|
||||||
void computeOutline(OutlineRequest request, OutlineCollector collector) {
|
void computeOutline(OutlineRequest request, OutlineCollector collector) {
|
||||||
final moorRequest = request as MoorRequest;
|
final moorRequest = request as MoorRequest;
|
||||||
final file = moorRequest.path;
|
|
||||||
|
|
||||||
final libraryElement = Element(ElementKind.FILE, file, _defaultFlags);
|
|
||||||
collector.startElement(
|
|
||||||
libraryElement, 0, moorRequest.resolvedTask.content.length);
|
|
||||||
|
|
||||||
final visitor = _OutlineVisitor(collector);
|
final visitor = _OutlineVisitor(collector);
|
||||||
moorRequest.resolvedTask.lastResult.parsedFile.accept(visitor);
|
moorRequest.resolvedTask.lastResult.parsedFile.accept(visitor);
|
||||||
|
|
||||||
collector.endElement();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -48,7 +41,14 @@ class _OutlineVisitor extends RecursiveVisitor<void> {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void visitColumnDefinition(ColumnDefinition e) {
|
void visitColumnDefinition(ColumnDefinition e) {
|
||||||
_startElement(ElementKind.FIELD, e.columnName, e);
|
_startElement(ElementKind.FIELD, e.columnName, e)..returnType = e.typeName;
|
||||||
|
super.visitChildren(e);
|
||||||
|
collector.endElement();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void visitMoorDeclaredStatement(DeclaredStatement e) {
|
||||||
|
_startElement(ElementKind.TOP_LEVEL_VARIABLE, e.name, e);
|
||||||
super.visitChildren(e);
|
super.visitChildren(e);
|
||||||
collector.endElement();
|
collector.endElement();
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,10 @@ part of '../ast.dart';
|
||||||
/// Something that can appear as a top-level declaration inside a `.moor` file.
|
/// Something that can appear as a top-level declaration inside a `.moor` file.
|
||||||
abstract class PartOfMoorFile implements Statement {}
|
abstract class PartOfMoorFile implements Statement {}
|
||||||
|
|
||||||
|
/// A moor file.
|
||||||
|
///
|
||||||
|
/// A moor file consists of [ImportStatement], followed by ddl statements,
|
||||||
|
/// followed by [DeclaredStatement]s.
|
||||||
class MoorFile extends AstNode {
|
class MoorFile extends AstNode {
|
||||||
final List<PartOfMoorFile> statements;
|
final List<PartOfMoorFile> statements;
|
||||||
|
|
||||||
|
@ -14,6 +18,10 @@ class MoorFile extends AstNode {
|
||||||
@override
|
@override
|
||||||
Iterable<AstNode> get childNodes => statements;
|
Iterable<AstNode> get childNodes => statements;
|
||||||
|
|
||||||
|
/// Returns the imports defined in this file.
|
||||||
|
Iterable<ImportStatement> get imports =>
|
||||||
|
childNodes.whereType<ImportStatement>();
|
||||||
|
|
||||||
@override
|
@override
|
||||||
bool contentEquals(MoorFile other) => true;
|
bool contentEquals(MoorFile other) => true;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue