public class NodeTraversal
extends java.lang.Object
Modifier and Type | Class and Description |
---|---|
static class |
NodeTraversal.AbstractModuleCallback
Abstract callback that knows when goog.modules (and in the future ES6 modules) are entered
and exited.
|
static class |
NodeTraversal.AbstractNodeTypePruningCallback
Abstract callback to visit a pruned set of nodes.
|
static class |
NodeTraversal.AbstractPostOrderCallback
Abstract callback to visit all nodes in postorder.
|
static class |
NodeTraversal.AbstractPreOrderCallback
Abstract callback to visit all nodes in preorder.
|
static class |
NodeTraversal.AbstractScopedCallback
Abstract scoped callback to visit all nodes in postorder.
|
static class |
NodeTraversal.AbstractShallowCallback
Abstract callback to visit all nodes but not traverse into function
bodies.
|
static class |
NodeTraversal.AbstractShallowStatementCallback
Abstract callback to visit all structure and statement nodes but doesn't traverse into
functions or expressions.
|
static interface |
NodeTraversal.Callback
Callback for tree-based traversals
|
static interface |
NodeTraversal.ChangeScopeRootCallback
Callback for passes that iterate over a list of change scope roots (FUNCTIONs and SCRIPTs)
|
static interface |
NodeTraversal.ScopedCallback
Callback that also knows about scope changes
|
Constructor and Description |
---|
NodeTraversal(AbstractCompiler compiler,
NodeTraversal.Callback cb,
com.google.javascript.jscomp.ScopeCreator scopeCreator)
Creates a node traversal using the specified callback interface
and the scope creator.
|
Modifier and Type | Method and Description |
---|---|
int |
getCharno()
Gets the current char number, or zero if it cannot be determined.
|
Scope |
getClosestHoistScope() |
Node |
getClosestHoistScopeRoot() |
AbstractCompiler |
getCompiler() |
ControlFlowGraph<Node> |
getControlFlowGraph()
Gets the control flow graph for the current JS scope.
|
Node |
getCurrentNode()
Returns the node currently being traversed.
|
Node |
getEnclosingFunction()
Examines the functions stack for the last instance of a function node.
|
CompilerInput |
getInput()
Gets the current input source.
|
int |
getLineNumber()
Gets the current line number, or zero if it cannot be determined.
|
JSModule |
getModule()
Gets the current input module.
|
Scope |
getScope()
Gets the current scope.
|
com.google.javascript.jscomp.ScopeCreator |
getScopeCreator() |
Node |
getScopeRoot()
Returns the current scope's root.
|
java.lang.String |
getSourceName()
Gets the current input source name.
|
TypedScope |
getTypedScope() |
boolean |
inFunctionBlockScope()
Determines whether the traversal is currently in the scope of the block of a function.
|
boolean |
inGlobalHoistScope()
Determines whether the hoist scope of the current traversal is global.
|
boolean |
inGlobalScope()
Determines whether the traversal is currently in the global scope.
|
boolean |
inModuleHoistScope()
Determines whether the hoist scope of the current traversal is global.
|
boolean |
inModuleScope()
Determines whether the traversal is currently in the global scope.
|
boolean |
isHoistScope() |
JSError |
makeError(Node n,
CheckLevel level,
DiagnosticType type,
java.lang.String... arguments)
Creates a JSError during NodeTraversal.
|
JSError |
makeError(Node n,
DiagnosticType type,
java.lang.String... arguments)
Creates a JSError during NodeTraversal.
|
void |
report(Node n,
DiagnosticType diagnosticType,
java.lang.String... arguments)
Reports a diagnostic (error or warning)
|
void |
reportCodeChange() |
void |
reportCodeChange(Node n) |
void |
traverse(Node root)
Traverses a parse tree recursively.
|
static void |
traverseChangedFunctions(AbstractCompiler compiler,
NodeTraversal.ChangeScopeRootCallback callback)
Traversal for passes that work only on changed functions.
|
static void |
traverseEs6(AbstractCompiler compiler,
Node root,
NodeTraversal.Callback cb)
Traverses using the ES6SyntacticScopeCreator
|
static void |
traverseEs6ScopeRoots(AbstractCompiler compiler,
Node root,
java.util.List<Node> scopeNodes,
NodeTraversal.Callback cb,
boolean traverseNested)
Traverses *just* the contents of provided scope nodes (and optionally scopes nested within
them) but will fall back on traversing the entire AST from root if a null scope nodes list is
provided.
|
static void |
traverseEs6ScopeRoots(AbstractCompiler compiler,
Node root,
java.util.List<Node> scopeNodes,
NodeTraversal.Callback cb,
NodeTraversal.ChangeScopeRootCallback changeCallback,
boolean traverseNested)
Traverses *just* the contents of provided scope nodes (and optionally scopes nested within
them) but will fall back on traversing the entire AST from root if a null scope nodes list is
provided.
|
void |
traverseFunctionOutOfBand(Node node,
Scope scope)
Traverse a function out-of-band of normal traversal.
|
static void |
traverseRootsEs6(AbstractCompiler compiler,
NodeTraversal.Callback cb,
Node externs,
Node root) |
static void |
traverseRootsTyped(AbstractCompiler compiler,
NodeTraversal.Callback cb,
Node externs,
Node root)
Deprecated.
Use the ES6SyntacticScopeCreator instead.
|
static void |
traverseTyped(AbstractCompiler compiler,
Node root,
NodeTraversal.Callback cb)
Deprecated.
Use the ES6SyntacticScopeCreator instead.
|
public NodeTraversal(AbstractCompiler compiler, NodeTraversal.Callback cb, com.google.javascript.jscomp.ScopeCreator scopeCreator)
public void traverse(Node root)
public static void traverseEs6ScopeRoots(AbstractCompiler compiler, @Nullable Node root, @Nullable java.util.List<Node> scopeNodes, NodeTraversal.Callback cb, boolean traverseNested)
root
- If scopeNodes is null, this method will just traverse 'root' instead. If scopeNodes
is not null, this parameter is ignored.public static void traverseEs6ScopeRoots(AbstractCompiler compiler, @Nullable Node root, @Nullable java.util.List<Node> scopeNodes, NodeTraversal.Callback cb, @Nullable NodeTraversal.ChangeScopeRootCallback changeCallback, boolean traverseNested)
root
- If scopeNodes is null, this method will just traverse 'root' instead. If scopeNodes
is not null, this parameter is ignored.public void traverseFunctionOutOfBand(Node node, Scope scope)
node
- The function node.scope
- The scope the function is contained in. Does not fire enter/exit
callback events for this scope.public AbstractCompiler getCompiler()
public int getLineNumber()
public int getCharno()
public java.lang.String getSourceName()
public CompilerInput getInput()
public JSModule getModule()
public Node getCurrentNode()
public static void traverseChangedFunctions(AbstractCompiler compiler, NodeTraversal.ChangeScopeRootCallback callback)
Most changes are reported with calls to Compiler.reportCodeChange(), which doesn't know which scope changed. We keep track of the current scope by calling Compiler.setScope inside pushScope and popScope. The automatic tracking can be wrong in rare cases when a pass changes scope w/out causing a call to pushScope or popScope. Passes that do cross-scope modifications call Compiler.reportChangeToEnclosingScope(Node n).
public static void traverseEs6(AbstractCompiler compiler, Node root, NodeTraversal.Callback cb)
@Deprecated public static void traverseTyped(AbstractCompiler compiler, Node root, NodeTraversal.Callback cb)
public static void traverseRootsEs6(AbstractCompiler compiler, NodeTraversal.Callback cb, Node externs, Node root)
@Deprecated public static void traverseRootsTyped(AbstractCompiler compiler, NodeTraversal.Callback cb, Node externs, Node root)
public Node getEnclosingFunction()
public Scope getScope()
public boolean isHoistScope()
public Node getClosestHoistScopeRoot()
public Scope getClosestHoistScope()
public TypedScope getTypedScope()
public ControlFlowGraph<Node> getControlFlowGraph()
public Node getScopeRoot()
public com.google.javascript.jscomp.ScopeCreator getScopeCreator()
public boolean inGlobalScope()
public boolean inFunctionBlockScope()
public boolean inGlobalHoistScope()
public boolean inModuleScope()
public boolean inModuleHoistScope()
public void report(Node n, DiagnosticType diagnosticType, java.lang.String... arguments)
public void reportCodeChange()
public void reportCodeChange(Node n)
public JSError makeError(Node n, CheckLevel level, DiagnosticType type, java.lang.String... arguments)
n
- Determines the line and char position within the source file nametype
- The DiagnosticTypearguments
- Arguments to be incorporated into the messagepublic JSError makeError(Node n, DiagnosticType type, java.lang.String... arguments)
n
- Determines the line and char position within the source file nametype
- The DiagnosticTypearguments
- Arguments to be incorporated into the messageCopyright © 2009-2018 Google. All Rights Reserved.