angular-cn/packages/compiler/test/template_parser
Keen Yee Liau 208ef7bd62 refactor(compiler): Remove NullAstVisitor and visitAstChildren (#35619)
This commit removes the `NullAstVisitor` and `visitAstChildren` exported
from `packages/compiler/src/expression_parser/ast.ts` because they
contain duplicate and buggy implementation, and their use cases could be
sufficiently covered by `RecursiveAstVisitor` if the latter implements the
`visit` method. This use case is only needed in the language service.

With this change, any visitor that extends `RecursiveAstVisitor` could
just define their own `visit` function and the parent class will behave
correctly.

A bit of historical context:
In language service, we need a way to tranverse the expression AST in a
selective manner based on where the user's cursor is. This means we need a
"filtering" function to decide which node to visit and which node to not
visit. Instead of refactoring `RecursiveAstVisitor` to support this,
`visitAstChildren` was created. `visitAstChildren` duplicates the
implementation of `RecursiveAstVisitor`, but introduced some bugs along
the way. For example, in `visitKeyedWrite`, it visits
```
obj -> key -> obj
```
instead of
```
obj -> key -> value
```

Moreover, because of the following line
```
visitor.visit && visitor.visit(ast, context) || ast.visit(visitor, context);
```
`visitAstChildren` visits every node *twice*.

PR Close #35619
2020-02-28 07:13:17 -08:00
..
util refactor(compiler): Remove NullAstVisitor and visitAstChildren (#35619) 2020-02-28 07:13:17 -08:00
binding_parser_spec.ts build: remove `main()` from specs (#21053) 2017-12-22 13:10:51 -08:00
template_parser_absolute_span_spec.ts test(compiler): add expression absolute span tests for `TemplateAst`s (#33253) 2019-10-24 09:53:58 -07:00
template_parser_spec.ts fix(compiler): report errors for missing binding names (#34595) 2020-02-10 16:29:32 -08:00
template_preparser_spec.ts build: remove `main()` from specs (#21053) 2017-12-22 13:10:51 -08:00