@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 +8 -8
- package/lib/editor.d.ts +3 -3
- package/lib/editor.js +44 -5
- package/lib/languages.d.ts +2 -2
- package/lib/provider.d.ts +2 -2
- package/lib/provider.js +62 -61
- package/lib/requestId.d.ts +3 -0
- package/lib/requestId.js +8 -0
- package/package.json +6 -5
- package/worker.d.ts +67 -125
- package/worker.js +195 -47
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 {
|
|
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
|
|
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 {
|
|
52
|
-
+import {
|
|
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
|
|
63
|
-
+ return
|
|
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 {
|
|
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
|
|
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
|
-
|
|
4
|
-
export declare function
|
|
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
|
|
64
|
-
|
|
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
|
|
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
|
-
|
|
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
|
package/lib/languages.d.ts
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
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(
|
|
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,
|
|
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,
|
|
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),
|
|
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
|
}
|
package/lib/requestId.js
ADDED
|
@@ -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
|
|
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
|
|
17
|
-
"@volar/typescript": "2.4.0
|
|
18
|
-
"monaco-languageserver-types": "^0.
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
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
|
|
107
|
-
getTriggerCharacters
|
|
108
|
-
getAutoFormatTriggerCharacters
|
|
109
|
-
getSignatureHelpTriggerCharacters
|
|
110
|
-
getSignatureHelpRetriggerCharacters
|
|
111
|
-
executeCommand(
|
|
112
|
-
getDocumentFormattingEdits
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
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
|
|
136
|
-
getFileRenameEdits
|
|
137
|
-
getSemanticTokens
|
|
138
|
-
getHover
|
|
139
|
-
getCompletionItems
|
|
140
|
-
getCodeActions
|
|
141
|
-
getSignatureHelp
|
|
142
|
-
getCodeLenses
|
|
143
|
-
getDocumentHighlights
|
|
144
|
-
getDocumentLinks
|
|
145
|
-
getWorkspaceSymbols
|
|
146
|
-
getAutoInsertSnippet
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
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 {
|
|
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
|
|
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
|
|
30
|
+
return new WorkerLanguageService(createLanguageService(language, languageServicePlugins, env, project));
|
|
31
31
|
}
|
|
32
|
-
export function
|
|
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
|
|
47
|
-
|
|
48
|
-
|
|
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
|
-
|
|
76
|
-
|
|
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
|
|
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
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
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
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
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
|