@codingame/monaco-vscode-treesitter-service-override 17.2.1 → 18.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (28) hide show
  1. package/index.js +6 -12
  2. package/package.json +4 -5
  3. package/vscode/src/vs/amdX.d.ts +3 -0
  4. package/vscode/src/vs/amdX.js +188 -0
  5. package/vscode/src/vs/workbench/services/treeSitter/browser/treeSitterLibraryService.d.ts +28 -0
  6. package/vscode/src/vs/workbench/services/treeSitter/browser/treeSitterLibraryService.js +136 -0
  7. package/vscode/src/vs/workbench/services/treeSitter/browser/treeSitterThemeService.d.ts +11 -0
  8. package/vscode/src/vs/workbench/services/treeSitter/browser/treeSitterThemeService.js +26 -0
  9. package/vscode/src/vs/editor/common/model/tokenStore.d.ts +0 -65
  10. package/vscode/src/vs/editor/common/model/tokenStore.js +0 -412
  11. package/vscode/src/vs/editor/common/model/treeSitterTokenStoreService.d.ts +0 -32
  12. package/vscode/src/vs/editor/common/model/treeSitterTokenStoreService.js +0 -135
  13. package/vscode/src/vs/editor/common/services/treeSitter/cursorUtils.d.ts +0 -6
  14. package/vscode/src/vs/editor/common/services/treeSitter/cursorUtils.js +0 -76
  15. package/vscode/src/vs/editor/common/services/treeSitter/textModelTreeSitter.d.ts +0 -88
  16. package/vscode/src/vs/editor/common/services/treeSitter/textModelTreeSitter.js +0 -684
  17. package/vscode/src/vs/editor/common/services/treeSitter/treeSitterLanguages.d.ts +0 -31
  18. package/vscode/src/vs/editor/common/services/treeSitter/treeSitterLanguages.js +0 -120
  19. package/vscode/src/vs/editor/common/services/treeSitter/treeSitterParserService.d.ts +0 -48
  20. package/vscode/src/vs/editor/common/services/treeSitter/treeSitterParserService.js +0 -179
  21. package/vscode/src/vs/editor/common/services/treeSitterParserService.d.ts +0 -61
  22. package/vscode/src/vs/editor/common/services/treeSitterParserService.js +0 -36
  23. package/vscode/src/vs/workbench/services/treeSitter/browser/treeSitterCodeEditors.d.ts +0 -32
  24. package/vscode/src/vs/workbench/services/treeSitter/browser/treeSitterCodeEditors.js +0 -119
  25. package/vscode/src/vs/workbench/services/treeSitter/browser/treeSitterTokenizationFeature.contribution.d.ts +0 -1
  26. package/vscode/src/vs/workbench/services/treeSitter/browser/treeSitterTokenizationFeature.contribution.js +0 -54
  27. package/vscode/src/vs/workbench/services/treeSitter/browser/treeSitterTokenizationFeature.d.ts +0 -96
  28. package/vscode/src/vs/workbench/services/treeSitter/browser/treeSitterTokenizationFeature.js +0 -719
