@codingame/monaco-vscode-treesitter-service-override 15.0.2 → 16.0.0

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 (22) hide show
  1. package/index.js +1 -1
  2. package/package.json +9 -6
  3. package/vscode/src/vs/editor/common/languages/highlights/typescript.scm +488 -0
  4. package/vscode/src/vs/editor/common/model/tokenStore.d.ts +0 -1
  5. package/vscode/src/vs/editor/common/model/tokenStore.js +14 -8
  6. package/vscode/src/vs/editor/common/model/treeSitterTokenStoreService.d.ts +3 -0
  7. package/vscode/src/vs/editor/common/model/treeSitterTokenStoreService.js +33 -27
  8. package/vscode/src/vs/editor/common/services/treeSitter/cursorUtils.d.ts +6 -0
  9. package/vscode/src/vs/editor/common/services/treeSitter/cursorUtils.js +76 -0
  10. package/vscode/src/vs/editor/common/services/treeSitter/textModelTreeSitter.d.ts +88 -0
  11. package/vscode/src/vs/editor/common/services/treeSitter/textModelTreeSitter.js +675 -0
  12. package/vscode/src/vs/editor/common/services/treeSitter/treeSitterLanguages.d.ts +30 -0
  13. package/vscode/src/vs/editor/common/services/treeSitter/treeSitterLanguages.js +102 -0
  14. package/vscode/src/vs/editor/common/services/treeSitter/treeSitterParserService.d.ts +8 -80
  15. package/vscode/src/vs/editor/common/services/treeSitter/treeSitterParserService.js +20 -522
  16. package/vscode/src/vs/editor/common/services/treeSitterParserService.d.ts +16 -3
  17. package/vscode/src/vs/editor/common/services/treeSitterParserService.js +1 -1
  18. package/vscode/src/vs/workbench/services/treeSitter/browser/treeSitterCodeEditors.d.ts +7 -2
  19. package/vscode/src/vs/workbench/services/treeSitter/browser/treeSitterCodeEditors.js +43 -22
  20. package/vscode/src/vs/workbench/services/treeSitter/browser/treeSitterTokenizationFeature.d.ts +14 -14
  21. package/vscode/src/vs/workbench/services/treeSitter/browser/treeSitterTokenizationFeature.js +256 -169
  22. package/assets/typescript.scm +0 -388
@@ -3,7 +3,6 @@ import { __decorate, __param } from '@codingame/monaco-vscode-api/external/tslib
3
3
  import { Emitter, Event } from '@codingame/monaco-vscode-api/vscode/vs/base/common/event';
4
4
  import { Disposable, DisposableMap, DisposableStore } from '@codingame/monaco-vscode-api/vscode/vs/base/common/lifecycle';
5
5
  import { ICodeEditorService } from '@codingame/monaco-vscode-api/vscode/vs/editor/browser/services/codeEditorService.service';
6
- import { PLAINTEXT_LANGUAGE_ID } from '@codingame/monaco-vscode-api/vscode/vs/editor/common/languages/modesRegistry';
7
6
  import { Range } from '@codingame/monaco-vscode-api/vscode/vs/editor/common/core/range';
8
7
  import { ITreeSitterParserService } from '@codingame/monaco-vscode-api/vscode/vs/editor/common/services/treeSitterParserService.service';
9
8
 
@@ -13,15 +12,20 @@ let TreeSitterCodeEditors = class TreeSitterCodeEditors extends Disposable {
13
12
  this._languageId = _languageId;
14
13
  this._codeEditorService = _codeEditorService;
15
14
  this._treeSitterParserService = _treeSitterParserService;
16
- this._editors = this._register(( new DisposableMap()));
15
+ this._textModels = ( new Set());
16
+ this._languageEditors = this._register(( new DisposableMap()));
17
+ this._allEditors = this._register(( new DisposableMap()));
17
18
  this._onDidChangeViewport = this._register(( new Emitter()));
18
19
  this.onDidChangeViewport = this._onDidChangeViewport.event;
19
20
  this._register(this._codeEditorService.onCodeEditorAdd(this._onCodeEditorAdd, this));
20
21
  this._register(this._codeEditorService.onCodeEditorRemove(this._onCodeEditorRemove, this));
21
22
  this._codeEditorService.listCodeEditors().forEach(this._onCodeEditorAdd, this);
22
23
  }
