From 505695040d9443e17d53bab4e39b498a8405e468 Mon Sep 17 00:00:00 2001 From: Stafford Brunk Date: Fri, 30 Oct 2020 06:57:04 -0600 Subject: [PATCH 1/3] Update TS definitions to support the Query API --- lib/binding_web/tree-sitter-web.d.ts | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/lib/binding_web/tree-sitter-web.d.ts b/lib/binding_web/tree-sitter-web.d.ts index 7ddae952..6958a9bf 100644 --- a/lib/binding_web/tree-sitter-web.d.ts +++ b/lib/binding_web/tree-sitter-web.d.ts @@ -37,7 +37,7 @@ declare module 'web-tree-sitter' { export type Logger = ( message: string, - params: {[param: string]: string}, + params: { [param: string]: string }, type: "parse" | "lex" ) => void; @@ -131,8 +131,15 @@ declare module 'web-tree-sitter' { readonly version: number; readonly fieldCount: number; - fieldNameForId(fieldId: number): string | null - fieldIdForName(fieldName: string): number | null + fieldNameForId(fieldId: number): string | null; + fieldIdForName(fieldName: string): number | null; + query(source: string): Query; + } + + class Query { + delete(): void; + matches(node: SyntaxNode, startPosition?: Point, endPosition?: Point); + captures(node: SyntaxNode, startPosition?: Point, endPosition?: Point); } } From a7a6139e70ea182ebf09aef8413d9916e20d9afc Mon Sep 17 00:00:00 2001 From: Stafford Brunk Date: Fri, 30 Oct 2020 10:20:12 -0600 Subject: [PATCH 2/3] Add additional Query API typedefs based on Elm Language Server's overrides --- lib/binding_web/tree-sitter-web.d.ts | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/lib/binding_web/tree-sitter-web.d.ts b/lib/binding_web/tree-sitter-web.d.ts index 6958a9bf..ae76e803 100644 --- a/lib/binding_web/tree-sitter-web.d.ts +++ b/lib/binding_web/tree-sitter-web.d.ts @@ -48,6 +48,7 @@ declare module 'web-tree-sitter' { ) => string | null; export interface SyntaxNode { + id: number; tree: Tree; type: string; isNamed: boolean; @@ -136,10 +137,23 @@ declare module 'web-tree-sitter' { query(source: string): Query; } + interface QueryResult { + pattern: number; + captures: { name: string; node: SyntaxNode }[]; + } + + interface PredicateResult { + operator: string; + operands: { name: string; type: string }[]; + } + class Query { + captureNames: string[]; + delete(): void; - matches(node: SyntaxNode, startPosition?: Point, endPosition?: Point); - captures(node: SyntaxNode, startPosition?: Point, endPosition?: Point); + matches(node: SyntaxNode, startPosition?: Point, endPosition?: Point): QueryResult[]; + captures(node: SyntaxNode, startPosition?: Point, endPosition?: Point): QueryResult[]; + predicatesForPattern(patternIndex: number): PredicateResult[]; } } From 2f897b4d7333cb18dc1b62408cd38dad839f4789 Mon Sep 17 00:00:00 2001 From: Stafford Brunk Date: Tue, 3 Nov 2020 08:20:20 -0700 Subject: [PATCH 3/3] Change QueryResult to be QueryCapture and QueryMatch matches/captures return 2 different types of object so this change corrects the return types --- lib/binding_web/tree-sitter-web.d.ts | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/lib/binding_web/tree-sitter-web.d.ts b/lib/binding_web/tree-sitter-web.d.ts index ae76e803..80084c11 100644 --- a/lib/binding_web/tree-sitter-web.d.ts +++ b/lib/binding_web/tree-sitter-web.d.ts @@ -137,9 +137,14 @@ declare module 'web-tree-sitter' { query(source: string): Query; } - interface QueryResult { + interface QueryCapture { + name: string; + node: SyntaxNode; + } + + interface QueryMatch { pattern: number; - captures: { name: string; node: SyntaxNode }[]; + captures: QueryCapture[]; } interface PredicateResult { @@ -151,8 +156,8 @@ declare module 'web-tree-sitter' { captureNames: string[]; delete(): void; - matches(node: SyntaxNode, startPosition?: Point, endPosition?: Point): QueryResult[]; - captures(node: SyntaxNode, startPosition?: Point, endPosition?: Point): QueryResult[]; + matches(node: SyntaxNode, startPosition?: Point, endPosition?: Point): QueryMatch[]; + captures(node: SyntaxNode, startPosition?: Point, endPosition?: Point): QueryCapture[]; predicatesForPattern(patternIndex: number): PredicateResult[]; } }