@volar/monaco 2.4.0-alpha.2 → 2.4.0-alpha.20

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
@@ -35,7 +35,7 @@ self.onmessage = () => {
35
35
  languagePlugins: [
36
36
  // ...
37
37
  ],
38
- servicePlugins: [
38
+ languageServicePlugins: [
39
39
  // ...
40
40
  ],
41
41
  });
@@ -49,36 +49,34 @@ self.onmessage = () => {
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
51
  -import { createSimpleWorkerService, ServiceEnvironment } from '@volar/monaco/worker';
52
- +import {
53
- + createTypeScriptWorkerService,
54
- + ServiceEnvironment,
55
- +} from '@volar/monaco/worker';
52
+ +import { createTypeScriptWorkerService, ServiceEnvironment } from '@volar/monaco/worker';
56
53
  +import * as ts from 'typescript';
57
- +import { create as createTypeScriptService } from 'volar-service-typescript';
54
+ +import { create as createTypeScriptPlugins } from 'volar-service-typescript';
55
+ +import { URI } from 'vscode-uri';
58
56
 
59
57
  self.onmessage = () => {
60
58
  worker.initialize((ctx: monaco.worker.IWorkerContext) => {
61
59
  const env: ServiceEnvironment = {
62
60
  workspaceFolder: 'file:///',
63
- + typescript: {
64
- + uriToFileName: uri => uri.substring('file://'.length),
65
- + fileNameToUri: fileName => 'file://' + fileName,
66
- + },
67
61
  };
68
62
  - return createSimpleWorkerService({
69
63
  + return createTypeScriptWorkerService({
70
64
  + typescript: ts,
71
65
  + compilerOptions: {
72
66
  + // ...
67
+ + },
68
+ + uriConverter: {
69
+ + asFileName: uri => uri.fsPath,
70
+ + asUri: fileName => URI.file(fileName),
73
71
  + },
74
72
  workerContext: ctx,
75
73
  env,
76
74
  languagePlugins: [
77
75
  // ...
78
76
  ],
79
- servicePlugins: [
77
+ languageServicePlugins: [
80
78
  // ...
81
- + createTypeScriptService(ts),
79
+ + ...createTypeScriptPlugins(ts),
82
80
  ],
83
81
  });
84
82
  });
@@ -90,11 +88,8 @@ self.onmessage = () => {
90
88
  ```diff
91
89
  import * as worker from 'monaco-editor-core/esm/vs/editor/editor.worker';
92
90
  import type * as monaco from 'monaco-editor-core';
93
- import {
94
- createTypeScriptWorkerService,
95
- ServiceEnvironment,
96
- + activateAutomaticTypeAcquisition,
97
- } from '@volar/monaco/worker';
91
+ import { createTypeScriptWorkerService, ServiceEnvironment } from '@volar/monaco/worker';
92
+ +import { createNpmFileSystem } from '@volar/jsdelivr';
98
93
  import * as ts from 'typescript';
99
94
  import { create as createTypeScriptService } from 'volar-service-typescript';
100
95
 
@@ -107,7 +102,7 @@ self.onmessage = () => {
107
102
  fileNameToUri: fileName => 'file://' + fileName,
108
103
  },
109
104
  };
110
- + activateAutomaticTypeAcquisition(env);
105
+ + env.fs = createNpmFileSystem();
111
106
  return createTypeScriptWorkerService({
112
107
  typescript: ts,
113
108
  compilerOptions: {
@@ -118,7 +113,7 @@ self.onmessage = () => {
118
113
  languagePlugins: [
119
114
  // ...
120
115
  ],
121
- servicePlugins: [
116
+ languageServicePlugins: [
122
117
  // ...
123
118
  createTypeScriptService(ts),
124
119
  ],
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.2",
3
+ "version": "2.4.0-alpha.20",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "files": [
@@ -13,14 +13,14 @@
13
13
  "directory": "packages/monaco"
14
14
  },
15
15
  "dependencies": {
16
- "@volar/language-service": "2.4.0-alpha.2",
17
- "@volar/typescript": "2.4.0-alpha.2",
18
- "monaco-languageserver-types": "^0.3.4",
16
+ "@volar/language-service": "2.4.0-alpha.20",
17
+ "@volar/typescript": "2.4.0-alpha.20",
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": "62914047f925b79391fee6e4f697705b77641baf"
25
+ "gitHead": "63ec0dfd91333c91a7c6443cedc1ae074b317867"
26
26
  }