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

Function searchNodeDescending

src/util/nodeFinders.ts:218–243  ·  view source on GitHub ↗
(
  node: SyntaxNode,
  firstPattern: Pattern,
  patterns: Pattern[]
)

Source from the content-addressed store, hash-verified

216}
217
218function searchNodeDescending(
219 node: SyntaxNode,
220 firstPattern: Pattern,
221 patterns: Pattern[]
222): NodePattern {
223 let tmpNode = node;
224 // Even if descending search we return the "top" node by default.
225 let important: NodePattern = [node, firstPattern];
226 for (let i = 1; i < patterns.length; ++i) {
227 const pattern = patterns[i];
228 const children = tmpNode.namedChildren.filter((node) =>
229 pattern.typeEquals(node)
230 );
231 if (children.length !== 1) {
232 if (pattern.isOptional) {
233 continue;
234 }
235 return null;
236 }
237 tmpNode = children[0];
238 if (pattern.isImportant) {
239 important = [tmpNode, pattern];
240 }
241 }
242 return important;
243}
244
245class Pattern {
246 type: string;

Callers 1

tryPatternMatchFunction · 0.85

Calls 1

typeEqualsMethod · 0.80

Tested by

no test coverage detected