mirror of https://github.com/AMT-Cheif/drift.git
Make utility visitor methods an extension
This commit is contained in:
parent
e772ca0225
commit
01e5a47189
|
@ -34,7 +34,7 @@ class _FoldingVisitor extends RecursiveVisitor<void, void> {
|
|||
collector.addRegion(first, last - first, FoldingKind.DIRECTIVES);
|
||||
}
|
||||
|
||||
super.visitChildren(e, arg);
|
||||
visitChildren(e, arg);
|
||||
}
|
||||
|
||||
@override
|
||||
|
|
|
@ -42,7 +42,7 @@ class _OutlineVisitor extends RecursiveVisitor<void, void> {
|
|||
@override
|
||||
void visitCreateTableStatement(CreateTableStatement e, void arg) {
|
||||
_startElement(ElementKind.CLASS, e.tableName, e);
|
||||
super.visitChildren(e, arg);
|
||||
visitChildren(e, arg);
|
||||
collector.endElement();
|
||||
}
|
||||
|
||||
|
@ -71,21 +71,21 @@ class _OutlineVisitor extends RecursiveVisitor<void, void> {
|
|||
// the return type but we'd really like it to be shown
|
||||
_startElement(ElementKind.FIELD, e.columnName, e).parameters = e.typeName;
|
||||
|
||||
super.visitChildren(e, arg);
|
||||
visitChildren(e, arg);
|
||||
collector.endElement();
|
||||
}
|
||||
|
||||
@override
|
||||
void visitMoorFile(MoorFile e, void arg) {
|
||||
_startElement(ElementKind.LIBRARY, request.file.shortName, e);
|
||||
super.visitChildren(e, arg);
|
||||
visitChildren(e, arg);
|
||||
collector.endElement();
|
||||
}
|
||||
|
||||
@override
|
||||
void visitMoorDeclaredStatement(DeclaredStatement e, void arg) {
|
||||
if (!e.isRegularQuery) {
|
||||
super.visitChildren(e, arg);
|
||||
visitChildren(e, arg);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -105,7 +105,7 @@ class _OutlineVisitor extends RecursiveVisitor<void, void> {
|
|||
element.parameters = parameterBuilder.toString();
|
||||
}
|
||||
|
||||
super.visitChildren(e, arg);
|
||||
visitChildren(e, arg);
|
||||
collector.endElement();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
## 0.10.0
|
||||
|
||||
- Breaking: Made `RecursiveVisitor.visit`, `visitList` and `visitExcept` an extension on `AstVisitor`.
|
||||
- Support parsing and analyzing `CREATE VIEW` statements (see `SchemaFromCreateTable.readView`).
|
||||
Thanks to [@mqus](https://github.com/mqus) for their contribution!
|
||||
|
||||
|
@ -11,7 +12,8 @@ in a query.
|
|||
|
||||
## 0.8.1
|
||||
|
||||
- Support collate expressions in the new type inference ([#533](https://github.com/simolus3/moor/issues/533))
|
||||
- Support collate expressions in the new type inference ([#533](htt
|
||||
ps://github.com/simolus3/moor/issues/533))
|
||||
- Added `visitCollateExpression` to the visitor classes
|
||||
|
||||
## 0.8.0
|
||||
|
|
|
@ -190,13 +190,13 @@ class AstPreparingVisitor extends RecursiveVisitor<void, void> {
|
|||
}
|
||||
|
||||
@override
|
||||
void visitChildren(AstNode e, void arg) {
|
||||
void defaultNode(AstNode e, void arg) {
|
||||
// hack to fork scopes on statements (selects are handled above)
|
||||
if (e is Statement && e is! SelectStatement) {
|
||||
_forkScope(e);
|
||||
}
|
||||
|
||||
super.visitChildren(e, arg);
|
||||
visitChildren(e, arg);
|
||||
}
|
||||
|
||||
@override
|
||||
|
|
|
@ -10,7 +10,7 @@ class TypeResolvingVisitor extends RecursiveVisitor<void, void> {
|
|||
TypeResolvingVisitor(this.context);
|
||||
|
||||
@override
|
||||
void visitChildren(AstNode e, void arg) {
|
||||
void defaultNode(AstNode e, void arg) {
|
||||
// called for every ast node, so we implement this here
|
||||
if (e is Expression && !types.needsToBeInferred(e)) {
|
||||
types.resolveExpression(e);
|
||||
|
@ -18,7 +18,7 @@ class TypeResolvingVisitor extends RecursiveVisitor<void, void> {
|
|||
e.resolvedColumns.forEach(types.resolveColumn);
|
||||
}
|
||||
|
||||
super.visitChildren(e, arg);
|
||||
visitChildren(e, arg);
|
||||
}
|
||||
|
||||
@override
|
||||
|
|
|
@ -155,29 +155,29 @@ class RecursiveVisitor<A, R> implements AstVisitor<A, R> {
|
|||
}
|
||||
|
||||
R visitStatement(Statement statement, A arg) {
|
||||
return visitChildren(statement, arg);
|
||||
return defaultNode(statement, arg);
|
||||
}
|
||||
|
||||
@override
|
||||
R visitCompoundSelectPart(CompoundSelectPart e, A arg) {
|
||||
return visitChildren(e, arg);
|
||||
return defaultNode(e, arg);
|
||||
}
|
||||
|
||||
// General clauses
|
||||
|
||||
@override
|
||||
R visitResultColumn(ResultColumn e, A arg) {
|
||||
return visitChildren(e, arg);
|
||||
return defaultNode(e, arg);
|
||||
}
|
||||
|
||||
@override
|
||||
R visitWithClause(WithClause e, A arg) {
|
||||
return visitChildren(e, arg);
|
||||
return defaultNode(e, arg);
|
||||
}
|
||||
|
||||
@override
|
||||
R visitUpsertClause(UpsertClause e, A arg) {
|
||||
return visitChildren(e, arg);
|
||||
return defaultNode(e, arg);
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -191,93 +191,93 @@ class RecursiveVisitor<A, R> implements AstVisitor<A, R> {
|
|||
}
|
||||
|
||||
R defaultUpsertAction(UpsertAction e, A arg) {
|
||||
return visitChildren(e, arg);
|
||||
return defaultNode(e, arg);
|
||||
}
|
||||
|
||||
@override
|
||||
R visitCommonTableExpression(CommonTableExpression e, A arg) {
|
||||
return visitChildren(e, arg);
|
||||
return defaultNode(e, arg);
|
||||
}
|
||||
|
||||
@override
|
||||
R visitOrderBy(OrderBy e, A arg) {
|
||||
return visitChildren(e, arg);
|
||||
return defaultNode(e, arg);
|
||||
}
|
||||
|
||||
@override
|
||||
R visitOrderingTerm(OrderingTerm e, A arg) {
|
||||
return visitChildren(e, arg);
|
||||
return defaultNode(e, arg);
|
||||
}
|
||||
|
||||
@override
|
||||
R visitLimit(Limit e, A arg) {
|
||||
return visitChildren(e, arg);
|
||||
return defaultNode(e, arg);
|
||||
}
|
||||
|
||||
@override
|
||||
R visitQueryable(Queryable e, A arg) {
|
||||
return visitChildren(e, arg);
|
||||
return defaultNode(e, arg);
|
||||
}
|
||||
|
||||
@override
|
||||
R visitJoin(Join e, A arg) {
|
||||
return visitChildren(e, arg);
|
||||
return defaultNode(e, arg);
|
||||
}
|
||||
|
||||
@override
|
||||
R visitGroupBy(GroupBy e, A arg) {
|
||||
return visitChildren(e, arg);
|
||||
return defaultNode(e, arg);
|
||||
}
|
||||
|
||||
@override
|
||||
R visitSetComponent(SetComponent e, A arg) {
|
||||
return visitChildren(e, arg);
|
||||
return defaultNode(e, arg);
|
||||
}
|
||||
|
||||
@override
|
||||
R visitColumnDefinition(ColumnDefinition e, A arg) {
|
||||
return visitChildren(e, arg);
|
||||
return defaultNode(e, arg);
|
||||
}
|
||||
|
||||
@override
|
||||
R visitColumnConstraint(ColumnConstraint e, A arg) {
|
||||
return visitChildren(e, arg);
|
||||
return defaultNode(e, arg);
|
||||
}
|
||||
|
||||
@override
|
||||
R visitTableConstraint(TableConstraint e, A arg) {
|
||||
return visitChildren(e, arg);
|
||||
return defaultNode(e, arg);
|
||||
}
|
||||
|
||||
@override
|
||||
R visitForeignKeyClause(ForeignKeyClause e, A arg) {
|
||||
return visitChildren(e, arg);
|
||||
return defaultNode(e, arg);
|
||||
}
|
||||
|
||||
@override
|
||||
R visitWindowDefinition(WindowDefinition e, A arg) {
|
||||
return visitChildren(e, arg);
|
||||
return defaultNode(e, arg);
|
||||
}
|
||||
|
||||
@override
|
||||
R visitFrameSpec(FrameSpec e, A arg) {
|
||||
return visitChildren(e, arg);
|
||||
return defaultNode(e, arg);
|
||||
}
|
||||
|
||||
@override
|
||||
R visitIndexedColumn(IndexedColumn e, A arg) {
|
||||
return visitChildren(e, arg);
|
||||
return defaultNode(e, arg);
|
||||
}
|
||||
|
||||
@override
|
||||
R visitBlock(Block e, A arg) {
|
||||
return visitChildren(e, arg);
|
||||
return defaultNode(e, arg);
|
||||
}
|
||||
|
||||
// Moor-specific additions
|
||||
@override
|
||||
R visitMoorFile(MoorFile e, A arg) {
|
||||
return visitChildren(e, arg);
|
||||
return defaultNode(e, arg);
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -292,12 +292,12 @@ class RecursiveVisitor<A, R> implements AstVisitor<A, R> {
|
|||
|
||||
@override
|
||||
R visitDartPlaceholder(DartPlaceholder e, A arg) {
|
||||
return visitChildren(e, arg);
|
||||
return defaultNode(e, arg);
|
||||
}
|
||||
|
||||
@override
|
||||
R visitMoorStatementParameter(StatementParameter e, A arg) {
|
||||
return visitChildren(e, arg);
|
||||
return defaultNode(e, arg);
|
||||
}
|
||||
|
||||
// Expressions
|
||||
|
@ -383,7 +383,7 @@ class RecursiveVisitor<A, R> implements AstVisitor<A, R> {
|
|||
}
|
||||
|
||||
R visitFunctionParameters(FunctionParameters e, A arg) {
|
||||
return visitChildren(e, arg);
|
||||
return defaultNode(e, arg);
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -418,7 +418,7 @@ class RecursiveVisitor<A, R> implements AstVisitor<A, R> {
|
|||
|
||||
@override
|
||||
R visitWhen(WhenComponent e, A arg) {
|
||||
return visitChildren(e, arg);
|
||||
return defaultNode(e, arg);
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -455,21 +455,31 @@ class RecursiveVisitor<A, R> implements AstVisitor<A, R> {
|
|||
}
|
||||
|
||||
R visitInvocation(SqlInvocation e, A arg) {
|
||||
return visitChildren(e, arg);
|
||||
return defaultNode(e, arg);
|
||||
}
|
||||
|
||||
R visitExpression(Expression e, A arg) {
|
||||
return visitChildren(e, arg);
|
||||
return defaultNode(e, arg);
|
||||
}
|
||||
|
||||
R defaultNode(AstNode e, A arg) {
|
||||
return visitChildren(e, arg);
|
||||
}
|
||||
}
|
||||
|
||||
extension VisitChildrenExtension<A, R> on AstVisitor<A, R> {
|
||||
/// Visits the node [e] by calling [AstNode.accept].
|
||||
R visit(AstNode e, A arg) => e.accept(this, arg);
|
||||
|
||||
/// Visits the node [e] if it's not null. Otherwise, do nothing.
|
||||
R visitNullable(AstNode e, A arg) => e?.accept(this, arg);
|
||||
|
||||
@protected
|
||||
R visitChildren(AstNode e, A arg) => visitList(e.childNodes, arg);
|
||||
/// Visits all children of the node [e], in the order of [AstNode.childNodes].
|
||||
R visitChildren(AstNode e, A arg) {
|
||||
return visitList(e.childNodes, arg);
|
||||
}
|
||||
|
||||
@protected
|
||||
/// Visits all [nodes] in sequence.
|
||||
R visitList(Iterable<AstNode> nodes, A arg) {
|
||||
for (final node in nodes) {
|
||||
node.accept(this, arg);
|
||||
|
@ -477,6 +487,7 @@ class RecursiveVisitor<A, R> implements AstVisitor<A, R> {
|
|||
return null;
|
||||
}
|
||||
|
||||
/// Visits all children of [node], except for [skip].
|
||||
void visitExcept(AstNode node, AstNode skip, A arg) {
|
||||
for (final child in node.childNodes) {
|
||||
if (child != skip) {
|
||||
|
|
|
@ -120,7 +120,7 @@ class UpdatedTablesVisitor extends ReferencedTablesVisitor {
|
|||
/// If you want to find all referenced tables, use [findReferencedTables]. If
|
||||
/// you want to find writes (including their [UpdateKind]) and referenced
|
||||
/// tables, constrct a [UpdatedTablesVisitor] manually.
|
||||
/// Then, let it [RecursiveVisitor.visit] the [root] node. You can now use
|
||||
/// Then, let it visit the [root] node. You can now use
|
||||
/// [UpdatedTablesVisitor.writtenTables] and
|
||||
/// [ReferencedTablesVisitor.foundTables]. This will only walk the ast once,
|
||||
/// whereas calling this and [findReferencedTables] will require two walks.
|
||||
|
|
Loading…
Reference in New Issue