@@ -1,412 +0,0 @@
1
-
2
-
3
- class ListNode {
4
- get children() { return this._children; }
5
- get length() { return this._length; }
6
- constructor(height) {
7
- this.height = height;
8
- this._children = [];
9
- this._length = 0;
10
- }
11
- static create(node1, node2) {
12
- const list = ( new ListNode(node1.height + 1));
13
- list.appendChild(node1);
14
- list.appendChild(node2);
15
- return list;
16
- }
17
- canAppendChild() {
18
- return this._children.length < 3;
19
- }
20
- appendChild(node) {
21
- if (!this.canAppendChild()) {
22
- throw ( new Error('Cannot insert more than 3 children in a ListNode'));
23
- }
24
- this._children.push(node);
25
- this._length += node.length;
26
- this._updateParentLength(node.length);
27
- if (!isLeaf(node)) {
28
- node.parent = this;
29
- }
30
- }
31
- _updateParentLength(delta) {
32
- let updateParent = this.parent;
33
- while (updateParent) {
34
- updateParent._length += delta;
35
- updateParent = updateParent.parent;
36
- }
37
- }
38
- unappendChild() {
39
- const child = this._children.pop();
40
- this._length -= child.length;
41
- this._updateParentLength(-child.length);
42
- return child;
43
- }
44
- prependChild(node) {
45
- if (this._children.length >= 3) {
46
- throw ( new Error('Cannot prepend more than 3 children in a ListNode'));
47
- }
48
- this._children.unshift(node);
49
- this._length += node.length;
50
- this._updateParentLength(node.length);
51
- if (!isLeaf(node)) {
52
- node.parent = this;
53
- }
54
- }
55
- unprependChild() {
56
- const child = this._children.shift();
57
- this._length -= child.length;
58
- this._updateParentLength(-child.length);
59
- return child;
60
- }
61
- lastChild() {
62
- return this._children[this._children.length - 1];
63
- }
64
- dispose() {
65
- this._children.splice(0, this._children.length);
66
- }
67
- }
68
- var TokenQuality;
69
- (function (TokenQuality) {
70
- TokenQuality[TokenQuality["None"] = 0] = "None";
71
- TokenQuality[TokenQuality["ViewportGuess"] = 1] = "ViewportGuess";
72
- TokenQuality[TokenQuality["EditGuess"] = 2] = "EditGuess";
73
- TokenQuality[TokenQuality["Accurate"] = 3] = "Accurate";
74
- })(TokenQuality || (TokenQuality = {}));
75
- function isLeaf(node) {
76
- return node.token !== undefined;
77
- }
78
- function append(node, nodeToAppend) {
79
- let curNode = node;
80
- const parents = [];
81
- let nodeToAppendOfCorrectHeight;
82
- while (true) {
83
- if (nodeToAppend.height === curNode.height) {
84
- nodeToAppendOfCorrectHeight = nodeToAppend;
85
- break;
86
- }
87
- if (isLeaf(curNode)) {
88
- throw ( new Error('unexpected'));
89
- }
90
- parents.push(curNode);
91
- curNode = curNode.lastChild();
92
- }
93
- for (let i = parents.length - 1; i >= 0; i--) {
94
- const parent = parents[i];
95
- if (nodeToAppendOfCorrectHeight) {
96
- if (parent.children.length >= 3) {
97
- const newList = ListNode.create(parent.unappendChild(), nodeToAppendOfCorrectHeight);
98
- nodeToAppendOfCorrectHeight = newList;
99
- }
100
- else {
101
- parent.appendChild(nodeToAppendOfCorrectHeight);
102
- nodeToAppendOfCorrectHeight = undefined;
103
- }
104
- }
105
- }
106
- if (nodeToAppendOfCorrectHeight) {
107
- const newList = ( new ListNode(nodeToAppendOfCorrectHeight.height + 1));
108
- newList.appendChild(node);
109
- newList.appendChild(nodeToAppendOfCorrectHeight);
110
- return newList;
111
- }
112
- else {
113
- return node;
114
- }
115
- }
116
- function prepend(list, nodeToAppend) {
117
- let curNode = list;
118
- const parents = [];
119
- while (nodeToAppend.height !== curNode.height) {
120
- if (isLeaf(curNode)) {
121
- throw ( new Error('unexpected'));
122
- }
123
- parents.push(curNode);
124
- curNode = curNode.children[0];
125
- }
126
- let nodeToPrependOfCorrectHeight = nodeToAppend;
127
- for (let i = parents.length - 1; i >= 0; i--) {
128
- const parent = parents[i];
129
- if (nodeToPrependOfCorrectHeight) {
130
- if (parent.children.length >= 3) {
131
- nodeToPrependOfCorrectHeight = ListNode.create(nodeToPrependOfCorrectHeight, parent.unprependChild());
132
- }
133
- else {
134
- parent.prependChild(nodeToPrependOfCorrectHeight);
135
- nodeToPrependOfCorrectHeight = undefined;
136
- }
137
- }
138
- }
139
- if (nodeToPrependOfCorrectHeight) {
140
- return ListNode.create(nodeToPrependOfCorrectHeight, list);
141
- }
142
- else {
143
- return list;
144
- }
145
- }
146
- function concat(node1, node2) {
147
- if (node1.height === node2.height) {
148
- return ListNode.create(node1, node2);
149
- }
150
- else if (node1.height > node2.height) {
151
- return append(node1, node2);
152
- }
153
- else {
154
- return prepend(node2, node1);
155
- }
156
- }
157
- class TokenStore {
158
- get root() {
159
- return this._root;
160
- }
161
- constructor(_textModel) {
162
- this._textModel = _textModel;
163
- this._root = this.createEmptyRoot();
164
- }
165
- createEmptyRoot() {
166
- return {
167
- length: this._textModel.getValueLength(),
168
- token: 0,
169
- height: 0,
170
- tokenQuality: TokenQuality.None
171
- };
172
- }
173
- buildStore(tokens, tokenQuality) {
174
- this._root = this.createFromUpdates(tokens, tokenQuality);
175
- }
176
- createFromUpdates(tokens, tokenQuality) {
177
- if (tokens.length === 0) {
178
- return this.createEmptyRoot();
179
- }
180
- let newRoot = {
181
- length: tokens[0].length,
182
- token: tokens[0].token,
183
- height: 0,
184
- tokenQuality
185
- };
186
- for (let j = 1; j < tokens.length; j++) {
187
- newRoot = append(newRoot, { length: tokens[j].length, token: tokens[j].token, height: 0, tokenQuality });
188
- }
189
- return newRoot;
190
- }
191
- update(length, tokens, tokenQuality) {
192
- if (tokens.length === 0) {
193
- return;
194
- }
195
- this.replace(length, tokens[0].startOffsetInclusive, tokens, tokenQuality);
196
- }
197
- delete(length, startOffset) {
198
- this.replace(length, startOffset, [], TokenQuality.EditGuess);
199
- }
200
- replace(length, updateOffsetStart, tokens, tokenQuality) {
201
- const firstUnchangedOffsetAfterUpdate = updateOffsetStart + length;
202
- const precedingNodes = [];
203
- const postcedingNodes = [];
204
- const stack = [{ node: this._root, offset: 0 }];
205
- while (stack.length > 0) {
206
- const node = stack.pop();
207
- const currentOffset = node.offset;
208
- if (currentOffset < updateOffsetStart && currentOffset + node.node.length <= updateOffsetStart) {
209
- if (!isLeaf(node.node)) {
210
- node.node.parent = undefined;
211
- }
212
- precedingNodes.push(node.node);
213
- continue;
214
- }
215
- else if (isLeaf(node.node) && (currentOffset < updateOffsetStart)) {
216
- precedingNodes.push({ length: updateOffsetStart - currentOffset, token: node.node.token, height: 0, tokenQuality: node.node.tokenQuality });
217
- }
218
- if ((updateOffsetStart <= currentOffset) && (currentOffset + node.node.length <= firstUnchangedOffsetAfterUpdate)) {
219
- continue;
220
- }
221
- if (currentOffset >= firstUnchangedOffsetAfterUpdate) {
222
- if (!isLeaf(node.node)) {
223
- node.node.parent = undefined;
224
- }
225
- postcedingNodes.push(node.node);
226
- continue;
227
- }
228
- else if (isLeaf(node.node) && (currentOffset + node.node.length > firstUnchangedOffsetAfterUpdate)) {
229
- postcedingNodes.push({ length: currentOffset + node.node.length - firstUnchangedOffsetAfterUpdate, token: node.node.token, height: 0, tokenQuality: node.node.tokenQuality });
230
- continue;
231
- }
232
- if (!isLeaf(node.node)) {
233
- let childOffset = currentOffset + node.node.length;
234
- for (let i = node.node.children.length - 1; i >= 0; i--) {
235
- childOffset -= node.node.children[i].length;
236
- stack.push({ node: node.node.children[i], offset: childOffset });
237
- }
238
- }
239
- }
240
- let allNodes;
241
- if (tokens.length > 0) {
242
- allNodes = precedingNodes.concat(this.createFromUpdates(tokens, tokenQuality), postcedingNodes);
243
- }
244
- else {
245
- allNodes = precedingNodes.concat(postcedingNodes);
246
- }
247
- let newRoot = allNodes[0];
248
- for (let i = 1; i < allNodes.length; i++) {
249
- newRoot = concat(newRoot, allNodes[i]);
250
- }
251
- this._root = newRoot ?? this.createEmptyRoot();
252
- }
253
- traverseInOrderInRange(startOffsetInclusive, endOffsetExclusive, visitor) {
254
- const stack = [{ node: this._root, offset: 0 }];
255
- while (stack.length > 0) {
256
- const { node, offset } = stack.pop();
257
- const nodeEnd = offset + node.length;
258
- if (nodeEnd <= startOffsetInclusive || offset >= endOffsetExclusive) {
259
- continue;
260
- }
261
- if (visitor(node, offset)) {
262
- return;
263
- }
264
- if (!isLeaf(node)) {
265
- let childOffset = offset + node.length;
266
- for (let i = node.children.length - 1; i >= 0; i--) {
267
- childOffset -= node.children[i].length;
268
- stack.push({ node: node.children[i], offset: childOffset });
269
- }
270
- }
271
- }
272
- }
273
- getTokenAt(offset) {
274
- let result;
275
- this.traverseInOrderInRange(offset, this._root.length, (node, offset) => {
276
- if (isLeaf(node)) {
277
- result = { token: node.token, startOffsetInclusive: offset, length: node.length };
278
- return true;
279
- }
280
- return false;
281
- });
282
- return result;
283
- }
284
- getTokensInRange(startOffsetInclusive, endOffsetExclusive) {
285
- const result = [];
286
- this.traverseInOrderInRange(startOffsetInclusive, endOffsetExclusive, (node, offset) => {
287
- if (isLeaf(node)) {
288
- let clippedLength = node.length;
289
- let clippedOffset = offset;
290
- if ((offset < startOffsetInclusive) && (offset + node.length > endOffsetExclusive)) {
291
- clippedOffset = startOffsetInclusive;
292
- clippedLength = endOffsetExclusive - startOffsetInclusive;
293
- }
294
- else if (offset < startOffsetInclusive) {
295
- clippedLength -= (startOffsetInclusive - offset);
296
- clippedOffset = startOffsetInclusive;
297
- }
298
- else if (offset + node.length > endOffsetExclusive) {
299
- clippedLength -= (offset + node.length - endOffsetExclusive);
300
- }
301
- result.push({ token: node.token, startOffsetInclusive: clippedOffset, length: clippedLength });
302
- }
303
- return false;
304
- });
305
- return result;
306
- }
307
- markForRefresh(startOffsetInclusive, endOffsetExclusive) {
308
- this.traverseInOrderInRange(startOffsetInclusive, endOffsetExclusive, (node) => {
309
- if (isLeaf(node)) {
310
- node.tokenQuality = TokenQuality.None;
311
- }
312
- return false;
313
- });
314
- }
315
- rangeHasTokens(startOffsetInclusive, endOffsetExclusive, minimumTokenQuality) {
316
- let hasAny = true;
317
- this.traverseInOrderInRange(startOffsetInclusive, endOffsetExclusive, (node) => {
318
- if (isLeaf(node) && (node.tokenQuality < minimumTokenQuality)) {
319
- hasAny = false;
320
- }
321
- return false;
322
- });
323
- return hasAny;
324
- }
325
- rangeNeedsRefresh(startOffsetInclusive, endOffsetExclusive) {
326
- let needsRefresh = false;
327
- this.traverseInOrderInRange(startOffsetInclusive, endOffsetExclusive, (node) => {
328
- if (isLeaf(node) && (node.tokenQuality !== TokenQuality.Accurate)) {
329
- needsRefresh = true;
330
- }
331
- return false;
332
- });
333
- return needsRefresh;
334
- }
335
- getNeedsRefresh() {
336
- const result = [];
337
- this.traverseInOrderInRange(0, this._textModel.getValueLength(), (node, offset) => {
338
- if (isLeaf(node) && (node.tokenQuality !== TokenQuality.Accurate)) {
339
- if ((result.length > 0) && (result[result.length - 1].endOffset === offset)) {
340
- result[result.length - 1].endOffset += node.length;
341
- }
342
- else {
343
- result.push({ startOffset: offset, endOffset: offset + node.length });
344
- }
345
- }
346
- return false;
347
- });
348
- return result;
349
- }
350
- deepCopy() {
351
- const newStore = ( new TokenStore(this._textModel));
352
- newStore._root = this._copyNodeIterative(this._root);
353
- return newStore;
354
- }
355
- _copyNodeIterative(root) {
356
- const newRoot = isLeaf(root)
357
- ? { length: root.length, token: root.token, tokenQuality: root.tokenQuality, height: root.height }
358
- : ( new ListNode(root.height));
359
- const stack = [[root, newRoot]];
360
- while (stack.length > 0) {
361
- const [oldNode, clonedNode] = stack.pop();
362
- if (!isLeaf(oldNode)) {
363
- for (const child of oldNode.children) {
364
- const childCopy = isLeaf(child)
365
- ? { length: child.length, token: child.token, tokenQuality: child.tokenQuality, height: child.height }
366
- : ( new ListNode(child.height));
367
- clonedNode.appendChild(childCopy);
368
- stack.push([child, childCopy]);
369
- }
370
- }
371
- }
372
- return newRoot;
373
- }
374
- printTree(root = this._root) {
375
- const result = [];
376
- const stack = [[root, 0]];
377
- while (stack.length > 0) {
378
- const [node, depth] = stack.pop();
379
- const indent = ' '.repeat(depth);
380
- if (isLeaf(node)) {
381
- result.push(`${indent}Leaf(length: ${node.length}, token: ${node.token}, refresh: ${node.tokenQuality})\n`);
382
- }
383
- else {
384
- result.push(`${indent}List(length: ${node.length})\n`);
385
- for (let i = node.children.length - 1; i >= 0; i--) {
386
- stack.push([node.children[i], depth + 1]);
387
- }
388
- }
389
- }
390
- return result.join('');
391
- }
392
- dispose() {
393
- const stack = [[this._root, false]];
394
- while (stack.length > 0) {
395
- const [node, visited] = stack.pop();
396
- if (isLeaf(node)) ;
397
- else if (!visited) {
398
- stack.push([node, true]);
399
- for (let i = node.children.length - 1; i >= 0; i--) {
400
- stack.push([node.children[i], false]);
401
- }
402
- }
403
- else {
404
- node.dispose();
405
- node.parent = undefined;
406
- }
407
- }
408
- this._root = undefined;
409
- }
410
- }
411
-
412
- export { TokenQuality, TokenStore };
@@ -1,32 +0,0 @@
1
- import { Range } from "@codingame/monaco-vscode-api/vscode/vs/editor/common/core/range";
2
- import { ITextModel } from "@codingame/monaco-vscode-api/vscode/vs/editor/common/model";
3
- import { TokenQuality, TokenUpdate } from "./tokenStore.js";
4
- import { IDisposable } from "@codingame/monaco-vscode-api/vscode/vs/base/common/lifecycle";
5
- import { IModelContentChangedEvent } from "@codingame/monaco-vscode-api/vscode/vs/editor/common/textModelEvents";
6
- import { ITreeSitterTokenizationStoreService } from "@codingame/monaco-vscode-api/vscode/vs/editor/common/model/treeSitterTokenStoreService.service";
7
- export interface TokenInformation {
8
- tokens: Uint32Array;
9
- needsRefresh?: boolean;
10
- }
11
- export declare class TreeSitterTokenizationStoreService implements ITreeSitterTokenizationStoreService, IDisposable {
12
- readonly _serviceBrand: undefined;
13
- private readonly tokens;
14
- constructor();
15
- setTokens(model: ITextModel, tokens: TokenUpdate[], tokenQuality: TokenQuality): void;
16
- handleContentChanged(model: ITextModel, e: IModelContentChangedEvent): void;
17
- rangeHasTokens(model: ITextModel, range: Range, minimumTokenQuality: TokenQuality): boolean;
18
- hasTokens(model: ITextModel, accurateForRange?: Range): boolean;
19
- getTokens(model: ITextModel, line: number): Uint32Array | undefined;
20
- updateTokens(model: ITextModel, version: number, updates: {
21
- oldRangeLength?: number;
22
- newTokens: TokenUpdate[];
23
- }[], tokenQuality: TokenQuality): void;
24
- markForRefresh(model: ITextModel, range: Range): void;
25
- getNeedsRefresh(model: ITextModel): {
26
- range: Range;
27
- startOffset: number;
28
- endOffset: number;
29
- }[];
30
- delete(model: ITextModel): void;
31
- dispose(): void;
32
- }
@@ -1,135 +0,0 @@
1
-
2
- import { Range } from '@codingame/monaco-vscode-api/vscode/vs/editor/common/core/range';
3
- import { TokenStore, TokenQuality } from './tokenStore.js';
4
- import '@codingame/monaco-vscode-api/vscode/vs/platform/instantiation/common/extensions';
5
- import { DisposableStore } from '@codingame/monaco-vscode-api/vscode/vs/base/common/lifecycle';
6
- import '@codingame/monaco-vscode-api/vscode/vs/platform/instantiation/common/instantiation';
7
-
8
- class TreeSitterTokenizationStoreService {
9
- constructor() {
10
- this.tokens = ( new Map());
11
- }
12
- setTokens(model, tokens, tokenQuality) {
13
- const disposables = ( new DisposableStore());
14
- const store = disposables.add(( new TokenStore(model)));
15
- this.tokens.set(model, { store: store, accurateVersion: model.getVersionId(), disposables, guessVersion: model.getVersionId() });
16
- store.buildStore(tokens, tokenQuality);
17
- disposables.add(model.onWillDispose(() => {
18
- const storeInfo = this.tokens.get(model);
19
- if (storeInfo) {
20
- storeInfo.disposables.dispose();
21
- this.tokens.delete(model);
22
- }
23
- }));
24
- }
25
- handleContentChanged(model, e) {
26
- const storeInfo = this.tokens.get(model);
27
- if (!storeInfo) {
28
- return;
29
- }
30
- storeInfo.guessVersion = e.versionId;
31
- for (const change of e.changes) {
32
- if (change.text.length > change.rangeLength) {
33
- const offset = change.rangeOffset > 0 ? change.rangeOffset - 1 : change.rangeOffset;
34
- const oldToken = storeInfo.store.getTokenAt(offset);
35
- let newToken;
36
- if (oldToken) {
37
- newToken = { startOffsetInclusive: oldToken.startOffsetInclusive, length: oldToken.length + change.text.length - change.rangeLength, token: oldToken.token };
38
- storeInfo.store.markForRefresh(offset, change.rangeOffset + (change.text.length > change.rangeLength ? change.text.length : change.rangeLength));
39
- }
40
- else {
41
- newToken = { startOffsetInclusive: offset, length: change.text.length, token: 0 };
42
- }
43
- storeInfo.store.update(oldToken?.length ?? 0, [newToken], TokenQuality.EditGuess);
44
- }
45
- else if (change.text.length < change.rangeLength) {
46
- const deletedCharCount = change.rangeLength - change.text.length;
47
- storeInfo.store.delete(deletedCharCount, change.rangeOffset);
48
- }
49
- }
50
- }
51
- rangeHasTokens(model, range, minimumTokenQuality) {
52
- const tokens = this.tokens.get(model);
53
- if (!tokens) {
54
- return false;
55
- }
56
- return tokens.store.rangeHasTokens(model.getOffsetAt(range.getStartPosition()), model.getOffsetAt(range.getEndPosition()), minimumTokenQuality);
57
- }
58
- hasTokens(model, accurateForRange) {
59
- const tokens = this.tokens.get(model);
60
- if (!tokens) {
61
- return false;
62
- }
63
- if (!accurateForRange || (tokens.guessVersion === tokens.accurateVersion)) {
64
- return true;
65
- }
66
- return !tokens.store.rangeNeedsRefresh(model.getOffsetAt(accurateForRange.getStartPosition()), model.getOffsetAt(accurateForRange.getEndPosition()));
67
- }
68
- getTokens(model, line) {
69
- const tokens = this.tokens.get(model)?.store;
70
- if (!tokens) {
71
- return undefined;
72
- }
73
- const lineStartOffset = model.getOffsetAt({ lineNumber: line, column: 1 });
74
- const lineTokens = tokens.getTokensInRange(lineStartOffset, model.getOffsetAt({ lineNumber: line, column: model.getLineLength(line) }) + 1);
75
- const result = ( new Uint32Array(lineTokens.length * 2));
76
- for (let i = 0; i < lineTokens.length; i++) {
77
- result[i * 2] = lineTokens[i].startOffsetInclusive - lineStartOffset + lineTokens[i].length;
78
- result[i * 2 + 1] = lineTokens[i].token;
79
- }
80
- return result;
81
- }
82
- updateTokens(model, version, updates, tokenQuality) {
83
- const existingTokens = this.tokens.get(model);
84
- if (!existingTokens) {
85
- return;
86
- }
87
- existingTokens.accurateVersion = version;
88
- for (const update of updates) {
89
- const lastToken = update.newTokens.length > 0 ? update.newTokens[update.newTokens.length - 1] : undefined;
90
- let oldRangeLength;
91
- if (lastToken && (existingTokens.guessVersion >= version)) {
92
- oldRangeLength = lastToken.startOffsetInclusive + lastToken.length - update.newTokens[0].startOffsetInclusive;
93
- }
94
- else if (update.oldRangeLength) {
95
- oldRangeLength = update.oldRangeLength;
96
- }
97
- else {
98
- oldRangeLength = 0;
99
- }
100
- existingTokens.store.update(oldRangeLength, update.newTokens, tokenQuality);
101
- }
102
- }
103
- markForRefresh(model, range) {
104
- const tree = this.tokens.get(model)?.store;
105
- if (!tree) {
106
- return;
107
- }
108
- tree.markForRefresh(model.getOffsetAt(range.getStartPosition()), model.getOffsetAt(range.getEndPosition()));
109
- }
110
- getNeedsRefresh(model) {
111
- const needsRefreshOffsetRanges = this.tokens.get(model)?.store.getNeedsRefresh();
112
- if (!needsRefreshOffsetRanges) {
113
- return [];
114
- }
115
- return ( needsRefreshOffsetRanges.map(range => ({
116
- range: Range.fromPositions(model.getPositionAt(range.startOffset), model.getPositionAt(range.endOffset)),
117
- startOffset: range.startOffset,
118
- endOffset: range.endOffset
119
- })));
120
- }
121
- delete(model) {
122
- const storeInfo = this.tokens.get(model);
123
- if (storeInfo) {
124
- storeInfo.disposables.dispose();
125
- this.tokens.delete(model);
126
- }
127
- }
128
- dispose() {
129
- for (const [, value] of this.tokens) {
130
- value.disposables.dispose();
131
- }
132
- }
133
- }
134
-
135
- export { TreeSitterTokenizationStoreService };
@@ -1,6 +0,0 @@
1
- import type * as Parser from "@vscode/tree-sitter-wasm";
2
- export declare function gotoNextSibling(newCursor: Parser.TreeCursor, oldCursor: Parser.TreeCursor): boolean;
3
- export declare function gotoParent(newCursor: Parser.TreeCursor, oldCursor: Parser.TreeCursor): boolean;
4
- export declare function gotoNthChild(newCursor: Parser.TreeCursor, oldCursor: Parser.TreeCursor, index: number): boolean;
5
- export declare function nextSiblingOrParentSibling(newCursor: Parser.TreeCursor, oldCursor: Parser.TreeCursor): boolean;
6
- export declare function getClosestPreviousNodes(cursor: Parser.TreeCursor, tree: Parser.Tree): Parser.Node | undefined;
@@ -1,76 +0,0 @@
1
-
2
-
3
- function gotoNextSibling(newCursor, oldCursor) {
4
- const n = newCursor.gotoNextSibling();
5
- const o = oldCursor.gotoNextSibling();
6
- if (n !== o) {
7
- throw ( new Error('Trees are out of sync'));
8
- }
9
- return n && o;
10
- }
11
- function gotoParent(newCursor, oldCursor) {
12
- const n = newCursor.gotoParent();
13
- const o = oldCursor.gotoParent();
14
- if (n !== o) {
15
- throw ( new Error('Trees are out of sync'));
16
- }
17
- return n && o;
18
- }
19
- function gotoNthChild(newCursor, oldCursor, index) {
20
- const n = newCursor.gotoFirstChild();
21
- const o = oldCursor.gotoFirstChild();
22
- if (n !== o) {
23
- throw ( new Error('Trees are out of sync'));
24
- }
25
- if (index === 0) {
26
- return n && o;
27
- }
28
- for (let i = 1; i <= index; i++) {
29
- const nn = newCursor.gotoNextSibling();
30
- const oo = oldCursor.gotoNextSibling();
31
- if (nn !== oo) {
32
- throw ( new Error('Trees are out of sync'));
33
- }
34
- if (!nn || !oo) {
35
- return false;
36
- }
37
- }
38
- return n && o;
39
- }
40
- function nextSiblingOrParentSibling(newCursor, oldCursor) {
41
- do {
42
- if (newCursor.currentNode.nextSibling) {
43
- return gotoNextSibling(newCursor, oldCursor);
44
- }
45
- if (newCursor.currentNode.parent) {
46
- gotoParent(newCursor, oldCursor);
47
- }
48
- } while (newCursor.currentNode.nextSibling || newCursor.currentNode.parent);
49
- return false;
50
- }
51
- function getClosestPreviousNodes(cursor, tree) {
52
- const findPrev = tree.walk();
53
- findPrev.resetTo(cursor);
54
- const startingNode = cursor.currentNode;
55
- do {
56
- if (findPrev.currentNode.previousSibling && ((findPrev.currentNode.endIndex - findPrev.currentNode.startIndex) !== 0)) {
57
- findPrev.gotoPreviousSibling();
58
- }
59
- else {
60
- while (!findPrev.currentNode.previousSibling && findPrev.currentNode.parent) {
61
- findPrev.gotoParent();
62
- }
63
- findPrev.gotoPreviousSibling();
64
- }
65
- } while ((findPrev.currentNode.endIndex > startingNode.startIndex)
66
- && (findPrev.currentNode.parent || findPrev.currentNode.previousSibling)
67
- && (findPrev.currentNode.id !== startingNode.id));
68
- if ((findPrev.currentNode.id !== startingNode.id) && findPrev.currentNode.endIndex <= startingNode.startIndex) {
69
- return findPrev.currentNode;
70
- }
71
- else {
72
- return undefined;
73
- }
74
- }
75
-
76
- export { getClosestPreviousNodes, gotoNextSibling, gotoNthChild, gotoParent, nextSiblingOrParentSibling };