23
- get editors() {
24
- return Array.from(( this._editors.keys()));
24
+ get textModels() {
25
+ return Array.from(( this._textModels.keys()));
26
+ }
27
+ getEditorForModel(model) {
28
+ return this._codeEditorService.listCodeEditors().find(editor => editor.getModel() === model);
25
29
  }
26
30
  async getInitialViewPorts() {
27
31
  await this._treeSitterParserService.getLanguage(this._languageId);
@@ -29,7 +33,7 @@ let TreeSitterCodeEditors = class TreeSitterCodeEditors extends Disposable {
29
33
  const viewports = [];
30
34
  for (const editor of editors) {
31
35
  const model = await this.getEditorModel(editor);
32
- if (model) {
36
+ if (model && model.getLanguageId() === this._languageId) {
33
37
  viewports.push({
34
38
  model,
35
39
  ranges: this._nonIntersectingViewPortRanges(editor)
@@ -39,7 +43,7 @@ let TreeSitterCodeEditors = class TreeSitterCodeEditors extends Disposable {
39
43
  return viewports;
40
44
  }
41
45
  _onCodeEditorRemove(editor) {
42
- this._editors.deleteAndDispose(editor);
46
+ this._allEditors.deleteAndDispose(editor);
43
47
  }
44
48
  async getEditorModel(editor) {
45
49
  let model = editor.getModel() ?? undefined;
@@ -48,30 +52,47 @@ let TreeSitterCodeEditors = class TreeSitterCodeEditors extends Disposable {
48
52
  await Event.toPromise(Event.once(editor.onDidChangeModel), disposableStore);
49
53
  model = editor.getModel() ?? undefined;
50
54
  }
51
- if (!model) {
52
- return;
53
- }
54
- let language = model.getLanguageId();
55
- if (language === PLAINTEXT_LANGUAGE_ID) {
56
- const disposableStore = this._register(( new DisposableStore()));
57
- await Event.toPromise(Event.once(model.onDidChangeLanguage), disposableStore);
58
- language = model.getLanguageId();
59
- }
60
- if (language !== this._languageId) {
61
- return;
62
- }
63
55
  return model;
64
56
  }
65
57
  async _onCodeEditorAdd(editor) {
66
- const model = await this.getEditorModel(editor);
58
+ const otherEditorDisposables = ( new DisposableStore());
59
+ otherEditorDisposables.add(editor.onDidChangeModel(() => this._onDidChangeModel(editor, editor.getModel()), this));
60
+ this._allEditors.set(editor, otherEditorDisposables);
61
+ const model = editor.getModel();
67
62
  if (model) {
68
- this._editors.set(editor, editor.onDidScrollChange(() => this._onViewportChange(editor), this));
69
- this._onViewportChange(editor);
63
+ this._tryAddEditor(editor, model);
64
+ }
65
+ }
66
+ _tryAddEditor(editor, model) {
67
+ const language = model.getLanguageId();
68
+ if ((language === this._languageId)) {
69
+ if (!( this._textModels.has(model))) {
70
+ this._textModels.add(model);
71
+ }
72
+ if (!( this._languageEditors.has(editor))) {
73
+ const langaugeEditorDisposables = ( new DisposableStore());
74
+ langaugeEditorDisposables.add(editor.onDidScrollChange(() => this._onViewportChange(editor), this));
75
+ this._languageEditors.set(editor, langaugeEditorDisposables);
76
+ this._onViewportChange(editor);
77
+ }
78
+ }
79
+ }
80
+ async _onDidChangeModel(editor, model) {
81
+ if (model) {
82
+ this._tryAddEditor(editor, model);
83
+ }
84
+ else {
85
+ this._languageEditors.deleteAndDispose(editor);
70
86
  }
71
87
  }
72
88
  async _onViewportChange(editor) {
73
89
  const ranges = this._nonIntersectingViewPortRanges(editor);
74
- this._onDidChangeViewport.fire({ model: editor.getModel(), ranges });
90
+ const model = editor.getModel();
91
+ if (!model) {
92
+ this._languageEditors.deleteAndDispose(editor);
93
+ return;
94
+ }
95
+ this._onDidChangeViewport.fire({ model: model, ranges });
75
96
  }
76
97
  _nonIntersectingViewPortRanges(editor) {
77
98
  const viewportRanges = editor.getVisibleRangesPlusViewportAboveBelow();
@@ -3,7 +3,7 @@ import { Event } from "@codingame/monaco-vscode-api/vscode/vs/base/common/event"
3
3
  import { Disposable } from "@codingame/monaco-vscode-api/vscode/vs/base/common/lifecycle";
4
4
  import { ILanguageIdCodec, ITreeSitterTokenizationSupport, QueryCapture } from "@codingame/monaco-vscode-api/vscode/vs/editor/common/languages";
5
5
  import { ITextModel } from "@codingame/monaco-vscode-api/vscode/vs/editor/common/model";
6
- import { ITreeSitterParseResult } from "../../../../editor/common/services/treeSitterParserService.js";
6
+ import { ITextModelTreeSitter } from "../../../../editor/common/services/treeSitterParserService.js";
7
7
  import { ITreeSitterImporter } from "@codingame/monaco-vscode-api/vscode/vs/editor/common/services/treeSitterParserService.service";
8
8
  import { ITreeSitterParserService } from "@codingame/monaco-vscode-api/vscode/vs/editor/common/services/treeSitterParserService.service";
9
9
  import { IModelTokensChangedEvent } from "@codingame/monaco-vscode-api/vscode/vs/editor/common/textModelEvents";
@@ -14,10 +14,10 @@ import { ILanguageService } from "@codingame/monaco-vscode-api/vscode/vs/editor/
14
14
  import { ITreeSitterTokenizationStoreService } from "@codingame/monaco-vscode-api/vscode/vs/editor/common/model/treeSitterTokenStoreService.service";
15
15
  import { TokenUpdate } from "../../../../editor/common/model/tokenStore.js";
16
16
  import { Range } from "@codingame/monaco-vscode-api/vscode/vs/editor/common/core/range";
17
- import { ICodeEditorService } from "@codingame/monaco-vscode-api/vscode/vs/editor/browser/services/codeEditorService.service";
18
17
  import { IWorkbenchThemeService } from "@codingame/monaco-vscode-7ba0af96-90c2-5e11-ad7f-befdbbf246c8-common/vscode/vs/workbench/services/themes/common/workbenchThemeService.service";
19
18
  import { ITreeSitterTokenizationFeature } from "@codingame/monaco-vscode-api/vscode/vs/workbench/services/treeSitter/browser/treeSitterTokenizationFeature.service";
20
19
  type TreeSitterQueries = string;
20
+ export declare const TREESITTER_BASE_SCOPES: Record<string, string>;
21
21
  export declare class TreeSitterTokenizationFeature extends Disposable implements ITreeSitterTokenizationFeature {
22
22
  private readonly _treeSitterImporter;
23
23
  private readonly _languageService;
@@ -40,7 +40,6 @@ export declare class TreeSitterTokenizationSupport extends Disposable implements
40
40
  private readonly _treeSitterService;
41
41
  private readonly _themeService;
42
42
  private readonly _tokenizationStoreService;
43
- private readonly _codeEditorService;
44
43
  private readonly _instantiationService;
45
44
  private _query;
46
45
  private readonly _onDidChangeTokens;
@@ -48,45 +47,46 @@ export declare class TreeSitterTokenizationSupport extends Disposable implements
48
47
  textModel: ITextModel;
49
48
  changes: IModelTokensChangedEvent;
50
49
  }>;
51
- private readonly _onDidCompleteFirstTokenization;
52
- readonly onDidCompleteFirstTokenization: Event<{
50
+ private readonly _onDidCompleteBackgroundTokenization;
51
+ readonly onDidChangeBackgroundTokenization: Event<{
53
52
  textModel: ITextModel;
54
53
  }>;
55
54
  private _colorThemeData;
56
55
  private _languageAddedListener;
57
56
  private _codeEditors;
58
- constructor(_queries: TreeSitterQueries, Query: typeof Parser.Query, _languageId: string, _languageIdCodec: ILanguageIdCodec, _treeSitterService: ITreeSitterParserService, _themeService: IWorkbenchThemeService, _tokenizationStoreService: ITreeSitterTokenizationStoreService, _codeEditorService: ICodeEditorService, _instantiationService: IInstantiationService);
57
+ private _encodedLanguage;
58
+ constructor(_queries: TreeSitterQueries, Query: typeof Parser.Query, _languageId: string, _languageIdCodec: ILanguageIdCodec, _treeSitterService: ITreeSitterParserService, _themeService: IWorkbenchThemeService, _tokenizationStoreService: ITreeSitterTokenizationStoreService, _instantiationService: IInstantiationService);
59
+ private get _encodedLanguageId();
59
60
  private _setInitialTokens;
60
- private _parseAndTokenizeViewPortRange;
61
+ private _forceParseAndTokenizeContent;
61
62
  private _parseAndTokenizeViewPort;
63
+ guessTokensForLinesContent(lineNumber: number, textModel: ITextModel, lines: string[]): Uint32Array[] | undefined;
62
64
  private _emptyTokensForOffsetAndLength;
63
65
  private _createEmptyTokens;
64
66
  private _firstTreeUpdate;
65
- private _codeEditorForModel;
66
67
  private _setViewPortTokens;
67
68
  private _handleTreeUpdate;
68
69
  private _updateTreeForRanges;
69
70
  private _refreshNeedsRefresh;
70
71
  private _rangeTokensAsUpdates;
71
- getTokensInRange(textModel: ITextModel, range: Range, rangeStartOffset: number, rangeEndOffset: number, captures?: {
72
- tree: ITreeSitterParseResult | undefined;
73
- captures: QueryCapture[];
74
- }): TokenUpdate[] | undefined;
72
+ getTokensInRange(textModel: ITextModel, range: Range, rangeStartOffset: number, rangeEndOffset: number, tree?: Parser.Tree, captures?: QueryCapture[]): TokenUpdate[] | undefined;
75
73
  private _getTree;
76
74
  private _ensureQuery;
77
75
  private _updateTheme;
78
76
  captureAtPosition(lineNumber: number, column: number, textModel: ITextModel): QueryCapture[];
79
- captureAtPositionTree(lineNumber: number, column: number, tree: Parser.Tree): QueryCapture[];
77
+ captureAtRangeTree(range: Range, tree: Parser.Tree, textModelTreeSitter: ITextModelTreeSitter | undefined): QueryCapture[];
80
78
  private _captureAtRange;
79
+ private _captureAtRangeWithInjections;
81
80
  tokenizeEncoded(lineNumber: number, textModel: ITextModel): undefined;
82
81
  tokenizeEncodedInstrumented(lineNumber: number, textModel: ITextModel): {
83
82
  result: Uint32Array;
84
83
  captureTime: number;
85
84
  metadataTime: number;
86
85
  } | undefined;
87
- private _getTreeAndCaptures;
86
+ private _getCaptures;
88
87
  private _tokenize;
89
88
  private _createTokensFromCaptures;
89
+ private _getInjectionCaptures;
90
90
  private _tokenizeCapturesWithMetadata;
91
91
  private _emptyToken;
92
92
  private _tokenizeEncoded;