MCPcopy Create free account
hub / github.com/cursorless-dev/cursorless / searchNodeAscending

Function searchNodeAscending

src/util/nodeFinders.ts:191–216  ·  view source on GitHub ↗
(
  node: SyntaxNode,
  lastPattern: Pattern,
  patterns: Pattern[]
)

Source from the content-addressed store, hash-verified

189type NodePattern = [SyntaxNode, Pattern] | null;
190
191function searchNodeAscending(
192 node: SyntaxNode,
193 lastPattern: Pattern,
194 patterns: Pattern[]
195): NodePattern {
196 let resultNode = node;
197 let resultPattern = lastPattern;
198 let important: NodePattern = lastPattern.isImportant
199 ? [node, lastPattern]
200 : null;
201 for (let i = patterns.length - 2; i > -1; --i) {
202 const pattern = patterns[i];
203 if (resultNode.parent == null || !pattern.typeEquals(resultNode.parent)) {
204 if (pattern.isOptional) {
205 continue;
206 }
207 return null;
208 }
209 resultNode = resultNode.parent;
210 resultPattern = pattern;
211 if (pattern.isImportant) {
212 important = [resultNode, pattern];
213 }
214 }
215 return important != null ? important : [resultNode, resultPattern];
216}
217
218function searchNodeDescending(
219 node: SyntaxNode,

Callers 1

tryPatternMatchFunction · 0.85

Calls 1

typeEqualsMethod · 0.80

Tested by

no test coverage detected