📄 PatternVisitor¶
📊 Analysis Summary¶
| Metric | Count |
|---|---|
| 🔧 Functions | 13 |
| 🧱 Classes | 1 |
| 📦 Imports | 4 |
| 📑 Type Aliases | 2 |
📚 Table of Contents¶
🛠️ File Location:¶
📂 packages/scope-manager/src/referencer/PatternVisitor.ts
📦 Imports¶
| Name | Source |
|---|---|
TSESTree |
@typescript-eslint/types |
AST_NODE_TYPES |
@typescript-eslint/types |
VisitorOptions |
./VisitorBase |
VisitorBase |
./VisitorBase |
Functions¶
PatternVisitor.isPattern(node: TSESTree.Node): node is | TSESTree.ArrayPattern | TSESTree.AssignmentPatter…¶
Parameters:
nodeTSESTree.Node
Returns: node is
| TSESTree.ArrayPattern
| TSESTree.AssignmentPattern
| TSESTree.Identifier
| TSESTree.ObjectPattern
| TSESTree.RestElement
| TSESTree.SpreadElement
Code
public static isPattern(
node: TSESTree.Node,
): node is
| TSESTree.ArrayPattern
| TSESTree.AssignmentPattern
| TSESTree.Identifier
| TSESTree.ObjectPattern
| TSESTree.RestElement
| TSESTree.SpreadElement {
const nodeType = node.type;
return (
nodeType === AST_NODE_TYPES.Identifier ||
nodeType === AST_NODE_TYPES.ObjectPattern ||
nodeType === AST_NODE_TYPES.ArrayPattern ||
nodeType === AST_NODE_TYPES.SpreadElement ||
nodeType === AST_NODE_TYPES.RestElement ||
nodeType === AST_NODE_TYPES.AssignmentPattern
);
}
PatternVisitor.ArrayExpression(node: TSESTree.ArrayExpression): void¶
Parameters:
nodeTSESTree.ArrayExpression
Returns: void
Calls:
node.elements.forEach
Code
PatternVisitor.ArrayPattern(pattern: TSESTree.ArrayPattern): void¶
Parameters:
patternTSESTree.ArrayPattern
Returns: void
Calls:
this.visit
Code
PatternVisitor.AssignmentExpression(node: TSESTree.AssignmentExpression): void¶
Parameters:
nodeTSESTree.AssignmentExpression
Returns: void
Calls:
this.#assignments.pushthis.visitthis.rightHandNodes.pushthis.#assignments.pop
Code
PatternVisitor.AssignmentPattern(pattern: TSESTree.AssignmentPattern): void¶
Parameters:
patternTSESTree.AssignmentPattern
Returns: void
Calls:
this.#assignments.pushthis.visitthis.rightHandNodes.pushthis.#assignments.pop
Code
PatternVisitor.CallExpression(node: TSESTree.CallExpression): void¶
Parameters:
nodeTSESTree.CallExpression
Returns: void
Calls:
node.arguments.forEachthis.rightHandNodes.pushthis.visit
Internal Comments:
Code
PatternVisitor.Decorator(): void¶
Returns: void
PatternVisitor.Identifier(pattern: TSESTree.Identifier): void¶
Parameters:
patternTSESTree.Identifier
Returns: void
Calls:
this.#restElements.atthis.#callback
Code
PatternVisitor.MemberExpression(node: TSESTree.MemberExpression): void¶
Parameters:
nodeTSESTree.MemberExpression
Returns: void
Calls:
this.rightHandNodes.push
Internal Comments:
// Computed property's key is a right hand node.
// the object is only read, write to its property. (x5)
Code
PatternVisitor.Property(property: TSESTree.Property): void¶
Parameters:
propertyTSESTree.Property
Returns: void
Calls:
this.rightHandNodes.pushthis.visit
Internal Comments:
// Computed property's key is a right hand node.
// If it's shorthand, its key is same as its value. (x4)
// If it's shorthand and has its default value, its key is same as its value.left (the value is AssignmentPattern). (x4)
// If it's not shorthand, the name of new variable is its value's. (x4)
Code
protected Property(property: TSESTree.Property): void {
// Computed property's key is a right hand node.
if (property.computed) {
this.rightHandNodes.push(property.key);
}
// If it's shorthand, its key is same as its value.
// If it's shorthand and has its default value, its key is same as its value.left (the value is AssignmentPattern).
// If it's not shorthand, the name of new variable is its value's.
this.visit(property.value);
}
PatternVisitor.RestElement(pattern: TSESTree.RestElement): void¶
Parameters:
patternTSESTree.RestElement
Returns: void
Calls:
this.#restElements.pushthis.visitthis.#restElements.pop
Code
PatternVisitor.SpreadElement(node: TSESTree.SpreadElement): void¶
Parameters:
nodeTSESTree.SpreadElement
Returns: void
Calls:
this.visit
PatternVisitor.TSTypeAnnotation(): void¶
Returns: void
Classes¶
PatternVisitor¶
Extends: VisitorBase
Class Code
export class PatternVisitor extends VisitorBase {
readonly #assignments: (
TSESTree.AssignmentExpression | TSESTree.AssignmentPattern
)[] = [];
readonly #callback: PatternVisitorCallback;
readonly #restElements: TSESTree.RestElement[] = [];
readonly #rootPattern: TSESTree.Node;
public readonly rightHandNodes: TSESTree.Node[] = [];
constructor(
options: PatternVisitorOptions,
rootPattern: TSESTree.Node,
callback: PatternVisitorCallback,
) {
super(options);
this.#rootPattern = rootPattern;
this.#callback = callback;
}
public static isPattern(
node: TSESTree.Node,
): node is
| TSESTree.ArrayPattern
| TSESTree.AssignmentPattern
| TSESTree.Identifier
| TSESTree.ObjectPattern
| TSESTree.RestElement
| TSESTree.SpreadElement {
const nodeType = node.type;
return (
nodeType === AST_NODE_TYPES.Identifier ||
nodeType === AST_NODE_TYPES.ObjectPattern ||
nodeType === AST_NODE_TYPES.ArrayPattern ||
nodeType === AST_NODE_TYPES.SpreadElement ||
nodeType === AST_NODE_TYPES.RestElement ||
nodeType === AST_NODE_TYPES.AssignmentPattern
);
}
protected ArrayExpression(node: TSESTree.ArrayExpression): void {
node.elements.forEach(this.visit, this);
}
protected ArrayPattern(pattern: TSESTree.ArrayPattern): void {
for (const element of pattern.elements) {
this.visit(element);
}
}
protected AssignmentExpression(node: TSESTree.AssignmentExpression): void {
this.#assignments.push(node);
this.visit(node.left);
this.rightHandNodes.push(node.right);
this.#assignments.pop();
}
protected AssignmentPattern(pattern: TSESTree.AssignmentPattern): void {
this.#assignments.push(pattern);
this.visit(pattern.left);
this.rightHandNodes.push(pattern.right);
this.#assignments.pop();
}
protected CallExpression(node: TSESTree.CallExpression): void {
// arguments are right hand nodes.
node.arguments.forEach(a => {
this.rightHandNodes.push(a);
});
this.visit(node.callee);
}
protected Decorator(): void {
// don't visit any decorators when exploring a pattern
}
protected Identifier(pattern: TSESTree.Identifier): void {
const lastRestElement = this.#restElements.at(-1);
this.#callback(pattern, {
assignments: this.#assignments,
rest: lastRestElement?.argument === pattern,
topLevel: pattern === this.#rootPattern,
});
}
protected MemberExpression(node: TSESTree.MemberExpression): void {
// Computed property's key is a right hand node.
if (node.computed) {
this.rightHandNodes.push(node.property);
}
// the object is only read, write to its property.
this.rightHandNodes.push(node.object);
}
protected Property(property: TSESTree.Property): void {
// Computed property's key is a right hand node.
if (property.computed) {
this.rightHandNodes.push(property.key);
}
// If it's shorthand, its key is same as its value.
// If it's shorthand and has its default value, its key is same as its value.left (the value is AssignmentPattern).
// If it's not shorthand, the name of new variable is its value's.
this.visit(property.value);
}
protected RestElement(pattern: TSESTree.RestElement): void {
this.#restElements.push(pattern);
this.visit(pattern.argument);
this.#restElements.pop();
}
protected SpreadElement(node: TSESTree.SpreadElement): void {
this.visit(node.argument);
}
protected TSTypeAnnotation(): void {
// we don't want to visit types
}
}
Methods (13) — full entries under Functions
| Method | Signature |
|---|---|
isPattern |
(node: TSESTree.Node): node is \| TSESTree.ArrayPattern \| TSESTree.AssignmentPattern \| TSESTree... |
ArrayExpression |
(node: TSESTree.ArrayExpression): void |
ArrayPattern |
(pattern: TSESTree.ArrayPattern): void |
AssignmentExpression |
(node: TSESTree.AssignmentExpression): void |
AssignmentPattern |
(pattern: TSESTree.AssignmentPattern): void |
CallExpression |
(node: TSESTree.CallExpression): void |
Decorator |
(): void |
Identifier |
(pattern: TSESTree.Identifier): void |
MemberExpression |
(node: TSESTree.MemberExpression): void |
Property |
(property: TSESTree.Property): void |
RestElement |
(pattern: TSESTree.RestElement): void |
SpreadElement |
(node: TSESTree.SpreadElement): void |
TSTypeAnnotation |
(): void |
Type Aliases¶
PatternVisitorCallback¶
type PatternVisitorCallback = (
pattern: TSESTree.Identifier,
info: {
assignments: (TSESTree.AssignmentExpression | TSESTree.AssignmentPattern)[];
rest: boolean;
topLevel: boolean;
},
) => void;
PatternVisitorOptions¶
Generated by Syntax Scribe