Skip to content

Commit e3436fd

Browse files
committed
upgrade web-tree-sitter to 0.26.9 and refresh wasm assets
1 parent b5e19ab commit e3436fd

9 files changed

Lines changed: 539 additions & 70 deletions

File tree

anycode-base/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
"dependencies": {
2222
"diff": "^9.0.0",
2323
"vscode-textbuffer": "^1.0.0",
24-
"web-tree-sitter": "^0.21.0"
24+
"web-tree-sitter": "^0.26.9"
2525
},
2626
"devDependencies": {
2727
"typescript": "^6.0.2",

anycode-base/package_npm.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
"wasm"
1919
],
2020
"scripts": {
21-
"build": "tsc -p . && cpy \"src/styles.css\" dist && cpy \"../anycode/public/tree-sitter*.wasm\" wasm",
21+
"build": "tsc -p . && cpy \"src/styles.css\" dist && cpy \"../anycode/public/*.wasm\" wasm",
2222
"prepublishOnly": "npm run build"
2323
},
2424
"keywords": [
@@ -35,7 +35,7 @@
3535
"dependencies": {
3636
"diff": "^8.0.2",
3737
"vscode-textbuffer": "^1.0.0",
38-
"web-tree-sitter": "^0.21.0"
38+
"web-tree-sitter": "^0.26.9"
3939
},
4040
"devDependencies": {
4141
"cpy-cli": "^5.0.0",

anycode-base/src/code.ts

Lines changed: 42 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -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';
1116
import History from './history';
1217
import { Selection } from './selection';
1318
import { 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';
1524
import type { Lang } from './lang';
1625

1726
import 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

100109
export 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

Comments
 (0)