@volar/monaco 2.2.5 → 2.3.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/ata.d.ts +5 -2
- package/lib/ata.js +4 -4
- package/lib/editor.js +2 -2
- package/lib/provider.d.ts +1 -1
- package/lib/provider.js +27 -27
- package/package.json +4 -4
- package/worker.d.ts +79 -66
- package/worker.js +86 -54
package/lib/ata.d.ts
CHANGED
|
@@ -1,2 +1,5 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
|
|
1
|
+
import type { LanguageServiceEnvironment } from '@volar/language-service';
|
|
2
|
+
import type { URI } from 'vscode-uri';
|
|
3
|
+
export declare function activateAutomaticTypeAcquisition(env: LanguageServiceEnvironment, uriConverter: {
|
|
4
|
+
asFileName(uri: URI): string;
|
|
5
|
+
}, onFetch?: (path: string, content: string) => void): void;
|
package/lib/ata.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export function activateAutomaticTypeAcquisition(env, onFetch) {
|
|
1
|
+
export function activateAutomaticTypeAcquisition(env, uriConverter, onFetch) {
|
|
2
2
|
const textCache = new Map();
|
|
3
3
|
const jsonCache = new Map();
|
|
4
4
|
const npmFs = createJsDelivrNpmFileSystem();
|
|
@@ -22,7 +22,7 @@ export function activateAutomaticTypeAcquisition(env, onFetch) {
|
|
|
22
22
|
const flatResults = new Map();
|
|
23
23
|
return {
|
|
24
24
|
async stat(uri) {
|
|
25
|
-
const fileName =
|
|
25
|
+
const fileName = uriConverter.asFileName(uri);
|
|
26
26
|
if (fileName === '/node_modules') {
|
|
27
27
|
return {
|
|
28
28
|
type: 2,
|
|
@@ -37,14 +37,14 @@ export function activateAutomaticTypeAcquisition(env, onFetch) {
|
|
|
37
37
|
}
|
|
38
38
|
},
|
|
39
39
|
async readFile(uri) {
|
|
40
|
-
const fileName =
|
|
40
|
+
const fileName = uriConverter.asFileName(uri);
|
|
41
41
|
if (fileName.startsWith('/node_modules/')) {
|
|
42
42
|
const path = fileName.substring('/node_modules/'.length);
|
|
43
43
|
return await _readFile(path);
|
|
44
44
|
}
|
|
45
45
|
},
|
|
46
46
|
async readDirectory(uri) {
|
|
47
|
-
const fileName =
|
|
47
|
+
const fileName = uriConverter.asFileName(uri);
|
|
48
48
|
if (fileName.startsWith('/node_modules/')) {
|
|
49
49
|
const path = fileName.substring('/node_modules/'.length);
|
|
50
50
|
return _readDirectory(path);
|
package/lib/editor.js
CHANGED
|
@@ -60,7 +60,7 @@ export function activateMarkers(worker, languages, markersOwn, getSyncUris, edit
|
|
|
60
60
|
}
|
|
61
61
|
const version = model.getVersionId();
|
|
62
62
|
const languageService = await worker.withSyncedResources(getSyncUris());
|
|
63
|
-
const diagnostics = await languageService.doValidation(model.uri
|
|
63
|
+
const diagnostics = await languageService.doValidation(model.uri);
|
|
64
64
|
if (model.getVersionId() !== version) {
|
|
65
65
|
return;
|
|
66
66
|
}
|
|
@@ -127,7 +127,7 @@ export function activateAutoInsertion(worker, languages, getSyncUris, editor) {
|
|
|
127
127
|
return;
|
|
128
128
|
}
|
|
129
129
|
const languageService = await worker.withSyncedResources(getSyncUris());
|
|
130
|
-
const edit = await languageService.doAutoInsert(model.uri
|
|
130
|
+
const edit = await languageService.doAutoInsert(model.uri, fromPosition({
|
|
131
131
|
lineNumber: lastChange.range.startLineNumber,
|
|
132
132
|
column: lastChange.range.startColumn + lastChange.text.length,
|
|
133
133
|
}), {
|
package/lib/provider.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { LanguageService } from '@volar/language-service';
|
|
1
|
+
import type { LanguageService } from '@volar/language-service';
|
|
2
2
|
import type { Uri, editor, languages } from 'monaco-types';
|
|
3
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>;
|
package/lib/provider.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { standardSemanticTokensLegend, } from '@volar/language-service';
|
|
2
1
|
import { fromCompletionContext, fromFormattingOptions, fromPosition, fromRange, fromSignatureHelpContext, toCodeAction, toCodeLens, toColorInformation, toColorPresentation, toCompletionItem, toCompletionList, toDocumentHighlight, toDocumentSymbol, toFoldingRange, toHover, toInlayHint, toLink, toLinkedEditingRanges, toLocation, toLocationLink, toSelectionRange, toSemanticTokens, toSignatureHelp, toTextEdit, toWorkspaceEdit, } from 'monaco-languageserver-types';
|
|
3
2
|
import { markers } from './markers.js';
|
|
4
3
|
export async function createLanguageFeaturesProvider(worker, getSyncUris) {
|
|
@@ -9,24 +8,25 @@ export async function createLanguageFeaturesProvider(worker, getSyncUris) {
|
|
|
9
8
|
const documentLinks = new WeakMap();
|
|
10
9
|
const inlayHints = new WeakMap();
|
|
11
10
|
const languageService = await worker.getProxy();
|
|
11
|
+
const legend = await languageService.getSemanticTokenLegend();
|
|
12
12
|
return {
|
|
13
13
|
triggerCharacters: await languageService.getTriggerCharacters(),
|
|
14
14
|
autoFormatTriggerCharacters: await languageService.getAutoFormatTriggerCharacters(),
|
|
15
15
|
signatureHelpTriggerCharacters: await languageService.getSignatureHelpTriggerCharacters(),
|
|
16
16
|
signatureHelpRetriggerCharacters: await languageService.getSignatureHelpRetriggerCharacters(),
|
|
17
17
|
getLegend() {
|
|
18
|
-
return
|
|
18
|
+
return legend;
|
|
19
19
|
},
|
|
20
20
|
async provideDocumentSemanticTokens(model, _lastResultId) {
|
|
21
21
|
const languageService = await worker.withSyncedResources(getSyncUris());
|
|
22
|
-
const codeResult = await languageService.getSemanticTokens(model.uri
|
|
22
|
+
const codeResult = await languageService.getSemanticTokens(model.uri, undefined, legend);
|
|
23
23
|
if (codeResult) {
|
|
24
24
|
return toSemanticTokens(codeResult);
|
|
25
25
|
}
|
|
26
26
|
},
|
|
27
27
|
async provideDocumentRangeSemanticTokens(model, range) {
|
|
28
28
|
const languageService = await worker.withSyncedResources(getSyncUris());
|
|
29
|
-
const codeResult = await languageService.getSemanticTokens(model.uri
|
|
29
|
+
const codeResult = await languageService.getSemanticTokens(model.uri, fromRange(range), legend);
|
|
30
30
|
if (codeResult) {
|
|
31
31
|
return toSemanticTokens(codeResult);
|
|
32
32
|
}
|
|
@@ -34,49 +34,49 @@ export async function createLanguageFeaturesProvider(worker, getSyncUris) {
|
|
|
34
34
|
releaseDocumentSemanticTokens() { },
|
|
35
35
|
async provideDocumentSymbols(model) {
|
|
36
36
|
const languageService = await worker.withSyncedResources(getSyncUris());
|
|
37
|
-
const codeResult = await languageService.findDocumentSymbols(model.uri
|
|
37
|
+
const codeResult = await languageService.findDocumentSymbols(model.uri);
|
|
38
38
|
if (codeResult) {
|
|
39
39
|
return codeResult.map(toDocumentSymbol);
|
|
40
40
|
}
|
|
41
41
|
},
|
|
42
42
|
async provideDocumentHighlights(model, position) {
|
|
43
43
|
const languageService = await worker.withSyncedResources(getSyncUris());
|
|
44
|
-
const codeResult = await languageService.findDocumentHighlights(model.uri
|
|
44
|
+
const codeResult = await languageService.findDocumentHighlights(model.uri, fromPosition(position));
|
|
45
45
|
if (codeResult) {
|
|
46
46
|
return codeResult.map(toDocumentHighlight);
|
|
47
47
|
}
|
|
48
48
|
},
|
|
49
49
|
async provideLinkedEditingRanges(model, position) {
|
|
50
50
|
const languageService = await worker.withSyncedResources(getSyncUris());
|
|
51
|
-
const codeResult = await languageService.findLinkedEditingRanges(model.uri
|
|
51
|
+
const codeResult = await languageService.findLinkedEditingRanges(model.uri, fromPosition(position));
|
|
52
52
|
if (codeResult) {
|
|
53
53
|
return toLinkedEditingRanges(codeResult);
|
|
54
54
|
}
|
|
55
55
|
},
|
|
56
56
|
async provideDefinition(model, position) {
|
|
57
57
|
const languageService = await worker.withSyncedResources(getSyncUris());
|
|
58
|
-
const codeResult = await languageService.findDefinition(model.uri
|
|
58
|
+
const codeResult = await languageService.findDefinition(model.uri, fromPosition(position));
|
|
59
59
|
if (codeResult) {
|
|
60
60
|
return codeResult.map(toLocationLink);
|
|
61
61
|
}
|
|
62
62
|
},
|
|
63
63
|
async provideImplementation(model, position) {
|
|
64
64
|
const languageService = await worker.withSyncedResources(getSyncUris());
|
|
65
|
-
const codeResult = await languageService.findImplementations(model.uri
|
|
65
|
+
const codeResult = await languageService.findImplementations(model.uri, fromPosition(position));
|
|
66
66
|
if (codeResult) {
|
|
67
67
|
return codeResult.map(toLocationLink);
|
|
68
68
|
}
|
|
69
69
|
},
|
|
70
70
|
async provideTypeDefinition(model, position) {
|
|
71
71
|
const languageService = await worker.withSyncedResources(getSyncUris());
|
|
72
|
-
const codeResult = await languageService.findTypeDefinition(model.uri
|
|
72
|
+
const codeResult = await languageService.findTypeDefinition(model.uri, fromPosition(position));
|
|
73
73
|
if (codeResult) {
|
|
74
74
|
return codeResult.map(toLocationLink);
|
|
75
75
|
}
|
|
76
76
|
},
|
|
77
77
|
async provideCodeLenses(model) {
|
|
78
78
|
const languageService = await worker.withSyncedResources(getSyncUris());
|
|
79
|
-
const codeResult = await languageService.doCodeLens(model.uri
|
|
79
|
+
const codeResult = await languageService.doCodeLens(model.uri);
|
|
80
80
|
if (codeResult) {
|
|
81
81
|
const monacoResult = codeResult.map(toCodeLens);
|
|
82
82
|
for (let i = 0; i < monacoResult.length; i++) {
|
|
@@ -109,7 +109,7 @@ export async function createLanguageFeaturesProvider(worker, getSyncUris) {
|
|
|
109
109
|
}
|
|
110
110
|
}
|
|
111
111
|
const languageService = await worker.withSyncedResources(getSyncUris());
|
|
112
|
-
const codeResult = await languageService.doCodeActions(model.uri
|
|
112
|
+
const codeResult = await languageService.doCodeActions(model.uri, fromRange(range), {
|
|
113
113
|
diagnostics: diagnostics,
|
|
114
114
|
only: context.only ? [context.only] : undefined,
|
|
115
115
|
});
|
|
@@ -138,21 +138,21 @@ export async function createLanguageFeaturesProvider(worker, getSyncUris) {
|
|
|
138
138
|
},
|
|
139
139
|
async provideDocumentFormattingEdits(model, options) {
|
|
140
140
|
const languageService = await worker.withSyncedResources(getSyncUris());
|
|
141
|
-
const codeResult = await languageService.format(model.uri
|
|
141
|
+
const codeResult = await languageService.format(model.uri, fromFormattingOptions(options), undefined, undefined);
|
|
142
142
|
if (codeResult) {
|
|
143
143
|
return codeResult.map(toTextEdit);
|
|
144
144
|
}
|
|
145
145
|
},
|
|
146
146
|
async provideDocumentRangeFormattingEdits(model, range, options) {
|
|
147
147
|
const languageService = await worker.withSyncedResources(getSyncUris());
|
|
148
|
-
const codeResult = await languageService.format(model.uri
|
|
148
|
+
const codeResult = await languageService.format(model.uri, fromFormattingOptions(options), fromRange(range), undefined);
|
|
149
149
|
if (codeResult) {
|
|
150
150
|
return codeResult.map(toTextEdit);
|
|
151
151
|
}
|
|
152
152
|
},
|
|
153
153
|
async provideOnTypeFormattingEdits(model, position, ch, options) {
|
|
154
154
|
const languageService = await worker.withSyncedResources(getSyncUris());
|
|
155
|
-
const codeResult = await languageService.format(model.uri
|
|
155
|
+
const codeResult = await languageService.format(model.uri, fromFormattingOptions(options), undefined, {
|
|
156
156
|
ch: ch,
|
|
157
157
|
position: fromPosition(position),
|
|
158
158
|
});
|
|
@@ -162,7 +162,7 @@ export async function createLanguageFeaturesProvider(worker, getSyncUris) {
|
|
|
162
162
|
},
|
|
163
163
|
async provideLinks(model) {
|
|
164
164
|
const languageService = await worker.withSyncedResources(getSyncUris());
|
|
165
|
-
const codeResult = await languageService.findDocumentLinks(model.uri
|
|
165
|
+
const codeResult = await languageService.findDocumentLinks(model.uri);
|
|
166
166
|
if (codeResult) {
|
|
167
167
|
return {
|
|
168
168
|
links: codeResult.map(link => {
|
|
@@ -183,7 +183,7 @@ export async function createLanguageFeaturesProvider(worker, getSyncUris) {
|
|
|
183
183
|
},
|
|
184
184
|
async provideCompletionItems(model, position, context) {
|
|
185
185
|
const languageService = await worker.withSyncedResources(getSyncUris());
|
|
186
|
-
const codeResult = await languageService.doComplete(model.uri
|
|
186
|
+
const codeResult = await languageService.doComplete(model.uri, fromPosition(position), fromCompletionContext(context));
|
|
187
187
|
const wordInfo = model.getWordUntilPosition(position);
|
|
188
188
|
const monacoResult = toCompletionList(codeResult, {
|
|
189
189
|
range: {
|
|
@@ -212,7 +212,7 @@ export async function createLanguageFeaturesProvider(worker, getSyncUris) {
|
|
|
212
212
|
},
|
|
213
213
|
async provideDocumentColors(model) {
|
|
214
214
|
const languageService = await worker.withSyncedResources(getSyncUris());
|
|
215
|
-
const codeResult = await languageService.findDocumentColors(model.uri
|
|
215
|
+
const codeResult = await languageService.findDocumentColors(model.uri);
|
|
216
216
|
if (codeResult) {
|
|
217
217
|
return codeResult.map(toColorInformation);
|
|
218
218
|
}
|
|
@@ -221,7 +221,7 @@ export async function createLanguageFeaturesProvider(worker, getSyncUris) {
|
|
|
221
221
|
const languageService = await worker.withSyncedResources(getSyncUris());
|
|
222
222
|
const codeResult = colorInfos.get(monacoResult);
|
|
223
223
|
if (codeResult) {
|
|
224
|
-
const codeColors = await languageService.getColorPresentations(model.uri
|
|
224
|
+
const codeColors = await languageService.getColorPresentations(model.uri, codeResult.color, {
|
|
225
225
|
start: fromPosition(model.getPositionAt(0)),
|
|
226
226
|
end: fromPosition(model.getPositionAt(model.getValueLength())),
|
|
227
227
|
});
|
|
@@ -232,26 +232,26 @@ export async function createLanguageFeaturesProvider(worker, getSyncUris) {
|
|
|
232
232
|
},
|
|
233
233
|
async provideFoldingRanges(model, _context) {
|
|
234
234
|
const languageService = await worker.withSyncedResources(getSyncUris());
|
|
235
|
-
const codeResult = await languageService.getFoldingRanges(model.uri
|
|
235
|
+
const codeResult = await languageService.getFoldingRanges(model.uri);
|
|
236
236
|
if (codeResult) {
|
|
237
237
|
return codeResult.map(toFoldingRange);
|
|
238
238
|
}
|
|
239
239
|
},
|
|
240
240
|
async provideDeclaration(model, position) {
|
|
241
241
|
const languageService = await worker.withSyncedResources(getSyncUris());
|
|
242
|
-
const codeResult = await languageService.findDefinition(model.uri
|
|
242
|
+
const codeResult = await languageService.findDefinition(model.uri, fromPosition(position));
|
|
243
243
|
if (codeResult) {
|
|
244
244
|
return codeResult.map(toLocationLink);
|
|
245
245
|
}
|
|
246
246
|
},
|
|
247
247
|
async provideSelectionRanges(model, positions) {
|
|
248
248
|
const languageService = await worker.withSyncedResources(getSyncUris());
|
|
249
|
-
const codeResults = await Promise.all(positions.map(position => languageService.getSelectionRanges(model.uri
|
|
249
|
+
const codeResults = await Promise.all(positions.map(position => languageService.getSelectionRanges(model.uri, [fromPosition(position)])));
|
|
250
250
|
return codeResults.map(codeResult => codeResult?.map(toSelectionRange) ?? []);
|
|
251
251
|
},
|
|
252
252
|
async provideSignatureHelp(model, position, _token, context) {
|
|
253
253
|
const languageService = await worker.withSyncedResources(getSyncUris());
|
|
254
|
-
const codeResult = await languageService.getSignatureHelp(model.uri
|
|
254
|
+
const codeResult = await languageService.getSignatureHelp(model.uri, fromPosition(position), fromSignatureHelpContext(context));
|
|
255
255
|
if (codeResult) {
|
|
256
256
|
return {
|
|
257
257
|
value: toSignatureHelp(codeResult),
|
|
@@ -261,21 +261,21 @@ export async function createLanguageFeaturesProvider(worker, getSyncUris) {
|
|
|
261
261
|
},
|
|
262
262
|
async provideRenameEdits(model, position, newName) {
|
|
263
263
|
const languageService = await worker.withSyncedResources(getSyncUris());
|
|
264
|
-
const codeResult = await languageService.doRename(model.uri
|
|
264
|
+
const codeResult = await languageService.doRename(model.uri, fromPosition(position), newName);
|
|
265
265
|
if (codeResult) {
|
|
266
266
|
return toWorkspaceEdit(codeResult);
|
|
267
267
|
}
|
|
268
268
|
},
|
|
269
269
|
async provideReferences(model, position, _context) {
|
|
270
270
|
const languageService = await worker.withSyncedResources(getSyncUris());
|
|
271
|
-
const codeResult = await languageService.findReferences(model.uri
|
|
271
|
+
const codeResult = await languageService.findReferences(model.uri, fromPosition(position), { includeDeclaration: true });
|
|
272
272
|
if (codeResult) {
|
|
273
273
|
return codeResult.map(toLocation);
|
|
274
274
|
}
|
|
275
275
|
},
|
|
276
276
|
async provideInlayHints(model, range) {
|
|
277
277
|
const languageService = await worker.withSyncedResources(getSyncUris());
|
|
278
|
-
const codeResult = await languageService.getInlayHints(model.uri
|
|
278
|
+
const codeResult = await languageService.getInlayHints(model.uri, fromRange(range));
|
|
279
279
|
if (codeResult) {
|
|
280
280
|
return {
|
|
281
281
|
hints: codeResult.map(hint => {
|
|
@@ -298,7 +298,7 @@ export async function createLanguageFeaturesProvider(worker, getSyncUris) {
|
|
|
298
298
|
},
|
|
299
299
|
async provideHover(model, position) {
|
|
300
300
|
const languageService = await worker.withSyncedResources(getSyncUris());
|
|
301
|
-
const codeResult = await languageService.doHover(model.uri
|
|
301
|
+
const codeResult = await languageService.doHover(model.uri, fromPosition(position));
|
|
302
302
|
if (codeResult) {
|
|
303
303
|
return toHover(codeResult);
|
|
304
304
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@volar/monaco",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.3.0-alpha.1",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"files": [
|
|
@@ -13,8 +13,8 @@
|
|
|
13
13
|
"directory": "packages/monaco"
|
|
14
14
|
},
|
|
15
15
|
"dependencies": {
|
|
16
|
-
"@volar/language-service": "2.
|
|
17
|
-
"@volar/typescript": "2.
|
|
16
|
+
"@volar/language-service": "2.3.0-alpha.1",
|
|
17
|
+
"@volar/typescript": "2.3.0-alpha.1",
|
|
18
18
|
"monaco-languageserver-types": "^0.3.3",
|
|
19
19
|
"monaco-types": "^0.1.0",
|
|
20
20
|
"vscode-uri": "^3.0.8"
|
|
@@ -22,5 +22,5 @@
|
|
|
22
22
|
"devDependencies": {
|
|
23
23
|
"monaco-editor-core": "latest"
|
|
24
24
|
},
|
|
25
|
-
"gitHead": "
|
|
25
|
+
"gitHead": "173be13e1d51c62cfe5ddc9926933d30a7aa1d11"
|
|
26
26
|
}
|
package/worker.d.ts
CHANGED
|
@@ -1,135 +1,148 @@
|
|
|
1
|
-
import { LanguagePlugin, LanguageServicePlugin, type
|
|
1
|
+
import { LanguagePlugin, LanguageServicePlugin, type LanguageServiceEnvironment } from '@volar/language-service';
|
|
2
2
|
import type * as monaco from 'monaco-types';
|
|
3
3
|
import type * as ts from 'typescript';
|
|
4
|
+
import type { URI } from 'vscode-uri';
|
|
4
5
|
export * from '@volar/language-service';
|
|
5
6
|
export * from './lib/ata.js';
|
|
6
7
|
export declare function createSimpleWorkerService<T = {}>({ env, workerContext, languagePlugins, servicePlugins, extraApis, }: {
|
|
7
|
-
env:
|
|
8
|
+
env: LanguageServiceEnvironment;
|
|
8
9
|
workerContext: monaco.worker.IWorkerContext<any>;
|
|
9
|
-
languagePlugins?: LanguagePlugin[];
|
|
10
|
+
languagePlugins?: LanguagePlugin<URI>[];
|
|
10
11
|
servicePlugins?: LanguageServicePlugin[];
|
|
11
12
|
extraApis?: T;
|
|
12
13
|
}): {
|
|
14
|
+
getSemanticTokenLegend: () => {
|
|
15
|
+
tokenModifiers: string[];
|
|
16
|
+
tokenTypes: string[];
|
|
17
|
+
};
|
|
13
18
|
getTriggerCharacters: () => string[];
|
|
14
19
|
getAutoFormatTriggerCharacters: () => string[];
|
|
15
20
|
getSignatureHelpTriggerCharacters: () => string[];
|
|
16
21
|
getSignatureHelpRetriggerCharacters: () => string[];
|
|
17
|
-
format: (uri:
|
|
22
|
+
format: (uri: URI, options: import("@volar/language-service").FormattingOptions, range: import("@volar/language-service").Range | undefined, onTypeParams: {
|
|
18
23
|
ch: string;
|
|
19
24
|
position: import("@volar/language-service").Position;
|
|
20
25
|
} | undefined, token?: import("@volar/language-service").CancellationToken | undefined) => Promise<import("@volar/language-service").TextEdit[] | undefined>;
|
|
21
|
-
getFoldingRanges: (uri:
|
|
22
|
-
getSelectionRanges: (uri:
|
|
23
|
-
findLinkedEditingRanges: (uri:
|
|
24
|
-
findDocumentSymbols: (uri:
|
|
25
|
-
findDocumentColors: (uri:
|
|
26
|
-
getColorPresentations: (uri:
|
|
27
|
-
doValidation: (uri:
|
|
28
|
-
findReferences: (uri:
|
|
29
|
-
findFileReferences: (uri:
|
|
30
|
-
findDefinition: (uri:
|
|
31
|
-
findTypeDefinition: (uri:
|
|
32
|
-
findImplementations: (uri:
|
|
33
|
-
prepareRename: (uri:
|
|
26
|
+
getFoldingRanges: (uri: URI, token?: import("@volar/language-service").CancellationToken | undefined) => Promise<import("@volar/language-service").FoldingRange[] | undefined>;
|
|
27
|
+
getSelectionRanges: (uri: URI, positions: import("@volar/language-service").Position[], token?: import("@volar/language-service").CancellationToken | undefined) => Promise<import("@volar/language-service").SelectionRange[] | undefined>;
|
|
28
|
+
findLinkedEditingRanges: (uri: URI, position: import("@volar/language-service").Position, token?: import("@volar/language-service").CancellationToken | undefined) => Promise<import("@volar/language-service").LinkedEditingRanges | undefined>;
|
|
29
|
+
findDocumentSymbols: (uri: URI, token?: import("@volar/language-service").CancellationToken | undefined) => Promise<import("@volar/language-service").DocumentSymbol[] | undefined>;
|
|
30
|
+
findDocumentColors: (uri: URI, token?: import("@volar/language-service").CancellationToken | undefined) => Promise<import("@volar/language-service").ColorInformation[] | undefined>;
|
|
31
|
+
getColorPresentations: (uri: URI, color: import("@volar/language-service").Color, range: import("@volar/language-service").Range, token?: import("@volar/language-service").CancellationToken | undefined) => Promise<import("@volar/language-service").ColorPresentation[] | undefined>;
|
|
32
|
+
doValidation: (uri: URI, token?: import("@volar/language-service").CancellationToken | undefined, response?: ((result: import("@volar/language-service").Diagnostic[]) => void) | undefined) => Promise<import("@volar/language-service").Diagnostic[]>;
|
|
33
|
+
findReferences: (uri: URI, position: import("@volar/language-service").Position, referenceContext: import("@volar/language-service").ReferenceContext, token?: import("@volar/language-service").CancellationToken | undefined) => Promise<import("@volar/language-service").Location[] | undefined>;
|
|
34
|
+
findFileReferences: (uri: URI, token?: import("@volar/language-service").CancellationToken | undefined) => import("@volar/language-service").NullableProviderResult<import("@volar/language-service").Location[]>;
|
|
35
|
+
findDefinition: (uri: URI, position: import("@volar/language-service").Position, token?: import("@volar/language-service").CancellationToken | undefined) => Promise<import("@volar/language-service").LocationLink[] | undefined>;
|
|
36
|
+
findTypeDefinition: (uri: URI, position: import("@volar/language-service").Position, token?: import("@volar/language-service").CancellationToken | undefined) => Promise<import("@volar/language-service").LocationLink[] | undefined>;
|
|
37
|
+
findImplementations: (uri: URI, position: import("@volar/language-service").Position, token?: import("@volar/language-service").CancellationToken | undefined) => Promise<import("@volar/language-service").LocationLink[] | undefined>;
|
|
38
|
+
prepareRename: (uri: URI, position: import("@volar/language-service").Position, token?: import("@volar/language-service").CancellationToken | undefined) => Promise<import("@volar/language-service").Range | {
|
|
34
39
|
range: import("@volar/language-service").Range;
|
|
35
40
|
placeholder: string;
|
|
36
41
|
} | {
|
|
37
42
|
message: string;
|
|
38
43
|
} | undefined>;
|
|
39
|
-
doRename: (uri:
|
|
40
|
-
getEditsForFileRename: (oldUri:
|
|
41
|
-
getSemanticTokens: (uri:
|
|
42
|
-
doHover: (uri:
|
|
43
|
-
doComplete: (uri:
|
|
44
|
-
doCodeActions: (uri:
|
|
44
|
+
doRename: (uri: URI, position: import("@volar/language-service").Position, newName: string, token?: import("@volar/language-service").CancellationToken | undefined) => Promise<import("@volar/language-service").WorkspaceEdit | undefined>;
|
|
45
|
+
getEditsForFileRename: (oldUri: URI, newUri: URI, token?: import("@volar/language-service").CancellationToken | undefined) => Promise<import("@volar/language-service").WorkspaceEdit | undefined>;
|
|
46
|
+
getSemanticTokens: (uri: URI, range: import("@volar/language-service").Range | undefined, legend: import("@volar/language-service").SemanticTokensLegend, token?: import("@volar/language-service").CancellationToken | undefined, _reportProgress?: ((tokens: import("@volar/language-service").SemanticTokens) => void) | undefined) => Promise<import("@volar/language-service").SemanticTokens | undefined>;
|
|
47
|
+
doHover: (uri: URI, position: import("@volar/language-service").Position, token?: import("@volar/language-service").CancellationToken | undefined) => Promise<import("@volar/language-service").Hover | undefined>;
|
|
48
|
+
doComplete: (uri: URI, position: import("@volar/language-service").Position, completionContext?: import("@volar/language-service").CompletionContext | undefined, token?: import("@volar/language-service").CancellationToken | undefined) => Promise<import("@volar/language-service").CompletionList>;
|
|
49
|
+
doCodeActions: (uri: URI, range: import("@volar/language-service").Range, codeActionContext: import("@volar/language-service").CodeActionContext, token?: import("@volar/language-service").CancellationToken | undefined) => Promise<import("@volar/language-service").CodeAction[] | undefined>;
|
|
45
50
|
doCodeActionResolve: (item: import("@volar/language-service").CodeAction, token?: import("@volar/language-service").CancellationToken | undefined) => Promise<import("@volar/language-service").CodeAction>;
|
|
46
51
|
doCompletionResolve: (item: import("@volar/language-service").CompletionItem, token?: import("@volar/language-service").CancellationToken | undefined) => Promise<import("@volar/language-service").CompletionItem>;
|
|
47
|
-
getSignatureHelp: (uri:
|
|
48
|
-
doCodeLens: (uri:
|
|
52
|
+
getSignatureHelp: (uri: URI, position: import("@volar/language-service").Position, signatureHelpContext?: import("@volar/language-service").SignatureHelpContext | undefined, token?: import("@volar/language-service").CancellationToken | undefined) => Promise<import("@volar/language-service").SignatureHelp | undefined>;
|
|
53
|
+
doCodeLens: (uri: URI, token?: import("@volar/language-service").CancellationToken | undefined) => Promise<import("@volar/language-service").CodeLens[]>;
|
|
49
54
|
doCodeLensResolve: (item: import("@volar/language-service").CodeLens, token?: import("@volar/language-service").CancellationToken | undefined) => Promise<import("@volar/language-service").CodeLens>;
|
|
50
|
-
findDocumentHighlights: (uri:
|
|
51
|
-
findDocumentLinks: (uri:
|
|
55
|
+
findDocumentHighlights: (uri: URI, position: import("@volar/language-service").Position, token?: import("@volar/language-service").CancellationToken | undefined) => Promise<import("@volar/language-service").DocumentHighlight[] | undefined>;
|
|
56
|
+
findDocumentLinks: (uri: URI, token?: import("@volar/language-service").CancellationToken | undefined) => Promise<import("@volar/language-service").DocumentLink[]>;
|
|
52
57
|
doDocumentLinkResolve: (item: import("@volar/language-service").DocumentLink, token?: import("@volar/language-service").CancellationToken | undefined) => Promise<import("@volar/language-service").DocumentLink>;
|
|
53
58
|
findWorkspaceSymbols: (query: string, token?: import("@volar/language-service").CancellationToken | undefined) => Promise<import("@volar/language-service").WorkspaceSymbol[]>;
|
|
54
|
-
doAutoInsert: (uri:
|
|
59
|
+
doAutoInsert: (uri: URI, selection: import("@volar/language-service").Position, change: {
|
|
55
60
|
rangeOffset: number;
|
|
56
61
|
rangeLength: number;
|
|
57
62
|
text: string;
|
|
58
|
-
}, token?: import("@volar/language-service").CancellationToken | undefined) => Promise<string |
|
|
59
|
-
doDocumentDrop: (uri:
|
|
60
|
-
getInlayHints: (uri:
|
|
63
|
+
}, token?: import("@volar/language-service").CancellationToken | undefined) => Promise<string | undefined>;
|
|
64
|
+
doDocumentDrop: (uri: URI, position: import("@volar/language-service").Position, dataTransfer: Map<string, import("@volar/language-service").DataTransferItem>, token?: import("@volar/language-service").CancellationToken | undefined) => Promise<import("@volar/language-service").DocumentDropEdit | undefined>;
|
|
65
|
+
getInlayHints: (uri: URI, range: import("@volar/language-service").Range, token?: import("@volar/language-service").CancellationToken | undefined) => Promise<import("@volar/language-service").InlayHint[] | undefined>;
|
|
61
66
|
doInlayHintResolve: (item: import("@volar/language-service").InlayHint, token?: import("@volar/language-service").CancellationToken | undefined) => Promise<import("@volar/language-service").InlayHint>;
|
|
62
67
|
callHierarchy: {
|
|
63
|
-
doPrepare(uri:
|
|
68
|
+
doPrepare(uri: URI, position: import("@volar/language-service").Position, token?: import("@volar/language-service").CancellationToken | undefined): Promise<import("@volar/language-service").CallHierarchyItem[] | undefined>;
|
|
64
69
|
getIncomingCalls(item: import("@volar/language-service").CallHierarchyItem, token: import("@volar/language-service").CancellationToken): Promise<import("@volar/language-service").CallHierarchyIncomingCall[]>;
|
|
65
70
|
getOutgoingCalls(item: import("@volar/language-service").CallHierarchyItem, token: import("@volar/language-service").CancellationToken): Promise<import("@volar/language-service").CallHierarchyOutgoingCall[]>;
|
|
66
71
|
};
|
|
67
72
|
dispose: () => void;
|
|
68
|
-
context: import("@volar/language-service").
|
|
73
|
+
context: import("@volar/language-service").LanguageServiceContext;
|
|
69
74
|
} & T;
|
|
70
|
-
export declare function createTypeScriptWorkerService<T = {}>({ typescript: ts, compilerOptions, env, workerContext, languagePlugins, servicePlugins, extraApis, }: {
|
|
75
|
+
export declare function createTypeScriptWorkerService<T = {}>({ typescript: ts, compilerOptions, env, uriConverter, workerContext, languagePlugins, servicePlugins, extraApis, }: {
|
|
71
76
|
typescript: typeof import('typescript');
|
|
72
77
|
compilerOptions: ts.CompilerOptions;
|
|
73
|
-
env:
|
|
78
|
+
env: LanguageServiceEnvironment;
|
|
79
|
+
uriConverter: {
|
|
80
|
+
asUri(fileName: string): URI;
|
|
81
|
+
asFileName(uri: URI): string;
|
|
82
|
+
};
|
|
74
83
|
workerContext: monaco.worker.IWorkerContext<any>;
|
|
75
|
-
languagePlugins?: LanguagePlugin[];
|
|
84
|
+
languagePlugins?: LanguagePlugin<URI>[];
|
|
76
85
|
servicePlugins?: LanguageServicePlugin[];
|
|
77
86
|
extraApis?: T;
|
|
78
87
|
}): {
|
|
88
|
+
getSemanticTokenLegend: () => {
|
|
89
|
+
tokenModifiers: string[];
|
|
90
|
+
tokenTypes: string[];
|
|
91
|
+
};
|
|
79
92
|
getTriggerCharacters: () => string[];
|
|
80
93
|
getAutoFormatTriggerCharacters: () => string[];
|
|
81
94
|
getSignatureHelpTriggerCharacters: () => string[];
|
|
82
95
|
getSignatureHelpRetriggerCharacters: () => string[];
|
|
83
|
-
format: (uri:
|
|
96
|
+
format: (uri: URI, options: import("@volar/language-service").FormattingOptions, range: import("@volar/language-service").Range | undefined, onTypeParams: {
|
|
84
97
|
ch: string;
|
|
85
98
|
position: import("@volar/language-service").Position;
|
|
86
99
|
} | undefined, token?: import("@volar/language-service").CancellationToken | undefined) => Promise<import("@volar/language-service").TextEdit[] | undefined>;
|
|
87
|
-
getFoldingRanges: (uri:
|
|
88
|
-
getSelectionRanges: (uri:
|
|
89
|
-
findLinkedEditingRanges: (uri:
|
|
90
|
-
findDocumentSymbols: (uri:
|
|
91
|
-
findDocumentColors: (uri:
|
|
92
|
-
getColorPresentations: (uri:
|
|
93
|
-
doValidation: (uri:
|
|
94
|
-
findReferences: (uri:
|
|
95
|
-
findFileReferences: (uri:
|
|
96
|
-
findDefinition: (uri:
|
|
97
|
-
findTypeDefinition: (uri:
|
|
98
|
-
findImplementations: (uri:
|
|
99
|
-
prepareRename: (uri:
|
|
100
|
+
getFoldingRanges: (uri: URI, token?: import("@volar/language-service").CancellationToken | undefined) => Promise<import("@volar/language-service").FoldingRange[] | undefined>;
|
|
101
|
+
getSelectionRanges: (uri: URI, positions: import("@volar/language-service").Position[], token?: import("@volar/language-service").CancellationToken | undefined) => Promise<import("@volar/language-service").SelectionRange[] | undefined>;
|
|
102
|
+
findLinkedEditingRanges: (uri: URI, position: import("@volar/language-service").Position, token?: import("@volar/language-service").CancellationToken | undefined) => Promise<import("@volar/language-service").LinkedEditingRanges | undefined>;
|
|
103
|
+
findDocumentSymbols: (uri: URI, token?: import("@volar/language-service").CancellationToken | undefined) => Promise<import("@volar/language-service").DocumentSymbol[] | undefined>;
|
|
104
|
+
findDocumentColors: (uri: URI, token?: import("@volar/language-service").CancellationToken | undefined) => Promise<import("@volar/language-service").ColorInformation[] | undefined>;
|
|
105
|
+
getColorPresentations: (uri: URI, color: import("@volar/language-service").Color, range: import("@volar/language-service").Range, token?: import("@volar/language-service").CancellationToken | undefined) => Promise<import("@volar/language-service").ColorPresentation[] | undefined>;
|
|
106
|
+
doValidation: (uri: URI, token?: import("@volar/language-service").CancellationToken | undefined, response?: ((result: import("@volar/language-service").Diagnostic[]) => void) | undefined) => Promise<import("@volar/language-service").Diagnostic[]>;
|
|
107
|
+
findReferences: (uri: URI, position: import("@volar/language-service").Position, referenceContext: import("@volar/language-service").ReferenceContext, token?: import("@volar/language-service").CancellationToken | undefined) => Promise<import("@volar/language-service").Location[] | undefined>;
|
|
108
|
+
findFileReferences: (uri: URI, token?: import("@volar/language-service").CancellationToken | undefined) => import("@volar/language-service").NullableProviderResult<import("@volar/language-service").Location[]>;
|
|
109
|
+
findDefinition: (uri: URI, position: import("@volar/language-service").Position, token?: import("@volar/language-service").CancellationToken | undefined) => Promise<import("@volar/language-service").LocationLink[] | undefined>;
|
|
110
|
+
findTypeDefinition: (uri: URI, position: import("@volar/language-service").Position, token?: import("@volar/language-service").CancellationToken | undefined) => Promise<import("@volar/language-service").LocationLink[] | undefined>;
|
|
111
|
+
findImplementations: (uri: URI, position: import("@volar/language-service").Position, token?: import("@volar/language-service").CancellationToken | undefined) => Promise<import("@volar/language-service").LocationLink[] | undefined>;
|
|
112
|
+
prepareRename: (uri: URI, position: import("@volar/language-service").Position, token?: import("@volar/language-service").CancellationToken | undefined) => Promise<import("@volar/language-service").Range | {
|
|
100
113
|
range: import("@volar/language-service").Range;
|
|
101
114
|
placeholder: string;
|
|
102
115
|
} | {
|
|
103
116
|
message: string;
|
|
104
117
|
} | undefined>;
|
|
105
|
-
doRename: (uri:
|
|
106
|
-
getEditsForFileRename: (oldUri:
|
|
107
|
-
getSemanticTokens: (uri:
|
|
108
|
-
doHover: (uri:
|
|
109
|
-
doComplete: (uri:
|
|
110
|
-
doCodeActions: (uri:
|
|
118
|
+
doRename: (uri: URI, position: import("@volar/language-service").Position, newName: string, token?: import("@volar/language-service").CancellationToken | undefined) => Promise<import("@volar/language-service").WorkspaceEdit | undefined>;
|
|
119
|
+
getEditsForFileRename: (oldUri: URI, newUri: URI, token?: import("@volar/language-service").CancellationToken | undefined) => Promise<import("@volar/language-service").WorkspaceEdit | undefined>;
|
|
120
|
+
getSemanticTokens: (uri: URI, range: import("@volar/language-service").Range | undefined, legend: import("@volar/language-service").SemanticTokensLegend, token?: import("@volar/language-service").CancellationToken | undefined, _reportProgress?: ((tokens: import("@volar/language-service").SemanticTokens) => void) | undefined) => Promise<import("@volar/language-service").SemanticTokens | undefined>;
|
|
121
|
+
doHover: (uri: URI, position: import("@volar/language-service").Position, token?: import("@volar/language-service").CancellationToken | undefined) => Promise<import("@volar/language-service").Hover | undefined>;
|
|
122
|
+
doComplete: (uri: URI, position: import("@volar/language-service").Position, completionContext?: import("@volar/language-service").CompletionContext | undefined, token?: import("@volar/language-service").CancellationToken | undefined) => Promise<import("@volar/language-service").CompletionList>;
|
|
123
|
+
doCodeActions: (uri: URI, range: import("@volar/language-service").Range, codeActionContext: import("@volar/language-service").CodeActionContext, token?: import("@volar/language-service").CancellationToken | undefined) => Promise<import("@volar/language-service").CodeAction[] | undefined>;
|
|
111
124
|
doCodeActionResolve: (item: import("@volar/language-service").CodeAction, token?: import("@volar/language-service").CancellationToken | undefined) => Promise<import("@volar/language-service").CodeAction>;
|
|
112
125
|
doCompletionResolve: (item: import("@volar/language-service").CompletionItem, token?: import("@volar/language-service").CancellationToken | undefined) => Promise<import("@volar/language-service").CompletionItem>;
|
|
113
|
-
getSignatureHelp: (uri:
|
|
114
|
-
doCodeLens: (uri:
|
|
126
|
+
getSignatureHelp: (uri: URI, position: import("@volar/language-service").Position, signatureHelpContext?: import("@volar/language-service").SignatureHelpContext | undefined, token?: import("@volar/language-service").CancellationToken | undefined) => Promise<import("@volar/language-service").SignatureHelp | undefined>;
|
|
127
|
+
doCodeLens: (uri: URI, token?: import("@volar/language-service").CancellationToken | undefined) => Promise<import("@volar/language-service").CodeLens[]>;
|
|
115
128
|
doCodeLensResolve: (item: import("@volar/language-service").CodeLens, token?: import("@volar/language-service").CancellationToken | undefined) => Promise<import("@volar/language-service").CodeLens>;
|
|
116
|
-
findDocumentHighlights: (uri:
|
|
117
|
-
findDocumentLinks: (uri:
|
|
129
|
+
findDocumentHighlights: (uri: URI, position: import("@volar/language-service").Position, token?: import("@volar/language-service").CancellationToken | undefined) => Promise<import("@volar/language-service").DocumentHighlight[] | undefined>;
|
|
130
|
+
findDocumentLinks: (uri: URI, token?: import("@volar/language-service").CancellationToken | undefined) => Promise<import("@volar/language-service").DocumentLink[]>;
|
|
118
131
|
doDocumentLinkResolve: (item: import("@volar/language-service").DocumentLink, token?: import("@volar/language-service").CancellationToken | undefined) => Promise<import("@volar/language-service").DocumentLink>;
|
|
119
132
|
findWorkspaceSymbols: (query: string, token?: import("@volar/language-service").CancellationToken | undefined) => Promise<import("@volar/language-service").WorkspaceSymbol[]>;
|
|
120
|
-
doAutoInsert: (uri:
|
|
133
|
+
doAutoInsert: (uri: URI, selection: import("@volar/language-service").Position, change: {
|
|
121
134
|
rangeOffset: number;
|
|
122
135
|
rangeLength: number;
|
|
123
136
|
text: string;
|
|
124
|
-
}, token?: import("@volar/language-service").CancellationToken | undefined) => Promise<string |
|
|
125
|
-
doDocumentDrop: (uri:
|
|
126
|
-
getInlayHints: (uri:
|
|
137
|
+
}, token?: import("@volar/language-service").CancellationToken | undefined) => Promise<string | undefined>;
|
|
138
|
+
doDocumentDrop: (uri: URI, position: import("@volar/language-service").Position, dataTransfer: Map<string, import("@volar/language-service").DataTransferItem>, token?: import("@volar/language-service").CancellationToken | undefined) => Promise<import("@volar/language-service").DocumentDropEdit | undefined>;
|
|
139
|
+
getInlayHints: (uri: URI, range: import("@volar/language-service").Range, token?: import("@volar/language-service").CancellationToken | undefined) => Promise<import("@volar/language-service").InlayHint[] | undefined>;
|
|
127
140
|
doInlayHintResolve: (item: import("@volar/language-service").InlayHint, token?: import("@volar/language-service").CancellationToken | undefined) => Promise<import("@volar/language-service").InlayHint>;
|
|
128
141
|
callHierarchy: {
|
|
129
|
-
doPrepare(uri:
|
|
142
|
+
doPrepare(uri: URI, position: import("@volar/language-service").Position, token?: import("@volar/language-service").CancellationToken | undefined): Promise<import("@volar/language-service").CallHierarchyItem[] | undefined>;
|
|
130
143
|
getIncomingCalls(item: import("@volar/language-service").CallHierarchyItem, token: import("@volar/language-service").CancellationToken): Promise<import("@volar/language-service").CallHierarchyIncomingCall[]>;
|
|
131
144
|
getOutgoingCalls(item: import("@volar/language-service").CallHierarchyItem, token: import("@volar/language-service").CancellationToken): Promise<import("@volar/language-service").CallHierarchyOutgoingCall[]>;
|
|
132
145
|
};
|
|
133
146
|
dispose: () => void;
|
|
134
|
-
context: import("@volar/language-service").
|
|
147
|
+
context: import("@volar/language-service").LanguageServiceContext;
|
|
135
148
|
} & T;
|
package/worker.js
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
import { createLanguageService as _createLanguageService, createLanguage, } from '@volar/language-service';
|
|
2
|
-
import {
|
|
1
|
+
import { createLanguageService as _createLanguageService, createLanguage, createUriMap, } from '@volar/language-service';
|
|
2
|
+
import { createLanguageServiceHost, createSys, resolveFileLanguageId } from '@volar/typescript';
|
|
3
3
|
export * from '@volar/language-service';
|
|
4
4
|
export * from './lib/ata.js';
|
|
5
|
+
const fsFileSnapshots = createUriMap();
|
|
5
6
|
export function createSimpleWorkerService({ env, workerContext, languagePlugins = [], servicePlugins = [], extraApis = {}, }) {
|
|
6
7
|
const snapshots = new Map();
|
|
7
|
-
const language = createLanguage(languagePlugins, false, uri => {
|
|
8
|
-
const model = workerContext.getMirrorModels().find(model => model.uri.toString() === uri);
|
|
8
|
+
const language = createLanguage(languagePlugins, createUriMap(false), uri => {
|
|
9
|
+
const model = workerContext.getMirrorModels().find(model => model.uri.toString() === uri.toString());
|
|
9
10
|
if (model) {
|
|
10
11
|
const cache = snapshots.get(model);
|
|
11
12
|
if (cache && cache[0] === model.version) {
|
|
@@ -26,65 +27,96 @@ export function createSimpleWorkerService({ env, workerContext, languagePlugins
|
|
|
26
27
|
});
|
|
27
28
|
return createWorkerService(language, servicePlugins, env, extraApis);
|
|
28
29
|
}
|
|
29
|
-
export function createTypeScriptWorkerService({ typescript: ts, compilerOptions, env, workerContext, languagePlugins = [], servicePlugins = [], extraApis = {}, }) {
|
|
30
|
+
export function createTypeScriptWorkerService({ typescript: ts, compilerOptions, env, uriConverter, workerContext, languagePlugins = [], servicePlugins = [], extraApis = {}, }) {
|
|
30
31
|
let projectVersion = 0;
|
|
31
32
|
const modelSnapshot = new WeakMap();
|
|
32
33
|
const modelVersions = new Map();
|
|
33
|
-
const sys = createSys(ts, env, env.
|
|
34
|
-
const
|
|
35
|
-
...
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
getSystemVersion() {
|
|
41
|
-
return sys.version;
|
|
42
|
-
},
|
|
43
|
-
getCurrentDirectory() {
|
|
44
|
-
return env.typescript.uriToFileName(env.workspaceFolder);
|
|
45
|
-
},
|
|
46
|
-
getScriptFileNames() {
|
|
47
|
-
return workerContext.getMirrorModels().map(model => env.typescript.uriToFileName(model.uri.toString()));
|
|
34
|
+
const sys = createSys(ts.sys, env, env.workspaceFolders.length ? env.workspaceFolders[0] : undefined, uriConverter);
|
|
35
|
+
const language = createLanguage([
|
|
36
|
+
...languagePlugins,
|
|
37
|
+
{
|
|
38
|
+
getLanguageId(uri) {
|
|
39
|
+
return resolveFileLanguageId(uri.fsPath);
|
|
40
|
+
},
|
|
48
41
|
},
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
42
|
+
], createUriMap(sys.useCaseSensitiveFileNames), uri => {
|
|
43
|
+
let snapshot = getModelSnapshot(uri);
|
|
44
|
+
if (!snapshot) {
|
|
45
|
+
// fs files
|
|
46
|
+
const cache = fsFileSnapshots.get(uri);
|
|
47
|
+
const fileName = uriConverter.asFileName(uri);
|
|
48
|
+
const modifiedTime = sys.getModifiedTime?.(fileName)?.valueOf();
|
|
49
|
+
if (!cache || cache[0] !== modifiedTime) {
|
|
50
|
+
if (sys.fileExists(fileName)) {
|
|
51
|
+
const text = sys.readFile(fileName);
|
|
52
|
+
const snapshot = text !== undefined ? ts.ScriptSnapshot.fromString(text) : undefined;
|
|
53
|
+
fsFileSnapshots.set(uri, [modifiedTime, snapshot]);
|
|
54
54
|
}
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
for (const model of workerContext.getMirrorModels()) {
|
|
58
|
-
modelVersions.set(model, model.version);
|
|
59
|
-
}
|
|
60
|
-
projectVersion++;
|
|
61
|
-
return projectVersion.toString();
|
|
62
|
-
},
|
|
63
|
-
getScriptSnapshot(fileName) {
|
|
64
|
-
const uri = env.typescript.fileNameToUri(fileName);
|
|
65
|
-
const model = workerContext.getMirrorModels().find(model => model.uri.toString() === uri);
|
|
66
|
-
if (model) {
|
|
67
|
-
const cache = modelSnapshot.get(model);
|
|
68
|
-
if (cache && cache[0] === model.version) {
|
|
69
|
-
return cache[1];
|
|
55
|
+
else {
|
|
56
|
+
fsFileSnapshots.set(uri, [modifiedTime, undefined]);
|
|
70
57
|
}
|
|
71
|
-
const text = model.getValue();
|
|
72
|
-
modelSnapshot.set(model, [model.version, {
|
|
73
|
-
getText: (start, end) => text.substring(start, end),
|
|
74
|
-
getLength: () => text.length,
|
|
75
|
-
getChangeRange: () => undefined,
|
|
76
|
-
}]);
|
|
77
|
-
return modelSnapshot.get(model)?.[1];
|
|
78
58
|
}
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
59
|
+
snapshot = fsFileSnapshots.get(uri)?.[1];
|
|
60
|
+
}
|
|
61
|
+
if (snapshot) {
|
|
62
|
+
language.scripts.set(uri, snapshot);
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
language.scripts.delete(uri);
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
language.typescript = {
|
|
69
|
+
configFileName: undefined,
|
|
70
|
+
sys,
|
|
71
|
+
asFileName: uriConverter.asFileName,
|
|
72
|
+
asScriptId: uriConverter.asUri,
|
|
73
|
+
...createLanguageServiceHost(ts, sys, language, uriConverter.asUri, {
|
|
74
|
+
getCurrentDirectory() {
|
|
75
|
+
return sys.getCurrentDirectory();
|
|
76
|
+
},
|
|
77
|
+
getScriptFileNames() {
|
|
78
|
+
return workerContext.getMirrorModels().map(model => uriConverter.asFileName(model.uri));
|
|
79
|
+
},
|
|
80
|
+
getProjectVersion() {
|
|
81
|
+
const models = workerContext.getMirrorModels();
|
|
82
|
+
if (modelVersions.size === workerContext.getMirrorModels().length) {
|
|
83
|
+
if (models.every(model => modelVersions.get(model) === model.version)) {
|
|
84
|
+
return projectVersion.toString();
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
modelVersions.clear();
|
|
88
|
+
for (const model of workerContext.getMirrorModels()) {
|
|
89
|
+
modelVersions.set(model, model.version);
|
|
90
|
+
}
|
|
91
|
+
projectVersion++;
|
|
92
|
+
return projectVersion.toString();
|
|
93
|
+
},
|
|
94
|
+
getScriptSnapshot(fileName) {
|
|
95
|
+
const uri = uriConverter.asUri(fileName);
|
|
96
|
+
return getModelSnapshot(uri);
|
|
97
|
+
},
|
|
98
|
+
getCompilationSettings() {
|
|
99
|
+
return compilerOptions;
|
|
100
|
+
},
|
|
101
|
+
}),
|
|
85
102
|
};
|
|
86
|
-
const language = createTypeScriptLanguage(ts, languagePlugins, host);
|
|
87
103
|
return createWorkerService(language, servicePlugins, env, extraApis);
|
|
104
|
+
function getModelSnapshot(uri) {
|
|
105
|
+
const model = workerContext.getMirrorModels().find(model => model.uri.toString() === uri.toString());
|
|
106
|
+
if (model) {
|
|
107
|
+
const cache = modelSnapshot.get(model);
|
|
108
|
+
if (cache && cache[0] === model.version) {
|
|
109
|
+
return cache[1];
|
|
110
|
+
}
|
|
111
|
+
const text = model.getValue();
|
|
112
|
+
modelSnapshot.set(model, [model.version, {
|
|
113
|
+
getText: (start, end) => text.substring(start, end),
|
|
114
|
+
getLength: () => text.length,
|
|
115
|
+
getChangeRange: () => undefined,
|
|
116
|
+
}]);
|
|
117
|
+
return modelSnapshot.get(model)?.[1];
|
|
118
|
+
}
|
|
119
|
+
}
|
|
88
120
|
}
|
|
89
121
|
function createWorkerService(language, servicePlugins, env, extraApis = {}) {
|
|
90
122
|
const languageService = _createLanguageService(language, servicePlugins, env);
|