@@ -7,11 +7,20 @@ import {
77 Range
88} from 'vscode-textbuffer/src/common/range' ;
99
10- import Parser from 'web-tree-sitter' ;
10+ import {
11+ Language , Tree , Query ,
12+ Parser as TreeSitterParser ,
13+ Node as SyntaxNode ,
14+ Edit as TreeSitterEdit , QueryCapture
15+ } from 'web-tree-sitter' ;
1116import History from './history' ;
1217import { Selection } from './selection' ;
1318import { BracketMatch } from './types' ;
14- import { getGraphemeAt , getNextGraphemeIndex , getPrevGraphemeIndex , getWasmPath , isWordGrapheme , BRACKET_PAIRS , OPEN_BRACKETS , CLOSE_BRACKETS } from './utils' ;
19+ import {
20+ getGraphemeAt , getNextGraphemeIndex , getPrevGraphemeIndex ,
21+ getWasmPath , isWordGrapheme ,
22+ BRACKET_PAIRS , OPEN_BRACKETS , CLOSE_BRACKETS
23+ } from './utils' ;
1524import type { Lang } from './lang' ;
1625
1726import javascript from './langs/javascript' ;
@@ -94,18 +103,18 @@ export interface FoldRange {
94103 kind : string ;
95104}
96105
97- var langsCache : Map < string , Parser . Language > = new Map ( ) ;
98- var pendingLangsCache : Map < string , Promise < Parser . Language > > = new Map ( ) ;
106+ var langsCache : Map < string , Language > = new Map ( ) ;
107+ var pendingLangsCache : Map < string , Promise < Language > > = new Map ( ) ;
99108
100109export class Code {
101110 public filename : string
102111 private buffer : PieceTreeBase
103112 public language : string | undefined
104- private parser : Parser | undefined
105- private tree : Parser . Tree | undefined
106- private query : Parser . Query | undefined
107- private foldsQuery : Parser . Query | undefined
108- private runnablesQuery : Parser . Query | undefined
113+ private parser : TreeSitterParser | undefined
114+ private tree : Tree | undefined
115+ private query : Query | undefined
116+ private foldsQuery : Query | undefined
117+ private runnablesQuery : Query | undefined
109118 private foldRanges : FoldRange [ ] = [ ]
110119
111120 public runnables : Map < number , any > = new Map ( )
@@ -120,8 +129,8 @@ export class Code {
120129
121130 private onChange : ( ( t : Change ) => void ) | null = null
122131
123- private injection_parsers : Map < string , Parser > = new Map ( )
124- private injection_queries : Map < string , Parser . Query > = new Map ( )
132+ private injection_parsers : Map < string , TreeSitterParser > = new Map ( )
133+ private injection_queries : Map < string , Query > = new Map ( )
125134 private injectionCache = new Map < string , {
126135 startIndex : number ;
127136 endIndex : number ;
@@ -150,18 +159,18 @@ export class Code {
150159 return ;
151160 }
152161
153- await Parser . init ( ) ;
154- this . parser = new Parser ( ) ;
162+ await TreeSitterParser . init ( ) ;
163+ this . parser = new TreeSitterParser ( ) ;
155164 const filename = `tree-sitter-${ this . language } .wasm` ;
156165 const wasmPath = getWasmPath ( filename ) ;
157166
158- let lang : Parser . Language ;
167+ let lang : Language ;
159168 if ( langsCache . has ( this . language ) ) {
160169 lang = langsCache . get ( this . language ) ! ;
161170 } else {
162171 let loadPromise = pendingLangsCache . get ( this . language ) ;
163172 if ( ! loadPromise ) {
164- loadPromise = Parser . Language . load ( wasmPath ) ;
173+ loadPromise = Language . load ( wasmPath ) ;
165174 pendingLangsCache . set ( this . language , loadPromise ) ;
166175 }
167176 try {
@@ -178,9 +187,9 @@ export class Code {
178187
179188 if ( this . language ) {
180189 let q = this . getQuery ( ) ;
181- if ( q ) this . query = lang . query ( q ) ;
190+ if ( q ) this . query = new Query ( lang , q ) ;
182191 const foldsQ = this . getFoldsQuery ( ) ;
183- if ( foldsQ ) this . foldsQuery = lang . query ( foldsQ ) ;
192+ if ( foldsQ ) this . foldsQuery = new Query ( lang , foldsQ ) ;
184193 this . updateFoldRanges ( ) ;
185194 if ( this . query ) await this . initInjections ( ) ;
186195 // let tq = this.getRunnablesQuery();
@@ -201,7 +210,7 @@ export class Code {
201210 continue ;
202211 }
203212
204- let parser = new Parser ( ) ;
213+ let parser = new TreeSitterParser ( ) ;
205214
206215 let lang ;
207216 if ( langsCache . has ( language ) ) {
@@ -210,7 +219,7 @@ export class Code {
210219 let loadPromise = pendingLangsCache . get ( language ) ;
211220 if ( ! loadPromise ) {
212221 const injectionWasmPath = getWasmPath ( `tree-sitter-${ language } .wasm` ) ;
213- loadPromise = Parser . Language . load ( injectionWasmPath ) ;
222+ loadPromise = Language . load ( injectionWasmPath ) ;
214223 pendingLangsCache . set ( language , loadPromise ) ;
215224 }
216225 try {
@@ -228,7 +237,7 @@ export class Code {
228237 const l = this . getLang ( language ) ;
229238 let query = l ?. query ;
230239 if ( query ) {
231- this . injection_queries . set ( language , lang . query ( query ) ) ;
240+ this . injection_queries . set ( language , new Query ( lang , query ) ) ;
232241 } else {
233242 console . error ( `No query available for ${ language } ` ) ;
234243 }
@@ -268,6 +277,7 @@ export class Code {
268277 ) ;
269278
270279 const injectionTree = injectionParser . parse ( injectionContent ) ;
280+ if ( ! injectionTree ) continue ;
271281 const injectionTreeCaptures = injectionQuery . captures ( injectionTree . rootNode ) ;
272282
273283 const results = injectionTreeCaptures . map ( ic => ( {
@@ -458,14 +468,14 @@ export class Code {
458468 const oldEndPosition = startPosition ;
459469 const newEndPosition = this . buffer . getPositionAt ( offset + len ) ;
460470
461- let edit = {
471+ let edit = new TreeSitterEdit ( {
462472 startIndex : offset ,
463473 oldEndIndex : offset ,
464474 newEndIndex : offset + len ,
465475 startPosition : { row : startPosition . lineNumber , column : startPosition . column } ,
466476 oldEndPosition : { row : oldEndPosition . lineNumber , column : oldEndPosition . column } ,
467477 newEndPosition : { row : newEndPosition . lineNumber , column : newEndPosition . column } ,
468- } ;
478+ } ) ;
469479
470480 this . treeSitterApplyEdit ( edit ) ;
471481 }
@@ -475,19 +485,19 @@ export class Code {
475485 const oldEndPosition = this . buffer . getPositionAt ( offset ) ;
476486 const newEndPosition = startPosition ;
477487
478- let edit = {
488+ let edit = new TreeSitterEdit ( {
479489 startIndex : offset - len ,
480490 oldEndIndex : offset ,
481491 newEndIndex : offset - len ,
482492 startPosition : { row : startPosition . lineNumber , column : startPosition . column } ,
483493 oldEndPosition : { row : oldEndPosition . lineNumber , column : oldEndPosition . column } ,
484494 newEndPosition : { row : newEndPosition . lineNumber , column : newEndPosition . column } ,
485- } ;
495+ } ) ;
486496
487497 this . treeSitterApplyEdit ( edit ) ;
488498 }
489499
490- treeSitterApplyEdit ( edit : Parser . Edit ) {
500+ treeSitterApplyEdit ( edit : TreeSitterEdit ) {
491501 this . tree ! . edit ( edit ) ;
492502 let old = this . tree ! ;
493503 const newTree = this . parser ! . parse ( this . input , old ) ;
@@ -675,7 +685,7 @@ export class Code {
675685 return this . foldRanges ;
676686 }
677687
678- private foldRangeFromNode ( node : Parser . SyntaxNode ) :
688+ private foldRangeFromNode ( node : SyntaxNode ) :
679689 { startLine : number ; endLine : number } | null {
680690 const startLine = node . startPosition . row ;
681691 const endLine = node . endPosition . row ;
@@ -717,8 +727,10 @@ export class Code {
717727
718728 const captures = this . query . captures (
719729 this . tree . rootNode ,
720- { row : line , column : 0 } ,
721- { row : line + 1 , column : 0 }
730+ {
731+ startPosition : { row : line , column : 0 } ,
732+ endPosition : { row : line + 1 , column : 0 }
733+ }
722734 ) ;
723735
724736 const injectionCapturesArray = this . buildInjectionCaptures ( captures ) ;
@@ -746,7 +758,7 @@ export class Code {
746758 for ( ; column < lineText . length ; ) {
747759 // Pick the narrowest capture range that contains current byte position.
748760 // This preserves nested/specific highlight precedence without sorting in the hot path.
749- let capture : Parser . QueryCapture | undefined ;
761+ let capture : QueryCapture | undefined ;
750762 let captureLen = 0 ;
751763 for ( const c of captures ) {
752764 if ( c . node . startIndex <= bytesCounter && bytesCounter < c . node . endIndex ) {
@@ -1135,7 +1147,7 @@ export class Code {
11351147
11361148 try {
11371149 const node = this . tree . rootNode . descendantForIndex ( offset ) ;
1138- let current : Parser . SyntaxNode | null = node ;
1150+ let current : SyntaxNode | null = node ;
11391151
11401152 while ( current ) {
11411153 const type = current . type . toLowerCase ( ) ;
0 commit comments