@volar/monaco 2.4.0-alpha.8 → 2.4.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.
package/README.md CHANGED
@@ -22,14 +22,14 @@ We assume you already know:
22
22
  // my-lang.worker.ts
23
23
  import * as worker from 'monaco-editor-core/esm/vs/editor/editor.worker';
24
24
  import type * as monaco from 'monaco-editor-core';
25
- import { createSimpleWorkerService, ServiceEnvironment } from '@volar/monaco/worker';
25
+ import { createSimpleWorkerLanguageService, ServiceEnvironment } from '@volar/monaco/worker';
26
26
 
27
27
  self.onmessage = () => {
28
28
  worker.initialize((ctx: monaco.worker.IWorkerContext) => {
29
29
  const env: ServiceEnvironment = {
30
30
  workspaceFolder: 'file:///',
31
31
  };
32
- return createSimpleWorkerService({
32
+ return createSimpleWorkerLanguageService({
33
33
  workerContext: ctx,
34
34
  env,
35
35
  languagePlugins: [
@@ -48,8 +48,8 @@ self.onmessage = () => {
48
48
  ```diff
49
49
  import * as worker from 'monaco-editor-core/esm/vs/editor/editor.worker';
50
50
  import type * as monaco from 'monaco-editor-core';
51
- -import { createSimpleWorkerService, ServiceEnvironment } from '@volar/monaco/worker';
52
- +import { createTypeScriptWorkerService, ServiceEnvironment } from '@volar/monaco/worker';
51
+ -import { createSimpleWorkerLanguageService, ServiceEnvironment } from '@volar/monaco/worker';
52
+ +import { createTypeScriptWorkerLanguageService, ServiceEnvironment } from '@volar/monaco/worker';
53
53
  +import * as ts from 'typescript';
54
54
  +import { create as createTypeScriptPlugins } from 'volar-service-typescript';
55
55
  +import { URI } from 'vscode-uri';
@@ -59,8 +59,8 @@ self.onmessage = () => {
59
59
  const env: ServiceEnvironment = {
60
60
  workspaceFolder: 'file:///',
61
61
  };
62
- - return createSimpleWorkerService({
63
- + return createTypeScriptWorkerService({
62
+ - return createSimpleWorkerLanguageService({
63
+ + return createTypeScriptWorkerLanguageService({
64
64
  + typescript: ts,
65
65
  + compilerOptions: {
66
66
  + // ...
@@ -88,7 +88,7 @@ self.onmessage = () => {
88
88
  ```diff
89
89
  import * as worker from 'monaco-editor-core/esm/vs/editor/editor.worker';
90
90
  import type * as monaco from 'monaco-editor-core';
91
- import { createTypeScriptWorkerService, ServiceEnvironment } from '@volar/monaco/worker';
91
+ import { createTypeScriptWorkerLanguageService, ServiceEnvironment } from '@volar/monaco/worker';
92
92
  +import { createNpmFileSystem } from '@volar/jsdelivr';
93
93
  import * as ts from 'typescript';
94
94
  import { create as createTypeScriptService } from 'volar-service-typescript';
@@ -103,7 +103,7 @@ self.onmessage = () => {
103
103
  },
104
104
  };
105
105
  + env.fs = createNpmFileSystem();
106
- return createTypeScriptWorkerService({
106
+ return createTypeScriptWorkerLanguageService({
107
107
  typescript: ts,
108
108
  compilerOptions: {
109
109
  // ...
package/lib/editor.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { LanguageService } from '@volar/language-service';
2
1
  import type { editor, IDisposable, MonacoEditor, Uri } from 'monaco-types';
3
- export declare function activateMarkers(worker: editor.MonacoWebWorker<LanguageService>, languages: string[], markersOwn: string, getSyncUris: () => Uri[], editor: MonacoEditor['editor']): IDisposable;
4
- export declare function activateAutoInsertion(worker: editor.MonacoWebWorker<LanguageService>, languages: string[], getSyncUris: () => Uri[], editor: MonacoEditor['editor']): IDisposable;
2
+ import { WorkerLanguageService } from '../worker.js';
3
+ export declare function activateMarkers(worker: editor.MonacoWebWorker<WorkerLanguageService>, languages: string[], markersOwn: string, getSyncUris: () => Uri[], editor: MonacoEditor['editor']): IDisposable;
4
+ export declare function activateAutoInsertion(worker: editor.MonacoWebWorker<WorkerLanguageService>, languages: string[], getSyncUris: () => Uri[], editor: MonacoEditor['editor']): IDisposable;
package/lib/editor.js CHANGED
@@ -1,5 +1,6 @@
1
1
  import { fromPosition, toMarkerData, toTextEdit } from 'monaco-languageserver-types';
2
2
  import { markers } from './markers.js';
3
+ import { getRequestId } from './requestId.js';
3
4
  export function activateMarkers(worker, languages, markersOwn, getSyncUris, editor) {
4
5
  const disposables = [];
5
6
  const listener = new Map();
@@ -58,10 +59,11 @@ export function activateMarkers(worker, languages, markersOwn, getSyncUris, edit
58
59
  if (!model.isAttachedToEditor()) {
59
60
  return;
60
61
  }
61
- const version = model.getVersionId();
62
62
  const languageService = await worker.withSyncedResources(getSyncUris());
63
- const diagnostics = await languageService.getDiagnostics(model.uri);
64
- if (model.getVersionId() !== version) {
63
+ const token = createTokenForModelChange(model);
64
+ const diagnostics = await languageService.getDiagnostics(getRequestId(token.token, languageService), model.uri);
65
+ token.dispose();
66
+ if (token.token.isCancellationRequested) {
65
67
  return;
66
68
  }
67
69
  const result = diagnostics.map(error => {
@@ -127,7 +129,8 @@ export function activateAutoInsertion(worker, languages, getSyncUris, editor) {
127
129
  return;
128
130
  }
129
131
  const languageService = await worker.withSyncedResources(getSyncUris());
130
- const edit = await languageService.getAutoInsertSnippet(model.uri, fromPosition({
132
+ const token = createTokenForModelChange(model);
133
+ const edit = await languageService.getAutoInsertSnippet(getRequestId(token.token, languageService), model.uri, fromPosition({
131
134
  lineNumber: lastChange.range.startLineNumber,
132
135
  column: lastChange.range.startColumn + lastChange.text.length,
133
136
  }), {
@@ -135,7 +138,8 @@ export function activateAutoInsertion(worker, languages, getSyncUris, editor) {
135
138
  rangeOffset: lastChange.rangeOffset,
136
139
  rangeLength: lastChange.rangeLength,
137
140
  });
138
- if (model.getVersionId() !== version) {
141
+ token.dispose();
142
+ if (token.token.isCancellationRequested) {
139
143
  return;
140
144
  }
141
145
  const codeEditor = editor.getEditors().find(e => e.getModel() === model);
@@ -152,4 +156,39 @@ export function activateAutoInsertion(worker, languages, getSyncUris, editor) {
152
156
  }, 100);
153
157
  }
154
158
  }
159
+ function createTokenForModelChange(model) {
160
+ const lastVersionId = model.getVersionId();
161
+ let callbacks;
162
+ const token = {
163
+ get isCancellationRequested() {
164
+ return model.getVersionId() !== lastVersionId;
165
+ },
166
+ onCancellationRequested(cb) {
167
+ const disposable = model.onDidChangeContent(() => {
168
+ cb(undefined);
169
+ disposable.dispose();
170
+ callbacks?.delete(disposable);
171
+ });
172
+ callbacks ??= new Set();
173
+ callbacks.add(disposable);
174
+ return {
175
+ dispose() {
176
+ disposable.dispose();
177
+ callbacks?.delete(disposable);
178
+ },
179
+ };
180
+ },
181
+ };
182
+ return {
183
+ token,
184
+ dispose() {
185
+ if (callbacks) {
186
+ for (const disposable of callbacks) {
187
+ disposable.dispose();
188
+ }
189
+ callbacks.clear();
190
+ }
191
+ },
192
+ };
193
+ }
155
194
  //# sourceMappingURL=editor.js.map
@@ -1,3 +1,3 @@
1
- import type { LanguageService } from '@volar/language-service';
2
1
  import type { IDisposable, MonacoEditor, Uri, editor, languages } from 'monaco-types';
3
- export declare function registerProviders(worker: editor.MonacoWebWorker<LanguageService>, language: languages.LanguageSelector, getSyncUris: () => Uri[], languages: MonacoEditor['languages']): Promise<IDisposable>;
2
+ import { WorkerLanguageService } from '../worker.js';
3
+ export declare function registerProviders(worker: editor.MonacoWebWorker<WorkerLanguageService>, language: languages.LanguageSelector, getSyncUris: () => Uri[], languages: MonacoEditor['languages']): Promise<IDisposable>;
package/lib/provider.d.ts CHANGED
@@ -1,3 +1,3 @@
1
- import type { LanguageService } from '@volar/language-service';
2
1
  import type { Uri, editor, languages } from 'monaco-types';
3
- export declare function createLanguageFeaturesProvider(worker: editor.MonacoWebWorker<LanguageService>, getSyncUris: () => Uri[]): Promise<languages.HoverProvider & languages.DocumentSymbolProvider & languages.DocumentHighlightProvider & languages.LinkedEditingRangeProvider & languages.DefinitionProvider & languages.TypeDefinitionProvider & languages.ImplementationProvider & languages.CodeLensProvider & languages.CodeActionProvider & languages.DocumentFormattingEditProvider & languages.DocumentRangeFormattingEditProvider & languages.OnTypeFormattingEditProvider & languages.LinkProvider & languages.CompletionItemProvider & languages.DocumentColorProvider & languages.FoldingRangeProvider & languages.DeclarationProvider & languages.SignatureHelpProvider & languages.RenameProvider & languages.ReferenceProvider & languages.SelectionRangeProvider & languages.InlayHintsProvider & languages.DocumentSemanticTokensProvider & languages.DocumentRangeSemanticTokensProvider>;
2
+ import { WorkerLanguageService } from '../worker.js';
3
+ export declare function createLanguageFeaturesProvider(worker: editor.MonacoWebWorker<WorkerLanguageService>, getSyncUris: () => Uri[]): Promise<languages.HoverProvider & languages.DocumentSymbolProvider & languages.DocumentHighlightProvider & languages.LinkedEditingRangeProvider & languages.DefinitionProvider & languages.TypeDefinitionProvider & languages.ImplementationProvider & languages.CodeLensProvider & languages.CodeActionProvider & languages.DocumentFormattingEditProvider & languages.DocumentRangeFormattingEditProvider & languages.OnTypeFormattingEditProvider & languages.LinkProvider & languages.CompletionItemProvider & languages.DocumentColorProvider & languages.FoldingRangeProvider & languages.DeclarationProvider & languages.SignatureHelpProvider & languages.RenameProvider & languages.ReferenceProvider & languages.SelectionRangeProvider & languages.InlayHintsProvider & languages.DocumentSemanticTokensProvider & languages.DocumentRangeSemanticTokensProvider>;
package/lib/provider.js CHANGED
@@ -1,5 +1,6 @@
1
1
  import { fromCompletionContext, fromFormattingOptions, fromPosition, fromRange, fromSignatureHelpContext, toCodeAction, toCodeLens, toColorInformation, toColorPresentation, toCompletionItem, toCompletionList, toDocumentHighlight, toDocumentSymbol, toFoldingRange, toHover, toInlayHint, toLink, toLinkedEditingRanges, toLocation, toLocationLink, toSelectionRanges, toSemanticTokens, toSignatureHelp, toTextEdit, toWorkspaceEdit, } from 'monaco-languageserver-types';
2
2
  import { markers } from './markers.js';
3
+ import { getRequestId } from './requestId.js';
3
4
  export async function createLanguageFeaturesProvider(worker, getSyncUris) {
4
5
  const completionItems = new WeakMap();
5
6
  const codeLens = new WeakMap();
@@ -17,66 +18,66 @@ export async function createLanguageFeaturesProvider(worker, getSyncUris) {
17
18
  getLegend() {
18
19
  return legend;
19
20
  },
20
- async provideDocumentSemanticTokens(model, _lastResultId) {
21
+ async provideDocumentSemanticTokens(model, _lastResultId, token) {
21
22
  const languageService = await worker.withSyncedResources(getSyncUris());
22
- const codeResult = await languageService.getSemanticTokens(model.uri, undefined, legend);
23
+ const codeResult = await languageService.getSemanticTokens(getRequestId(token, languageService), model.uri, undefined, legend);
23
24
  if (codeResult) {
24
25
  return toSemanticTokens(codeResult);
25
26
  }
26
27
  },
27
- async provideDocumentRangeSemanticTokens(model, range) {
28
+ async provideDocumentRangeSemanticTokens(model, range, token) {
28
29
  const languageService = await worker.withSyncedResources(getSyncUris());
29
- const codeResult = await languageService.getSemanticTokens(model.uri, fromRange(range), legend);
30
+ const codeResult = await languageService.getSemanticTokens(getRequestId(token, languageService), model.uri, fromRange(range), legend);
30
31
  if (codeResult) {
31
32
  return toSemanticTokens(codeResult);
32
33
  }
33
34
  },
34
35
  releaseDocumentSemanticTokens() { },
35
- async provideDocumentSymbols(model) {
36
+ async provideDocumentSymbols(model, token) {
36
37
  const languageService = await worker.withSyncedResources(getSyncUris());
37
- const codeResult = await languageService.getDocumentSymbols(model.uri);
38
+ const codeResult = await languageService.getDocumentSymbols(getRequestId(token, languageService), model.uri);
38
39
  if (codeResult) {
39
40
  return codeResult.map(toDocumentSymbol);
40
41
  }
41
42
  },
42
- async provideDocumentHighlights(model, position) {
43
+ async provideDocumentHighlights(model, position, token) {
43
44
  const languageService = await worker.withSyncedResources(getSyncUris());
44
- const codeResult = await languageService.getDocumentHighlights(model.uri, fromPosition(position));
45
+ const codeResult = await languageService.getDocumentHighlights(getRequestId(token, languageService), model.uri, fromPosition(position));
45
46
  if (codeResult) {
46
47
  return codeResult.map(toDocumentHighlight);
47
48
  }
48
49
  },
49
- async provideLinkedEditingRanges(model, position) {
50
+ async provideLinkedEditingRanges(model, position, token) {
50
51
  const languageService = await worker.withSyncedResources(getSyncUris());
51
- const codeResult = await languageService.getLinkedEditingRanges(model.uri, fromPosition(position));
52
+ const codeResult = await languageService.getLinkedEditingRanges(getRequestId(token, languageService), model.uri, fromPosition(position));
52
53
  if (codeResult) {
53
54
  return toLinkedEditingRanges(codeResult);
54
55
  }
55
56
  },
56
- async provideDefinition(model, position) {
57
+ async provideDefinition(model, position, token) {
57
58
  const languageService = await worker.withSyncedResources(getSyncUris());
58
- const codeResult = await languageService.getDefinition(model.uri, fromPosition(position));
59
+ const codeResult = await languageService.getDefinition(getRequestId(token, languageService), model.uri, fromPosition(position));
59
60
  if (codeResult) {
60
61
  return codeResult.map(toLocationLink);
61
62
  }
62
63
  },
63
- async provideImplementation(model, position) {
64
+ async provideImplementation(model, position, token) {
64
65
  const languageService = await worker.withSyncedResources(getSyncUris());
65
- const codeResult = await languageService.getImplementations(model.uri, fromPosition(position));
66
+ const codeResult = await languageService.getImplementations(getRequestId(token, languageService), model.uri, fromPosition(position));
66
67
  if (codeResult) {
67
68
  return codeResult.map(toLocationLink);
68
69
  }
69
70
  },
70
- async provideTypeDefinition(model, position) {
71
+ async provideTypeDefinition(model, position, token) {
71
72
  const languageService = await worker.withSyncedResources(getSyncUris());
72
- const codeResult = await languageService.getTypeDefinition(model.uri, fromPosition(position));
73
+ const codeResult = await languageService.getTypeDefinition(getRequestId(token, languageService), model.uri, fromPosition(position));
73
74
  if (codeResult) {
74
75
  return codeResult.map(toLocationLink);
75
76
  }
76
77
  },
77
- async provideCodeLenses(model) {
78
+ async provideCodeLenses(model, token) {
78
79
  const languageService = await worker.withSyncedResources(getSyncUris());
79
- const codeResult = await languageService.getCodeLenses(model.uri);
80
+ const codeResult = await languageService.getCodeLenses(getRequestId(token, languageService), model.uri);
80
81
  if (codeResult) {
81
82
  const monacoResult = codeResult.map(toCodeLens);
82
83
  for (let i = 0; i < monacoResult.length; i++) {
@@ -88,11 +89,11 @@ export async function createLanguageFeaturesProvider(worker, getSyncUris) {
88
89
  };
89
90
  }
90
91
  },
91
- async resolveCodeLens(_, monacoResult) {
92
+ async resolveCodeLens(_, monacoResult, token) {
92
93
  let codeResult = codeLens.get(monacoResult);
93
94
  if (codeResult) {
94
95
  const languageService = await worker.withSyncedResources(getSyncUris());
95
- codeResult = await languageService.resolveCodeLens(codeResult);
96
+ codeResult = await languageService.resolveCodeLens(getRequestId(token, languageService), codeResult);
96
97
  if (codeResult) {
97
98
  monacoResult = toCodeLens(codeResult);
98
99
  codeLens.set(monacoResult, codeResult);
@@ -100,7 +101,7 @@ export async function createLanguageFeaturesProvider(worker, getSyncUris) {
100
101
  }
101
102
  return monacoResult;
102
103
  },
103
- async provideCodeActions(model, range, context) {
104
+ async provideCodeActions(model, range, context, token) {
104
105
  const diagnostics = [];
105
106
  for (const marker of context.markers) {
106
107
  const diagnostic = markers.get(marker);
@@ -109,12 +110,12 @@ export async function createLanguageFeaturesProvider(worker, getSyncUris) {
109
110
  }
110
111
  }
111
112
  const languageService = await worker.withSyncedResources(getSyncUris());
112
- const codeResult = await languageService.getCodeActions(model.uri, fromRange(range), {
113
+ const codeResult = await languageService.getCodeActions(getRequestId(token, languageService), model.uri, fromRange(range), {
113
114
  diagnostics: diagnostics,
114
115
  only: context.only ? [context.only] : undefined,
115
116
  });
116
117
  if (codeResult) {
117
- const monacoResult = codeResult.map(codeAction => toCodeAction(codeAction));
118
+ const monacoResult = codeResult.map(toCodeAction);
118
119
  for (let i = 0; i < monacoResult.length; i++) {
119
120
  codeActions.set(monacoResult[i], codeResult[i]);
120
121
  }
@@ -124,11 +125,11 @@ export async function createLanguageFeaturesProvider(worker, getSyncUris) {
124
125
  };
125
126
  }
126
127
  },
127
- async resolveCodeAction(monacoResult) {
128
+ async resolveCodeAction(monacoResult, token) {
128
129
  let codeResult = codeActions.get(monacoResult);
129
130
  if (codeResult) {
130
131
  const languageService = await worker.withSyncedResources(getSyncUris());
131
- codeResult = await languageService.resolveCodeAction(codeResult);
132
+ codeResult = await languageService.resolveCodeAction(getRequestId(token, languageService), codeResult);
132
133
  if (codeResult) {
133
134
  monacoResult = toCodeAction(codeResult);
134
135
  codeActions.set(monacoResult, codeResult);
@@ -136,23 +137,23 @@ export async function createLanguageFeaturesProvider(worker, getSyncUris) {
136
137
  }
137
138
  return monacoResult;
138
139
  },
139
- async provideDocumentFormattingEdits(model, options) {
140
+ async provideDocumentFormattingEdits(model, options, token) {
140
141
  const languageService = await worker.withSyncedResources(getSyncUris());
141
- const codeResult = await languageService.getDocumentFormattingEdits(model.uri, fromFormattingOptions(options), undefined, undefined);
142
+ const codeResult = await languageService.getDocumentFormattingEdits(getRequestId(token, languageService), model.uri, fromFormattingOptions(options), undefined, undefined);
142
143
  if (codeResult) {
143
144
  return codeResult.map(toTextEdit);
144
145
  }
145
146
  },
146
- async provideDocumentRangeFormattingEdits(model, range, options) {
147
+ async provideDocumentRangeFormattingEdits(model, range, options, token) {
147
148
  const languageService = await worker.withSyncedResources(getSyncUris());
148
- const codeResult = await languageService.getDocumentFormattingEdits(model.uri, fromFormattingOptions(options), fromRange(range), undefined);
149
+ const codeResult = await languageService.getDocumentFormattingEdits(getRequestId(token, languageService), model.uri, fromFormattingOptions(options), fromRange(range), undefined);
149
150
  if (codeResult) {
150
151
  return codeResult.map(toTextEdit);
151
152
  }
152
153
  },
153
- async provideOnTypeFormattingEdits(model, position, ch, options) {
154
+ async provideOnTypeFormattingEdits(model, position, ch, options, token) {
154
155
  const languageService = await worker.withSyncedResources(getSyncUris());
155
- const codeResult = await languageService.getDocumentFormattingEdits(model.uri, fromFormattingOptions(options), undefined, {
156
+ const codeResult = await languageService.getDocumentFormattingEdits(getRequestId(token, languageService), model.uri, fromFormattingOptions(options), undefined, {
156
157
  ch: ch,
157
158
  position: fromPosition(position),
158
159
  });
@@ -160,9 +161,9 @@ export async function createLanguageFeaturesProvider(worker, getSyncUris) {
160
161
  return codeResult.map(toTextEdit);
161
162
  }
162
163
  },
163
- async provideLinks(model) {
164
+ async provideLinks(model, token) {
164
165
  const languageService = await worker.withSyncedResources(getSyncUris());
165
- const codeResult = await languageService.getDocumentLinks(model.uri);
166
+ const codeResult = await languageService.getDocumentLinks(getRequestId(token, languageService), model.uri);
166
167
  if (codeResult) {
167
168
  return {
168
169
  links: codeResult.map(link => {
@@ -173,17 +174,17 @@ export async function createLanguageFeaturesProvider(worker, getSyncUris) {
173
174
  };
174
175
  }
175
176
  },
176
- async resolveLink(link) {
177
+ async resolveLink(link, token) {
177
178
  let codeResult = documentLinks.get(link);
178
179
  if (codeResult) {
179
- codeResult = await languageService.resolveDocumentLink(codeResult);
180
+ codeResult = await languageService.resolveDocumentLink(getRequestId(token, languageService), codeResult);
180
181
  return toLink(codeResult);
181
182
  }
182
183
  return link;
183
184
  },
184
- async provideCompletionItems(model, position, context) {
185
+ async provideCompletionItems(model, position, context, token) {
185
186
  const languageService = await worker.withSyncedResources(getSyncUris());
186
- const codeResult = await languageService.getCompletionItems(model.uri, fromPosition(position), fromCompletionContext(context));
187
+ const codeResult = await languageService.getCompletionItems(getRequestId(token, languageService), model.uri, fromPosition(position), fromCompletionContext(context));
187
188
  const wordInfo = model.getWordUntilPosition(position);
188
189
  const monacoResult = toCompletionList(codeResult, {
189
190
  range: {
@@ -198,11 +199,11 @@ export async function createLanguageFeaturesProvider(worker, getSyncUris) {
198
199
  }
199
200
  return monacoResult;
200
201
  },
201
- async resolveCompletionItem(monacoItem) {
202
+ async resolveCompletionItem(monacoItem, token) {
202
203
  let codeItem = completionItems.get(monacoItem);
203
204
  if (codeItem) {
204
205
  const languageService = await worker.withSyncedResources(getSyncUris());
205
- codeItem = await languageService.resolveCompletionItem(codeItem);
206
+ codeItem = await languageService.resolveCompletionItem(getRequestId(token, languageService), codeItem);
206
207
  monacoItem = toCompletionItem(codeItem, {
207
208
  range: 'replace' in monacoItem.range ? monacoItem.range.replace : monacoItem.range
208
209
  });
@@ -210,18 +211,18 @@ export async function createLanguageFeaturesProvider(worker, getSyncUris) {
210
211
  }
211
212
  return monacoItem;
212
213
  },
213
- async provideDocumentColors(model) {
214
+ async provideDocumentColors(model, token) {
214
215
  const languageService = await worker.withSyncedResources(getSyncUris());
215
- const codeResult = await languageService.getDocumentColors(model.uri);
216
+ const codeResult = await languageService.getDocumentColors(getRequestId(token, languageService), model.uri);
216
217
  if (codeResult) {
217
218
  return codeResult.map(toColorInformation);
218
219
  }
219
220
  },
220
- async provideColorPresentations(model, monacoResult) {
221
+ async provideColorPresentations(model, monacoResult, token) {
221
222
  const languageService = await worker.withSyncedResources(getSyncUris());
222
223
  const codeResult = colorInfos.get(monacoResult);
223
224
  if (codeResult) {
224
- const codeColors = await languageService.getColorPresentations(model.uri, codeResult.color, {
225
+ const codeColors = await languageService.getColorPresentations(getRequestId(token, languageService), model.uri, codeResult.color, {
225
226
  start: fromPosition(model.getPositionAt(0)),
226
227
  end: fromPosition(model.getPositionAt(model.getValueLength())),
227
228
  });
@@ -230,28 +231,28 @@ export async function createLanguageFeaturesProvider(worker, getSyncUris) {
230
231
  }
231
232
  }
232
233
  },
233
- async provideFoldingRanges(model, _context) {
234
+ async provideFoldingRanges(model, _context, token) {
234
235
  const languageService = await worker.withSyncedResources(getSyncUris());
235
- const codeResult = await languageService.getFoldingRanges(model.uri);
236
+ const codeResult = await languageService.getFoldingRanges(getRequestId(token, languageService), model.uri);
236
237
  if (codeResult) {
237
238
  return codeResult.map(toFoldingRange);
238
239
  }
239
240
  },
240
- async provideDeclaration(model, position) {
241
+ async provideDeclaration(model, position, token) {
241
242
  const languageService = await worker.withSyncedResources(getSyncUris());
242
- const codeResult = await languageService.getDefinition(model.uri, fromPosition(position));
243
+ const codeResult = await languageService.getDefinition(getRequestId(token, languageService), model.uri, fromPosition(position));
243
244
  if (codeResult) {
244
245
  return codeResult.map(toLocationLink);
245
246
  }
246
247
  },
247
- async provideSelectionRanges(model, positions) {
248
+ async provideSelectionRanges(model, positions, token) {
248
249
  const languageService = await worker.withSyncedResources(getSyncUris());
249
- const codeResults = await languageService.getSelectionRanges(model.uri, positions.map(fromPosition));
250
+ const codeResults = await languageService.getSelectionRanges(getRequestId(token, languageService), model.uri, positions.map(fromPosition));
250
251
  return codeResults?.map(toSelectionRanges);
251
252
  },
252
- async provideSignatureHelp(model, position, _token, context) {
253
+ async provideSignatureHelp(model, position, token, context) {
253
254
  const languageService = await worker.withSyncedResources(getSyncUris());
254
- const codeResult = await languageService.getSignatureHelp(model.uri, fromPosition(position), fromSignatureHelpContext(context));
255
+ const codeResult = await languageService.getSignatureHelp(getRequestId(token, languageService), model.uri, fromPosition(position), fromSignatureHelpContext(context));
255
256
  if (codeResult) {
256
257
  return {
257
258
  value: toSignatureHelp(codeResult),
@@ -259,23 +260,23 @@ export async function createLanguageFeaturesProvider(worker, getSyncUris) {
259
260
  };
260
261
  }
261
262
  },
262
- async provideRenameEdits(model, position, newName) {
263
+ async provideRenameEdits(model, position, newName, token) {
263
264
  const languageService = await worker.withSyncedResources(getSyncUris());
264
- const codeResult = await languageService.getRenameEdits(model.uri, fromPosition(position), newName);
265
+ const codeResult = await languageService.getRenameEdits(getRequestId(token, languageService), model.uri, fromPosition(position), newName);
265
266
  if (codeResult) {
266
267
  return toWorkspaceEdit(codeResult);
267
268
  }
268
269
  },
269
- async provideReferences(model, position, _context) {
270
+ async provideReferences(model, position, context, token) {
270
271
  const languageService = await worker.withSyncedResources(getSyncUris());
271
- const codeResult = await languageService.getReferences(model.uri, fromPosition(position), { includeDeclaration: true });
272
+ const codeResult = await languageService.getReferences(getRequestId(token, languageService), model.uri, fromPosition(position), context);
272
273
  if (codeResult) {
273
274
  return codeResult.map(toLocation);
274
275
  }
275
276
  },
276
- async provideInlayHints(model, range) {
277
+ async provideInlayHints(model, range, token) {
277
278
  const languageService = await worker.withSyncedResources(getSyncUris());
278
- const codeResult = await languageService.getInlayHints(model.uri, fromRange(range));
279
+ const codeResult = await languageService.getInlayHints(getRequestId(token, languageService), model.uri, fromRange(range));
279
280
  if (codeResult) {
280
281
  return {
281
282
  hints: codeResult.map(hint => {
@@ -287,18 +288,18 @@ export async function createLanguageFeaturesProvider(worker, getSyncUris) {
287
288
  };
288
289
  }
289
290
  },
290
- async resolveInlayHint(hint) {
291
+ async resolveInlayHint(hint, token) {
291
292
  const languageService = await worker.withSyncedResources(getSyncUris());
292
293
  const codeHint = inlayHints.get(hint);
293
294
  if (codeHint) {
294
- const resolvedCodeHint = await languageService.resolveInlayHint(codeHint);
295
+ const resolvedCodeHint = await languageService.resolveInlayHint(getRequestId(token, languageService), codeHint);
295
296
  return toInlayHint(resolvedCodeHint);
296
297
  }
297
298
  return hint;
298
299
  },
299
- async provideHover(model, position) {
300
+ async provideHover(model, position, token) {
300
301
  const languageService = await worker.withSyncedResources(getSyncUris());
301
- const codeResult = await languageService.getHover(model.uri, fromPosition(position));
302
+ const codeResult = await languageService.getHover(getRequestId(token, languageService), model.uri, fromPosition(position));
302
303
  if (codeResult) {
303
304
  return toHover(codeResult);
304
305
  }
@@ -0,0 +1,3 @@
1
+ import type { CancellationToken } from 'monaco-types';
2
+ import type { WorkerLanguageService } from '../worker.js';
3
+ export declare function getRequestId(token: CancellationToken, languageService: WorkerLanguageService): number;
@@ -0,0 +1,8 @@
1
+ const requestIdMap = new WeakMap();
2
+ export function getRequestId(token, languageService) {
3
+ const nextRequestId = (requestIdMap.get(languageService) ?? 0) + 1;
4
+ requestIdMap.set(languageService, nextRequestId);
5
+ token.onCancellationRequested(() => languageService.cancelRequest(nextRequestId));
6
+ return nextRequestId;
7
+ }
8
+ //# sourceMappingURL=requestId.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@volar/monaco",
3
- "version": "2.4.0-alpha.8",
3
+ "version": "2.4.0",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "files": [
@@ -13,13 +13,14 @@
13
13
  "directory": "packages/monaco"
14
14
  },
15
15
  "dependencies": {
16
- "@volar/language-service": "2.4.0-alpha.8",
17
- "@volar/typescript": "2.4.0-alpha.8",
18
- "monaco-languageserver-types": "^0.3.4",
16
+ "@volar/language-service": "2.4.0",
17
+ "@volar/typescript": "2.4.0",
18
+ "monaco-languageserver-types": "^0.4.0",
19
19
  "monaco-types": "^0.1.0",
20
20
  "vscode-uri": "^3.0.8"
21
21
  },
22
22
  "devDependencies": {
23
23
  "monaco-editor-core": "latest"
24
- }
24
+ },
25
+ "gitHead": "7e98885cfe284451e655cf1c3954786b51aea2f8"
25
26
  }
package/worker.d.ts CHANGED
@@ -1,83 +1,19 @@
1
- import { Language, LanguagePlugin, LanguageServicePlugin, ProjectContext, type LanguageServiceEnvironment } from '@volar/language-service';
1
+ import { CancellationToken, Language, LanguagePlugin, LanguageServicePlugin, ProjectContext, type LanguageService, type LanguageServiceEnvironment } from '@volar/language-service';
2
2
  import type * as monaco from 'monaco-types';
3
3
  import type * as ts from 'typescript';
4
4
  import { URI } from 'vscode-uri';
5
5
  export * from '@volar/language-service';
6
- export declare function createSimpleWorkerService<T = {}>({ env, workerContext, languagePlugins, languageServicePlugins, extraApis, setup, }: {
6
+ export declare function createSimpleWorkerLanguageService({ env, workerContext, languagePlugins, languageServicePlugins, setup, }: {
7
7
  env: LanguageServiceEnvironment;
8
8
  workerContext: monaco.worker.IWorkerContext<any>;
9
9
  languagePlugins: LanguagePlugin<URI>[];
10
10
  languageServicePlugins: LanguageServicePlugin[];
11
- extraApis?: T;
12
11
  setup?(options: {
13
12
  language: Language<URI>;
14
13
  project: ProjectContext;
15
14
  }): void;
16
- }): {
17
- dispose: () => void;
18
- context: import("@volar/language-service").LanguageServiceContext;
19
- getCallHierarchyItems(_uri: URI | import("@volar/language-service").UriComponents, position: import("@volar/language-service").Position, token?: import("@volar/language-service").CancellationToken): Promise<import("@volar/language-service").CallHierarchyItem[] | undefined>;
20
- getCallHierarchyIncomingCalls(item: import("@volar/language-service").CallHierarchyItem, token: import("@volar/language-service").CancellationToken): Promise<import("@volar/language-service").CallHierarchyIncomingCall[]>;
21
- getCallHierarchyOutgoingCalls(item: import("@volar/language-service").CallHierarchyItem, token: import("@volar/language-service").CancellationToken): Promise<import("@volar/language-service").CallHierarchyOutgoingCall[]>;
22
- getSemanticTokenLegend: () => {
23
- tokenModifiers: string[];
24
- tokenTypes: string[];
25
- };
26
- getCommands: () => string[];
27
- getTriggerCharacters: () => string[];
28
- getAutoFormatTriggerCharacters: () => string[];
29
- getSignatureHelpTriggerCharacters: () => string[];
30
- getSignatureHelpRetriggerCharacters: () => string[];
31
- executeCommand(command: string, args: any[], token?: import("@volar/language-service").CancellationToken): any;
32
- getDocumentFormattingEdits: (_uri: URI | import("@volar/language-service").UriComponents, options: import("@volar/language-service").FormattingOptions, range: import("@volar/language-service").Range | undefined, onTypeParams: {
33
- ch: string;
34
- position: import("@volar/language-service").Position;
35
- } | undefined, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").TextEdit[] | undefined>;
36
- getFoldingRanges: (_uri: URI | import("@volar/language-service").UriComponents, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").FoldingRange[] | undefined>;
37
- getSelectionRanges: (_uri: URI | import("@volar/language-service").UriComponents, positions: import("@volar/language-service").Position[], token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").SelectionRange[] | undefined>;
38
- getLinkedEditingRanges: (_uri: URI | import("@volar/language-service").UriComponents, position: import("@volar/language-service").Position, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").LinkedEditingRanges | undefined>;
39
- getDocumentSymbols: (_uri: URI | import("@volar/language-service").UriComponents, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").DocumentSymbol[] | undefined>;
40
- getDocumentColors: (_uri: URI | import("@volar/language-service").UriComponents, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").ColorInformation[] | undefined>;
41
- getColorPresentations: (_uri: URI | import("@volar/language-service").UriComponents, color: import("@volar/language-service").Color, range: import("@volar/language-service").Range, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").ColorPresentation[] | undefined>;
42
- getDiagnostics: (_uri: URI | import("@volar/language-service").UriComponents, token?: import("@volar/language-service").CancellationToken, response?: (result: import("@volar/language-service").Diagnostic[]) => void) => Promise<import("@volar/language-service").Diagnostic[]>;
43
- getWorkspaceDiagnostics: (token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").WorkspaceDocumentDiagnosticReport[]>;
44
- getReferences: (_uri: URI | import("@volar/language-service").UriComponents, position: import("@volar/language-service").Position, referenceContext: import("@volar/language-service").ReferenceContext, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").Location[] | undefined>;
45
- getFileReferences: (_uri: URI | import("@volar/language-service/lib/types.js").UriComponents, token?: import("@volar/language-service").CancellationToken) => import("@volar/language-service/lib/types.js").NullableProviderResult<import("@volar/language-service").Location[]>;
46
- getDefinition: (_uri: URI | import("@volar/language-service").UriComponents, position: import("@volar/language-service").Position, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").LocationLink[] | undefined>;
47
- getTypeDefinition: (_uri: URI | import("@volar/language-service").UriComponents, position: import("@volar/language-service").Position, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").LocationLink[] | undefined>;
48
- getImplementations: (_uri: URI | import("@volar/language-service").UriComponents, position: import("@volar/language-service").Position, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").LocationLink[] | undefined>;
49
- getRenameRange: (_uri: URI | import("@volar/language-service/lib/types.js").UriComponents, position: import("@volar/language-service").Position, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").Range | {
50
- range: import("@volar/language-service").Range;
51
- placeholder: string;
52
- } | {
53
- message: string;
54
- } | undefined>;
55
- getRenameEdits: (_uri: URI | import("@volar/language-service").UriComponents, position: import("@volar/language-service").Position, newName: string, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").WorkspaceEdit | undefined>;
56
- getFileRenameEdits: (_oldUri: URI | import("@volar/language-service/lib/types.js").UriComponents, _newUri: URI | import("@volar/language-service/lib/types.js").UriComponents, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").WorkspaceEdit | undefined>;
57
- getSemanticTokens: (_uri: URI | import("@volar/language-service").UriComponents, range: import("@volar/language-service").Range | undefined, legend: import("@volar/language-service").SemanticTokensLegend, token?: import("@volar/language-service").CancellationToken, _reportProgress?: (tokens: import("@volar/language-service").SemanticTokens) => void) => Promise<import("@volar/language-service").SemanticTokens | undefined>;
58
- getHover: (_uri: URI | import("@volar/language-service").UriComponents, position: import("@volar/language-service").Position, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").Hover | undefined>;
59
- getCompletionItems: (_uri: URI | import("@volar/language-service").UriComponents, position: import("@volar/language-service").Position, completionContext?: import("@volar/language-service").CompletionContext, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").CompletionList>;
60
- getCodeActions: (_uri: URI | import("@volar/language-service").UriComponents, range: import("@volar/language-service").Range, codeActionContext: import("@volar/language-service").CodeActionContext, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").CodeAction[] | undefined>;
61
- getSignatureHelp: (_uri: URI | import("@volar/language-service").UriComponents, position: import("@volar/language-service").Position, signatureHelpContext?: import("@volar/language-service").SignatureHelpContext, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").SignatureHelp | undefined>;
62
- getCodeLenses: (_uri: URI | import("@volar/language-service").UriComponents, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").CodeLens[]>;
63
- getDocumentHighlights: (_uri: URI | import("@volar/language-service").UriComponents, position: import("@volar/language-service").Position, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").DocumentHighlight[] | undefined>;
64
- getDocumentLinks: (_uri: URI | import("@volar/language-service").UriComponents, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").DocumentLink[]>;
65
- getWorkspaceSymbols: (query: string, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").WorkspaceSymbol[]>;
66
- getAutoInsertSnippet: (_uri: URI | import("@volar/language-service").UriComponents, selection: import("@volar/language-service").Position, change: {
67
- rangeOffset: number;
68
- rangeLength: number;
69
- text: string;
70
- }, token?: import("@volar/language-service").CancellationToken) => Promise<string | undefined>;
71
- getDocumentDropEdits: (_uri: URI | import("@volar/language-service/lib/types.js").UriComponents, position: import("@volar/language-service").Position, dataTransfer: Map<string, import("@volar/language-service").DataTransferItem>, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").DocumentDropEdit | undefined>;
72
- getInlayHints: (_uri: URI | import("@volar/language-service").UriComponents, range: import("@volar/language-service").Range, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").InlayHint[] | undefined>;
73
- resolveCodeAction: (item: import("@volar/language-service").CodeAction, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").CodeAction>;
74
- resolveCompletionItem: (item: import("@volar/language-service").CompletionItem, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").CompletionItem>;
75
- resolveCodeLens: (item: import("@volar/language-service").CodeLens, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").CodeLens>;
76
- resolveDocumentLink: (item: import("@volar/language-service").DocumentLink, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").DocumentLink>;
77
- resolveInlayHint: (item: import("@volar/language-service").InlayHint, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").InlayHint>;
78
- resolveWorkspaceSymbol: (symbol: import("@volar/language-service").WorkspaceSymbol, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").WorkspaceSymbol>;
79
- } & T;
80
- export declare function createTypeScriptWorkerService<T = {}>({ typescript: ts, compilerOptions, env, uriConverter, workerContext, languagePlugins, languageServicePlugins, extraApis, setup, }: {
15
+ }): WorkerLanguageService;
16
+ export declare function createTypeScriptWorkerLanguageService({ typescript: ts, compilerOptions, env, uriConverter, workerContext, languagePlugins, languageServicePlugins, setup, }: {
81
17
  typescript: typeof import('typescript');
82
18
  compilerOptions: ts.CompilerOptions;
83
19
  env: LanguageServiceEnvironment;
@@ -88,72 +24,78 @@ export declare function createTypeScriptWorkerService<T = {}>({ typescript: ts,
88
24
  workerContext: monaco.worker.IWorkerContext<any>;
89
25
  languagePlugins: LanguagePlugin<URI>[];
90
26
  languageServicePlugins: LanguageServicePlugin[];
91
- extraApis?: T;
92
27
  setup?(options: {
93
28
  language: Language<URI>;
94
29
  project: ProjectContext;
95
30
  }): void;
96
- }): {
97
- dispose: () => void;
98
- context: import("@volar/language-service").LanguageServiceContext;
99
- getCallHierarchyItems(_uri: URI | import("@volar/language-service").UriComponents, position: import("@volar/language-service").Position, token?: import("@volar/language-service").CancellationToken): Promise<import("@volar/language-service").CallHierarchyItem[] | undefined>;
100
- getCallHierarchyIncomingCalls(item: import("@volar/language-service").CallHierarchyItem, token: import("@volar/language-service").CancellationToken): Promise<import("@volar/language-service").CallHierarchyIncomingCall[]>;
101
- getCallHierarchyOutgoingCalls(item: import("@volar/language-service").CallHierarchyItem, token: import("@volar/language-service").CancellationToken): Promise<import("@volar/language-service").CallHierarchyOutgoingCall[]>;
102
- getSemanticTokenLegend: () => {
31
+ }): WorkerLanguageService;
32
+ export interface UriComponents {
33
+ scheme: string;
34
+ authority: string;
35
+ path: string;
36
+ query: string;
37
+ fragment: string;
38
+ }
39
+ export declare class WorkerLanguageService {
40
+ private languageService;
41
+ pendingRequests: Map<number, Set<(e: any) => any> | undefined>;
42
+ constructor(languageService: LanguageService);
43
+ getSemanticTokenLegend(): {
103
44
  tokenModifiers: string[];
104
45
  tokenTypes: string[];
105
46
  };
106
- getCommands: () => string[];
107
- getTriggerCharacters: () => string[];
108
- getAutoFormatTriggerCharacters: () => string[];
109
- getSignatureHelpTriggerCharacters: () => string[];
110
- getSignatureHelpRetriggerCharacters: () => string[];
111
- executeCommand(command: string, args: any[], token?: import("@volar/language-service").CancellationToken): any;
112
- getDocumentFormattingEdits: (_uri: URI | import("@volar/language-service").UriComponents, options: import("@volar/language-service").FormattingOptions, range: import("@volar/language-service").Range | undefined, onTypeParams: {
113
- ch: string;
114
- position: import("@volar/language-service").Position;
115
- } | undefined, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").TextEdit[] | undefined>;
116
- getFoldingRanges: (_uri: URI | import("@volar/language-service").UriComponents, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").FoldingRange[] | undefined>;
117
- getSelectionRanges: (_uri: URI | import("@volar/language-service").UriComponents, positions: import("@volar/language-service").Position[], token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").SelectionRange[] | undefined>;
118
- getLinkedEditingRanges: (_uri: URI | import("@volar/language-service").UriComponents, position: import("@volar/language-service").Position, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").LinkedEditingRanges | undefined>;
119
- getDocumentSymbols: (_uri: URI | import("@volar/language-service").UriComponents, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").DocumentSymbol[] | undefined>;
120
- getDocumentColors: (_uri: URI | import("@volar/language-service").UriComponents, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").ColorInformation[] | undefined>;
121
- getColorPresentations: (_uri: URI | import("@volar/language-service").UriComponents, color: import("@volar/language-service").Color, range: import("@volar/language-service").Range, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").ColorPresentation[] | undefined>;
122
- getDiagnostics: (_uri: URI | import("@volar/language-service").UriComponents, token?: import("@volar/language-service").CancellationToken, response?: (result: import("@volar/language-service").Diagnostic[]) => void) => Promise<import("@volar/language-service").Diagnostic[]>;
123
- getWorkspaceDiagnostics: (token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").WorkspaceDocumentDiagnosticReport[]>;
124
- getReferences: (_uri: URI | import("@volar/language-service").UriComponents, position: import("@volar/language-service").Position, referenceContext: import("@volar/language-service").ReferenceContext, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").Location[] | undefined>;
125
- getFileReferences: (_uri: URI | import("@volar/language-service/lib/types.js").UriComponents, token?: import("@volar/language-service").CancellationToken) => import("@volar/language-service/lib/types.js").NullableProviderResult<import("@volar/language-service").Location[]>;
126
- getDefinition: (_uri: URI | import("@volar/language-service").UriComponents, position: import("@volar/language-service").Position, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").LocationLink[] | undefined>;
127
- getTypeDefinition: (_uri: URI | import("@volar/language-service").UriComponents, position: import("@volar/language-service").Position, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").LocationLink[] | undefined>;
128
- getImplementations: (_uri: URI | import("@volar/language-service").UriComponents, position: import("@volar/language-service").Position, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").LocationLink[] | undefined>;
129
- getRenameRange: (_uri: URI | import("@volar/language-service/lib/types.js").UriComponents, position: import("@volar/language-service").Position, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").Range | {
47
+ getCommands(): string[];
48
+ getTriggerCharacters(): string[];
49
+ getAutoFormatTriggerCharacters(): string[];
50
+ getSignatureHelpTriggerCharacters(): string[];
51
+ getSignatureHelpRetriggerCharacters(): string[];
52
+ executeCommand(requestId: number, ...args: TrimToken<LanguageService['executeCommand']>): Promise<any>;
53
+ getDocumentFormattingEdits(requestId: number, uri: UriComponents, ...restArgs: TrimURIAndToken<LanguageService['getDocumentFormattingEdits']>): Promise<import("@volar/language-service").TextEdit[] | undefined>;
54
+ getFoldingRanges(requestId: number, uri: UriComponents, ...restArgs: TrimURIAndToken<LanguageService['getFoldingRanges']>): Promise<import("@volar/language-service").FoldingRange[] | undefined>;
55
+ getSelectionRanges(requestId: number, uri: UriComponents, ...restArgs: TrimURIAndToken<LanguageService['getSelectionRanges']>): Promise<import("@volar/language-service").SelectionRange[] | undefined>;
56
+ getLinkedEditingRanges(requestId: number, uri: UriComponents, ...restArgs: TrimURIAndToken<LanguageService['getLinkedEditingRanges']>): Promise<import("@volar/language-service").LinkedEditingRanges | undefined>;
57
+ getDocumentSymbols(requestId: number, uri: UriComponents, ...restArgs: TrimURIAndToken<LanguageService['getDocumentSymbols']>): Promise<import("@volar/language-service").DocumentSymbol[] | undefined>;
58
+ getDocumentColors(requestId: number, uri: UriComponents, ...restArgs: TrimURIAndToken<LanguageService['getDocumentColors']>): Promise<import("@volar/language-service").ColorInformation[] | undefined>;
59
+ getColorPresentations(requestId: number, uri: UriComponents, ...restArgs: TrimURIAndToken<LanguageService['getColorPresentations']>): Promise<import("@volar/language-service").ColorPresentation[] | undefined>;
60
+ getDiagnostics(requestId: number, uri: UriComponents, ...restArgs: TrimURIAndToken<LanguageService['getDiagnostics']>): Promise<import("@volar/language-service").Diagnostic[]>;
61
+ getWorkspaceDiagnostics(requestId: number): Promise<import("@volar/language-service").WorkspaceDocumentDiagnosticReport[]>;
62
+ getReferences(requestId: number, uri: UriComponents, ...restArgs: TrimURIAndToken<LanguageService['getReferences']>): Promise<import("@volar/language-service").Location[] | undefined>;
63
+ getFileReferences(requestId: number, uri: UriComponents, ...restArgs: TrimURIAndToken<LanguageService['getFileReferences']>): Promise<import("@volar/language-service").Location[] | null | undefined>;
64
+ getDefinition(requestId: number, uri: UriComponents, ...restArgs: TrimURIAndToken<LanguageService['getDefinition']>): Promise<import("@volar/language-service").LocationLink[] | undefined>;
65
+ getTypeDefinition(requestId: number, uri: UriComponents, ...restArgs: TrimURIAndToken<LanguageService['getTypeDefinition']>): Promise<import("@volar/language-service").LocationLink[] | undefined>;
66
+ getImplementations(requestId: number, uri: UriComponents, ...restArgs: TrimURIAndToken<LanguageService['getImplementations']>): Promise<import("@volar/language-service").LocationLink[] | undefined>;
67
+ getRenameRange(requestId: number, uri: UriComponents, ...restArgs: TrimURIAndToken<LanguageService['getRenameRange']>): Promise<import("@volar/language-service").Range | {
130
68
  range: import("@volar/language-service").Range;
131
69
  placeholder: string;
132
70
  } | {
133
71
  message: string;
134
72
  } | undefined>;
135
- getRenameEdits: (_uri: URI | import("@volar/language-service").UriComponents, position: import("@volar/language-service").Position, newName: string, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").WorkspaceEdit | undefined>;
136
- getFileRenameEdits: (_oldUri: URI | import("@volar/language-service/lib/types.js").UriComponents, _newUri: URI | import("@volar/language-service/lib/types.js").UriComponents, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").WorkspaceEdit | undefined>;
137
- getSemanticTokens: (_uri: URI | import("@volar/language-service").UriComponents, range: import("@volar/language-service").Range | undefined, legend: import("@volar/language-service").SemanticTokensLegend, token?: import("@volar/language-service").CancellationToken, _reportProgress?: (tokens: import("@volar/language-service").SemanticTokens) => void) => Promise<import("@volar/language-service").SemanticTokens | undefined>;
138
- getHover: (_uri: URI | import("@volar/language-service").UriComponents, position: import("@volar/language-service").Position, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").Hover | undefined>;
139
- getCompletionItems: (_uri: URI | import("@volar/language-service").UriComponents, position: import("@volar/language-service").Position, completionContext?: import("@volar/language-service").CompletionContext, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").CompletionList>;
140
- getCodeActions: (_uri: URI | import("@volar/language-service").UriComponents, range: import("@volar/language-service").Range, codeActionContext: import("@volar/language-service").CodeActionContext, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").CodeAction[] | undefined>;
141
- getSignatureHelp: (_uri: URI | import("@volar/language-service").UriComponents, position: import("@volar/language-service").Position, signatureHelpContext?: import("@volar/language-service").SignatureHelpContext, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").SignatureHelp | undefined>;
142
- getCodeLenses: (_uri: URI | import("@volar/language-service").UriComponents, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").CodeLens[]>;
143
- getDocumentHighlights: (_uri: URI | import("@volar/language-service").UriComponents, position: import("@volar/language-service").Position, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").DocumentHighlight[] | undefined>;
144
- getDocumentLinks: (_uri: URI | import("@volar/language-service").UriComponents, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").DocumentLink[]>;
145
- getWorkspaceSymbols: (query: string, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").WorkspaceSymbol[]>;
146
- getAutoInsertSnippet: (_uri: URI | import("@volar/language-service").UriComponents, selection: import("@volar/language-service").Position, change: {
147
- rangeOffset: number;
148
- rangeLength: number;
149
- text: string;
150
- }, token?: import("@volar/language-service").CancellationToken) => Promise<string | undefined>;
151
- getDocumentDropEdits: (_uri: URI | import("@volar/language-service/lib/types.js").UriComponents, position: import("@volar/language-service").Position, dataTransfer: Map<string, import("@volar/language-service").DataTransferItem>, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").DocumentDropEdit | undefined>;
152
- getInlayHints: (_uri: URI | import("@volar/language-service").UriComponents, range: import("@volar/language-service").Range, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").InlayHint[] | undefined>;
153
- resolveCodeAction: (item: import("@volar/language-service").CodeAction, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").CodeAction>;
154
- resolveCompletionItem: (item: import("@volar/language-service").CompletionItem, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").CompletionItem>;
155
- resolveCodeLens: (item: import("@volar/language-service").CodeLens, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").CodeLens>;
156
- resolveDocumentLink: (item: import("@volar/language-service").DocumentLink, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").DocumentLink>;
157
- resolveInlayHint: (item: import("@volar/language-service").InlayHint, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").InlayHint>;
158
- resolveWorkspaceSymbol: (symbol: import("@volar/language-service").WorkspaceSymbol, token?: import("@volar/language-service").CancellationToken) => Promise<import("@volar/language-service").WorkspaceSymbol>;
159
- } & T;
73
+ getRenameEdits(requestId: number, uri: UriComponents, ...restArgs: TrimURIAndToken<LanguageService['getRenameEdits']>): Promise<import("@volar/language-service").WorkspaceEdit | undefined>;
74
+ getFileRenameEdits(requestId: number, uri: UriComponents, ...restArgs: TrimURIAndToken<LanguageService['getFileRenameEdits']>): Promise<import("@volar/language-service").WorkspaceEdit | undefined>;
75
+ getSemanticTokens(requestId: number, uri: UriComponents, ...restArgs: TrimURIAndToken<LanguageService['getSemanticTokens']>): Promise<import("@volar/language-service").SemanticTokens | undefined>;
76
+ getHover(requestId: number, uri: UriComponents, ...restArgs: TrimURIAndToken<LanguageService['getHover']>): Promise<import("@volar/language-service").Hover | undefined>;
77
+ getCompletionItems(requestId: number, uri: UriComponents, ...restArgs: TrimURIAndToken<LanguageService['getCompletionItems']>): Promise<import("@volar/language-service").CompletionList>;
78
+ getCodeActions(requestId: number, uri: UriComponents, ...restArgs: TrimURIAndToken<LanguageService['getCodeActions']>): Promise<import("@volar/language-service").CodeAction[] | undefined>;
79
+ getSignatureHelp(requestId: number, uri: UriComponents, ...restArgs: TrimURIAndToken<LanguageService['getSignatureHelp']>): Promise<import("@volar/language-service").SignatureHelp | undefined>;
80
+ getCodeLenses(requestId: number, uri: UriComponents, ...restArgs: TrimURIAndToken<LanguageService['getCodeLenses']>): Promise<import("@volar/language-service").CodeLens[]>;
81
+ getDocumentHighlights(requestId: number, uri: UriComponents, ...restArgs: TrimURIAndToken<LanguageService['getDocumentHighlights']>): Promise<import("@volar/language-service").DocumentHighlight[] | undefined>;
82
+ getDocumentLinks(requestId: number, uri: UriComponents, ...restArgs: TrimURIAndToken<LanguageService['getDocumentLinks']>): Promise<import("@volar/language-service").DocumentLink[]>;
83
+ getWorkspaceSymbols(requestId: number, ...args: TrimToken<LanguageService['getWorkspaceSymbols']>): Promise<import("@volar/language-service").WorkspaceSymbol[]>;
84
+ getAutoInsertSnippet(requestId: number, uri: UriComponents, ...restArgs: TrimURIAndToken<LanguageService['getAutoInsertSnippet']>): Promise<string | undefined>;
85
+ getDocumentDropEdits(requestId: number, uri: UriComponents, ...restArgs: TrimURIAndToken<LanguageService['getDocumentDropEdits']>): Promise<import("@volar/language-service").DocumentDropEdit | undefined>;
86
+ getInlayHints(requestId: number, uri: UriComponents, ...restArgs: TrimURIAndToken<LanguageService['getInlayHints']>): Promise<import("@volar/language-service").InlayHint[] | undefined>;
87
+ resolveCodeAction(requestId: number, ...args: TrimToken<LanguageService['resolveCodeAction']>): Promise<import("@volar/language-service").CodeAction>;
88
+ resolveCompletionItem(requestId: number, ...args: TrimToken<LanguageService['resolveCompletionItem']>): Promise<import("@volar/language-service").CompletionItem>;
89
+ resolveCodeLens(requestId: number, ...args: TrimToken<LanguageService['resolveCodeLens']>): Promise<import("@volar/language-service").CodeLens>;
90
+ resolveDocumentLink(requestId: number, ...args: TrimToken<LanguageService['resolveDocumentLink']>): Promise<import("@volar/language-service").DocumentLink>;
91
+ resolveInlayHint(requestId: number, ...args: TrimToken<LanguageService['resolveInlayHint']>): Promise<import("@volar/language-service").InlayHint>;
92
+ resolveWorkspaceSymbol(requestId: number, ...args: TrimToken<LanguageService['resolveWorkspaceSymbol']>): Promise<import("@volar/language-service").WorkspaceSymbol>;
93
+ getCallHierarchyItems(requestId: number, uri: UriComponents, ...restArgs: TrimURIAndToken<LanguageService['getCallHierarchyItems']>): Promise<import("@volar/language-service").CallHierarchyItem[] | undefined>;
94
+ getCallHierarchyIncomingCalls(requestId: number, ...args: TrimToken<LanguageService['getCallHierarchyIncomingCalls']>): Promise<import("@volar/language-service").CallHierarchyIncomingCall[]>;
95
+ getCallHierarchyOutgoingCalls(requestId: number, ...args: TrimToken<LanguageService['getCallHierarchyOutgoingCalls']>): Promise<import("@volar/language-service").CallHierarchyOutgoingCall[]>;
96
+ dispose(): void;
97
+ cancelRequest(requestId: number): void;
98
+ private withToken;
99
+ }
100
+ type TrimURIAndToken<T> = T extends ((...args: [uri: URI, ...infer U, token: CancellationToken]) => any) ? [...U] : never;
101
+ type TrimToken<T> = T extends ((...args: [...infer U, token: CancellationToken]) => any) ? [...U] : never;
package/worker.js CHANGED
@@ -1,9 +1,9 @@
1
- import { createLanguageService as _createLanguageService, createLanguage, createUriMap, } from '@volar/language-service';
1
+ import { createLanguage, createLanguageService, createUriMap, } from '@volar/language-service';
2
2
  import { createLanguageServiceHost, createSys, resolveFileLanguageId } from '@volar/typescript';
3
3
  import { URI } from 'vscode-uri';
4
4
  export * from '@volar/language-service';
5
5
  const fsFileSnapshots = createUriMap();
6
- export function createSimpleWorkerService({ env, workerContext, languagePlugins, languageServicePlugins, extraApis = {}, setup, }) {
6
+ export function createSimpleWorkerLanguageService({ env, workerContext, languagePlugins, languageServicePlugins, setup, }) {
7
7
  const snapshots = new Map();
8
8
  const language = createLanguage(languagePlugins, createUriMap(false), uri => {
9
9
  const model = workerContext.getMirrorModels().find(model => model.uri.toString() === uri.toString());
@@ -27,9 +27,9 @@ export function createSimpleWorkerService({ env, workerContext, languagePlugins,
27
27
  });
28
28
  const project = {};
29
29
  setup?.({ language, project });
30
- return createWorkerService(language, languageServicePlugins, env, project, extraApis);
30
+ return new WorkerLanguageService(createLanguageService(language, languageServicePlugins, env, project));
31
31
  }
32
- export function createTypeScriptWorkerService({ typescript: ts, compilerOptions, env, uriConverter, workerContext, languagePlugins, languageServicePlugins, extraApis = {}, setup, }) {
32
+ export function createTypeScriptWorkerLanguageService({ typescript: ts, compilerOptions, env, uriConverter, workerContext, languagePlugins, languageServicePlugins, setup, }) {
33
33
  let projectVersion = 0;
34
34
  const modelSnapshot = new WeakMap();
35
35
  const modelVersions = new Map();
@@ -42,10 +42,23 @@ export function createTypeScriptWorkerService({ typescript: ts, compilerOptions,
42
42
  const language = createLanguage([
43
43
  ...languagePlugins,
44
44
  { getLanguageId: uri => resolveFileLanguageId(uri.path) },
45
- ], createUriMap(sys.useCaseSensitiveFileNames), uri => {
46
- let snapshot = getModelSnapshot(uri);
47
- if (!snapshot) {
48
- // fs files
45
+ ], createUriMap(sys.useCaseSensitiveFileNames), (uri, includeFsFiles) => {
46
+ let snapshot;
47
+ const model = workerContext.getMirrorModels().find(model => model.uri.toString() === uri.toString());
48
+ if (model) {
49
+ const cache = modelSnapshot.get(model);
50
+ if (cache && cache[0] === model.version) {
51
+ return cache[1];
52
+ }
53
+ const text = model.getValue();
54
+ modelSnapshot.set(model, [model.version, {
55
+ getText: (start, end) => text.substring(start, end),
56
+ getLength: () => text.length,
57
+ getChangeRange: () => undefined,
58
+ }]);
59
+ snapshot = modelSnapshot.get(model)?.[1];
60
+ }
61
+ else if (includeFsFiles) {
49
62
  const cache = fsFileSnapshots.get(uri);
50
63
  const fileName = uriConverter.asFileName(uri);
51
64
  const modifiedTime = sys.getModifiedTime?.(fileName)?.valueOf();
@@ -72,9 +85,8 @@ export function createTypeScriptWorkerService({ typescript: ts, compilerOptions,
72
85
  typescript: {
73
86
  configFileName: undefined,
74
87
  sys,
75
- asFileName: uriConverter.asFileName,
76
- asUri: uriConverter.asUri,
77
- ...createLanguageServiceHost(ts, sys, language, uriConverter.asUri, {
88
+ uriConverter,
89
+ ...createLanguageServiceHost(ts, sys, language, s => uriConverter.asUri(s), {
78
90
  getCurrentDirectory() {
79
91
  return sys.getCurrentDirectory();
80
92
  },
@@ -95,10 +107,6 @@ export function createTypeScriptWorkerService({ typescript: ts, compilerOptions,
95
107
  projectVersion++;
96
108
  return projectVersion.toString();
97
109
  },
98
- getScriptSnapshot(fileName) {
99
- const uri = uriConverter.asUri(fileName);
100
- return getModelSnapshot(uri);
101
- },
102
110
  getCompilationSettings() {
103
111
  return compilerOptions;
104
112
  },
@@ -106,41 +114,181 @@ export function createTypeScriptWorkerService({ typescript: ts, compilerOptions,
106
114
  },
107
115
  };
108
116
  setup?.({ language, project });
109
- return createWorkerService(language, languageServicePlugins, env, project, extraApis);
110
- function getModelSnapshot(uri) {
111
- const model = workerContext.getMirrorModels().find(model => model.uri.toString() === uri.toString());
112
- if (model) {
113
- const cache = modelSnapshot.get(model);
114
- if (cache && cache[0] === model.version) {
115
- return cache[1];
116
- }
117
- const text = model.getValue();
118
- modelSnapshot.set(model, [model.version, {
119
- getText: (start, end) => text.substring(start, end),
120
- getLength: () => text.length,
121
- getChangeRange: () => undefined,
122
- }]);
123
- return modelSnapshot.get(model)?.[1];
124
- }
125
- }
117
+ return new WorkerLanguageService(createLanguageService(language, languageServicePlugins, env, project));
126
118
  }
127
- function createWorkerService(language, servicePlugins, env, projectContext, extraApis = {}) {
128
- const languageService = _createLanguageService(language, servicePlugins, env, projectContext);
129
- class WorkerService {
130
- }
131
- ;
132
- for (const api in languageService) {
133
- const isFunction = typeof languageService[api] === 'function';
134
- if (isFunction) {
135
- WorkerService.prototype[api] = languageService[api];
136
- }
119
+ export class WorkerLanguageService {
120
+ constructor(languageService) {
121
+ this.languageService = languageService;
122
+ this.pendingRequests = new Map();
123
+ }
124
+ getSemanticTokenLegend() {
125
+ return this.languageService.semanticTokenLegend;
126
+ }
127
+ getCommands() {
128
+ return this.languageService.commands;
129
+ }
130
+ getTriggerCharacters() {
131
+ return this.languageService.triggerCharacters;
132
+ }
133
+ getAutoFormatTriggerCharacters() {
134
+ return this.languageService.autoFormatTriggerCharacters;
135
+ }
136
+ getSignatureHelpTriggerCharacters() {
137
+ return this.languageService.signatureHelpTriggerCharacters;
138
+ }
139
+ getSignatureHelpRetriggerCharacters() {
140
+ return this.languageService.signatureHelpRetriggerCharacters;
141
+ }
142
+ executeCommand(requestId, ...args) {
143
+ return this.withToken(requestId, token => this.languageService.executeCommand(...args, token));
144
+ }
145
+ getDocumentFormattingEdits(requestId, uri, ...restArgs) {
146
+ return this.withToken(requestId, token => this.languageService.getDocumentFormattingEdits(URI.from(uri), ...restArgs, token));
147
+ }
148
+ getFoldingRanges(requestId, uri, ...restArgs) {
149
+ return this.withToken(requestId, token => this.languageService.getFoldingRanges(URI.from(uri), ...restArgs, token));
150
+ }
151
+ getSelectionRanges(requestId, uri, ...restArgs) {
152
+ return this.withToken(requestId, token => this.languageService.getSelectionRanges(URI.from(uri), ...restArgs, token));
137
153
  }
138
- for (const api in extraApis) {
139
- const isFunction = typeof extraApis[api] === 'function';
140
- if (isFunction) {
141
- WorkerService.prototype[api] = extraApis[api];
154
+ getLinkedEditingRanges(requestId, uri, ...restArgs) {
155
+ return this.withToken(requestId, token => this.languageService.getLinkedEditingRanges(URI.from(uri), ...restArgs, token));
156
+ }
157
+ getDocumentSymbols(requestId, uri, ...restArgs) {
158
+ return this.withToken(requestId, token => this.languageService.getDocumentSymbols(URI.from(uri), ...restArgs, token));
159
+ }
160
+ getDocumentColors(requestId, uri, ...restArgs) {
161
+ return this.withToken(requestId, token => this.languageService.getDocumentColors(URI.from(uri), ...restArgs, token));
162
+ }
163
+ getColorPresentations(requestId, uri, ...restArgs) {
164
+ return this.withToken(requestId, token => this.languageService.getColorPresentations(URI.from(uri), ...restArgs, token));
165
+ }
166
+ getDiagnostics(requestId, uri, ...restArgs) {
167
+ return this.withToken(requestId, token => this.languageService.getDiagnostics(URI.from(uri), ...restArgs, token));
168
+ }
169
+ getWorkspaceDiagnostics(requestId) {
170
+ return this.withToken(requestId, token => this.languageService.getWorkspaceDiagnostics(token));
171
+ }
172
+ getReferences(requestId, uri, ...restArgs) {
173
+ return this.withToken(requestId, token => this.languageService.getReferences(URI.from(uri), ...restArgs, token));
174
+ }
175
+ getFileReferences(requestId, uri, ...restArgs) {
176
+ return this.withToken(requestId, token => this.languageService.getFileReferences(URI.from(uri), ...restArgs, token));
177
+ }
178
+ getDefinition(requestId, uri, ...restArgs) {
179
+ return this.withToken(requestId, token => this.languageService.getDefinition(URI.from(uri), ...restArgs, token));
180
+ }
181
+ getTypeDefinition(requestId, uri, ...restArgs) {
182
+ return this.withToken(requestId, token => this.languageService.getTypeDefinition(URI.from(uri), ...restArgs, token));
183
+ }
184
+ getImplementations(requestId, uri, ...restArgs) {
185
+ return this.withToken(requestId, token => this.languageService.getImplementations(URI.from(uri), ...restArgs, token));
186
+ }
187
+ getRenameRange(requestId, uri, ...restArgs) {
188
+ return this.withToken(requestId, token => this.languageService.getRenameRange(URI.from(uri), ...restArgs, token));
189
+ }
190
+ getRenameEdits(requestId, uri, ...restArgs) {
191
+ return this.withToken(requestId, token => this.languageService.getRenameEdits(URI.from(uri), ...restArgs, token));
192
+ }
193
+ getFileRenameEdits(requestId, uri, ...restArgs) {
194
+ return this.withToken(requestId, token => this.languageService.getFileRenameEdits(URI.from(uri), ...restArgs, token));
195
+ }
196
+ getSemanticTokens(requestId, uri, ...restArgs) {
197
+ return this.withToken(requestId, token => this.languageService.getSemanticTokens(URI.from(uri), ...restArgs, token));
198
+ }
199
+ getHover(requestId, uri, ...restArgs) {
200
+ return this.withToken(requestId, token => this.languageService.getHover(URI.from(uri), ...restArgs, token));
201
+ }
202
+ getCompletionItems(requestId, uri, ...restArgs) {
203
+ return this.withToken(requestId, token => this.languageService.getCompletionItems(URI.from(uri), ...restArgs, token));
204
+ }
205
+ getCodeActions(requestId, uri, ...restArgs) {
206
+ return this.withToken(requestId, token => this.languageService.getCodeActions(URI.from(uri), ...restArgs, token));
207
+ }
208
+ getSignatureHelp(requestId, uri, ...restArgs) {
209
+ return this.withToken(requestId, token => this.languageService.getSignatureHelp(URI.from(uri), ...restArgs, token));
210
+ }
211
+ getCodeLenses(requestId, uri, ...restArgs) {
212
+ return this.withToken(requestId, token => this.languageService.getCodeLenses(URI.from(uri), ...restArgs, token));
213
+ }
214
+ getDocumentHighlights(requestId, uri, ...restArgs) {
215
+ return this.withToken(requestId, token => this.languageService.getDocumentHighlights(URI.from(uri), ...restArgs, token));
216
+ }
217
+ getDocumentLinks(requestId, uri, ...restArgs) {
218
+ return this.withToken(requestId, token => this.languageService.getDocumentLinks(URI.from(uri), ...restArgs, token));
219
+ }
220
+ getWorkspaceSymbols(requestId, ...args) {
221
+ return this.withToken(requestId, token => this.languageService.getWorkspaceSymbols(...args, token));
222
+ }
223
+ getAutoInsertSnippet(requestId, uri, ...restArgs) {
224
+ return this.withToken(requestId, token => this.languageService.getAutoInsertSnippet(URI.from(uri), ...restArgs, token));
225
+ }
226
+ getDocumentDropEdits(requestId, uri, ...restArgs) {
227
+ return this.withToken(requestId, token => this.languageService.getDocumentDropEdits(URI.from(uri), ...restArgs, token));
228
+ }
229
+ getInlayHints(requestId, uri, ...restArgs) {
230
+ return this.withToken(requestId, token => this.languageService.getInlayHints(URI.from(uri), ...restArgs, token));
231
+ }
232
+ resolveCodeAction(requestId, ...args) {
233
+ return this.withToken(requestId, token => this.languageService.resolveCodeAction(...args, token));
234
+ }
235
+ resolveCompletionItem(requestId, ...args) {
236
+ return this.withToken(requestId, token => this.languageService.resolveCompletionItem(...args, token));
237
+ }
238
+ resolveCodeLens(requestId, ...args) {
239
+ return this.withToken(requestId, token => this.languageService.resolveCodeLens(...args, token));
240
+ }
241
+ resolveDocumentLink(requestId, ...args) {
242
+ return this.withToken(requestId, token => this.languageService.resolveDocumentLink(...args, token));
243
+ }
244
+ resolveInlayHint(requestId, ...args) {
245
+ return this.withToken(requestId, token => this.languageService.resolveInlayHint(...args, token));
246
+ }
247
+ resolveWorkspaceSymbol(requestId, ...args) {
248
+ return this.withToken(requestId, token => this.languageService.resolveWorkspaceSymbol(...args, token));
249
+ }
250
+ getCallHierarchyItems(requestId, uri, ...restArgs) {
251
+ return this.withToken(requestId, token => this.languageService.getCallHierarchyItems(URI.from(uri), ...restArgs, token));
252
+ }
253
+ getCallHierarchyIncomingCalls(requestId, ...args) {
254
+ return this.withToken(requestId, token => this.languageService.getCallHierarchyIncomingCalls(...args, token));
255
+ }
256
+ getCallHierarchyOutgoingCalls(requestId, ...args) {
257
+ return this.withToken(requestId, token => this.languageService.getCallHierarchyOutgoingCalls(...args, token));
258
+ }
259
+ dispose() {
260
+ this.languageService.dispose();
261
+ }
262
+ cancelRequest(requestId) {
263
+ this.pendingRequests.delete(requestId);
264
+ }
265
+ async withToken(requestId, fn) {
266
+ const { pendingRequests } = this;
267
+ const token = {
268
+ get isCancellationRequested() {
269
+ return !!pendingRequests.has(requestId);
270
+ },
271
+ onCancellationRequested(cb) {
272
+ let callbacks = pendingRequests.get(requestId);
273
+ if (!callbacks) {
274
+ callbacks = new Set();
275
+ pendingRequests.set(requestId, callbacks);
276
+ }
277
+ callbacks.add(cb);
278
+ return {
279
+ dispose() {
280
+ callbacks.delete(cb);
281
+ },
282
+ };
283
+ },
284
+ };
285
+ this.pendingRequests.set(requestId, undefined);
286
+ try {
287
+ return await fn(token);
288
+ }
289
+ finally {
290
+ this.pendingRequests.delete(requestId);
142
291
  }
143
292
  }
144
- return new WorkerService();
145
293
  }
146
294
  //# sourceMappingURL=worker.js.map