@volar/monaco 2.2.4 → 2.3.0-alpha.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/lib/ata.d.ts CHANGED
@@ -1,2 +1,5 @@
1
- import type { ServiceEnvironment } from '@volar/language-service';
2
- export declare function activateAutomaticTypeAcquisition(env: ServiceEnvironment, onFetch?: (path: string, content: string) => void): void;
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 = env.typescript.uriToFileName(uri);
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 = env.typescript.uriToFileName(uri);
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 = env.typescript.uriToFileName(uri);
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.toString());
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.toString(), fromPosition({
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 standardSemanticTokensLegend;
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.toString(), undefined, standardSemanticTokensLegend);
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.toString(), fromRange(range), standardSemanticTokensLegend);
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.toString());
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.toString(), fromPosition(position));
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.toString(), fromPosition(position));
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.toString(), fromPosition(position));
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.toString(), fromPosition(position));
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.toString(), fromPosition(position));
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.toString());
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.toString(), fromRange(range), {
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.toString(), fromFormattingOptions(options), undefined, undefined);
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.toString(), fromFormattingOptions(options), fromRange(range), undefined);
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.toString(), fromFormattingOptions(options), undefined, {
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.toString());
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.toString(), fromPosition(position), fromCompletionContext(context));
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.toString());
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.toString(), codeResult.color, {
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.toString());
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.toString(), fromPosition(position));
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.toString(), [fromPosition(position)])));
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.toString(), fromPosition(position), fromSignatureHelpContext(context));
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.toString(), fromPosition(position), newName);
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.toString(), fromPosition(position), { includeDeclaration: true });
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.toString(), fromRange(range));
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.toString(), fromPosition(position));
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.2.4",
3
+ "version": "2.3.0-alpha.0",
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.2.4",
17
- "@volar/typescript": "2.2.4",
16
+ "@volar/language-service": "2.3.0-alpha.0",
17
+ "@volar/typescript": "2.3.0-alpha.0",
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": "71a58c8b9c3a3e420b95df9ffb4a50be37cb31bc"
25
+ "gitHead": "f17c19f712651acde33cc2171a112e64db0b460e"
26
26
  }
package/worker.d.ts CHANGED
@@ -1,135 +1,148 @@
1
- import { LanguagePlugin, LanguageServicePlugin, type ServiceEnvironment } from '@volar/language-service';
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: ServiceEnvironment;
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: string, options: import("@volar/language-service").FormattingOptions, range: import("@volar/language-service").Range | undefined, onTypeParams: {
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: string, token?: import("@volar/language-service").CancellationToken | undefined) => Promise<import("@volar/language-service").FoldingRange[] | undefined>;
22
- getSelectionRanges: (uri: string, positions: import("@volar/language-service").Position[], token?: import("@volar/language-service").CancellationToken | undefined) => Promise<import("@volar/language-service").SelectionRange[] | undefined>;
23
- findLinkedEditingRanges: (uri: string, position: import("@volar/language-service").Position, token?: import("@volar/language-service").CancellationToken | undefined) => Promise<import("@volar/language-service").LinkedEditingRanges | undefined>;
24
- findDocumentSymbols: (uri: string, token?: import("@volar/language-service").CancellationToken | undefined) => Promise<import("@volar/language-service").DocumentSymbol[] | undefined>;
25
- findDocumentColors: (uri: string, token?: import("@volar/language-service").CancellationToken | undefined) => Promise<import("@volar/language-service").ColorInformation[] | undefined>;
26
- getColorPresentations: (uri: string, 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>;
27
- doValidation: (uri: string, token?: import("@volar/language-service").CancellationToken | undefined, response?: ((result: import("@volar/language-service").Diagnostic[]) => void) | undefined) => Promise<import("@volar/language-service").Diagnostic[]>;
28
- findReferences: (uri: string, 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>;
29
- findFileReferences: (uri: string, token?: import("@volar/language-service").CancellationToken | undefined) => import("@volar/language-service").NullableProviderResult<import("@volar/language-service").Location[]>;
30
- findDefinition: (uri: string, position: import("@volar/language-service").Position, token?: import("@volar/language-service").CancellationToken | undefined) => Promise<import("@volar/language-service").LocationLink[] | undefined>;
31
- findTypeDefinition: (uri: string, position: import("@volar/language-service").Position, token?: import("@volar/language-service").CancellationToken | undefined) => Promise<import("@volar/language-service").LocationLink[] | undefined>;
32
- findImplementations: (uri: string, position: import("@volar/language-service").Position, token?: import("@volar/language-service").CancellationToken | undefined) => Promise<import("@volar/language-service").LocationLink[] | undefined>;
33
- prepareRename: (uri: string, position: import("@volar/language-service").Position, token?: import("@volar/language-service").CancellationToken | undefined) => Promise<import("@volar/language-service").Range | {
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: string, position: import("@volar/language-service").Position, newName: string, token?: import("@volar/language-service").CancellationToken | undefined) => Promise<import("@volar/language-service").WorkspaceEdit | undefined>;
40
- getEditsForFileRename: (oldUri: string, newUri: string, token?: import("@volar/language-service").CancellationToken | undefined) => Promise<import("@volar/language-service").WorkspaceEdit | undefined>;
41
- getSemanticTokens: (uri: string, 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>;
42
- doHover: (uri: string, position: import("@volar/language-service").Position, token?: import("@volar/language-service").CancellationToken | undefined) => Promise<import("@volar/language-service").Hover | undefined>;
43
- doComplete: (uri: string, 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>;
44
- doCodeActions: (uri: string, 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>;
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: string, 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>;
48
- doCodeLens: (uri: string, token?: import("@volar/language-service").CancellationToken | undefined) => Promise<import("@volar/language-service").CodeLens[]>;
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: string, position: import("@volar/language-service").Position, token?: import("@volar/language-service").CancellationToken | undefined) => Promise<import("@volar/language-service").DocumentHighlight[] | undefined>;
51
- findDocumentLinks: (uri: string, token?: import("@volar/language-service").CancellationToken | undefined) => Promise<import("@volar/language-service").DocumentLink[]>;
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: string, selection: import("@volar/language-service").Position, change: {
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 | import("@volar/language-service").TextEdit | undefined>;
59
- doDocumentDrop: (uri: string, 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>;
60
- getInlayHints: (uri: string, range: import("@volar/language-service").Range, token?: import("@volar/language-service").CancellationToken | undefined) => Promise<import("@volar/language-service").InlayHint[] | undefined>;
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: string, position: import("@volar/language-service").Position, token?: import("@volar/language-service").CancellationToken | undefined): Promise<import("@volar/language-service").CallHierarchyItem[] | undefined>;
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").ServiceContext;
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: ServiceEnvironment;
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: string, options: import("@volar/language-service").FormattingOptions, range: import("@volar/language-service").Range | undefined, onTypeParams: {
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: string, token?: import("@volar/language-service").CancellationToken | undefined) => Promise<import("@volar/language-service").FoldingRange[] | undefined>;
88
- getSelectionRanges: (uri: string, positions: import("@volar/language-service").Position[], token?: import("@volar/language-service").CancellationToken | undefined) => Promise<import("@volar/language-service").SelectionRange[] | undefined>;
89
- findLinkedEditingRanges: (uri: string, position: import("@volar/language-service").Position, token?: import("@volar/language-service").CancellationToken | undefined) => Promise<import("@volar/language-service").LinkedEditingRanges | undefined>;
90
- findDocumentSymbols: (uri: string, token?: import("@volar/language-service").CancellationToken | undefined) => Promise<import("@volar/language-service").DocumentSymbol[] | undefined>;
91
- findDocumentColors: (uri: string, token?: import("@volar/language-service").CancellationToken | undefined) => Promise<import("@volar/language-service").ColorInformation[] | undefined>;
92
- getColorPresentations: (uri: string, 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>;
93
- doValidation: (uri: string, token?: import("@volar/language-service").CancellationToken | undefined, response?: ((result: import("@volar/language-service").Diagnostic[]) => void) | undefined) => Promise<import("@volar/language-service").Diagnostic[]>;
94
- findReferences: (uri: string, 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>;
95
- findFileReferences: (uri: string, token?: import("@volar/language-service").CancellationToken | undefined) => import("@volar/language-service").NullableProviderResult<import("@volar/language-service").Location[]>;
96
- findDefinition: (uri: string, position: import("@volar/language-service").Position, token?: import("@volar/language-service").CancellationToken | undefined) => Promise<import("@volar/language-service").LocationLink[] | undefined>;
97
- findTypeDefinition: (uri: string, position: import("@volar/language-service").Position, token?: import("@volar/language-service").CancellationToken | undefined) => Promise<import("@volar/language-service").LocationLink[] | undefined>;
98
- findImplementations: (uri: string, position: import("@volar/language-service").Position, token?: import("@volar/language-service").CancellationToken | undefined) => Promise<import("@volar/language-service").LocationLink[] | undefined>;
99
- prepareRename: (uri: string, position: import("@volar/language-service").Position, token?: import("@volar/language-service").CancellationToken | undefined) => Promise<import("@volar/language-service").Range | {
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: string, position: import("@volar/language-service").Position, newName: string, token?: import("@volar/language-service").CancellationToken | undefined) => Promise<import("@volar/language-service").WorkspaceEdit | undefined>;
106
- getEditsForFileRename: (oldUri: string, newUri: string, token?: import("@volar/language-service").CancellationToken | undefined) => Promise<import("@volar/language-service").WorkspaceEdit | undefined>;
107
- getSemanticTokens: (uri: string, 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>;
108
- doHover: (uri: string, position: import("@volar/language-service").Position, token?: import("@volar/language-service").CancellationToken | undefined) => Promise<import("@volar/language-service").Hover | undefined>;
109
- doComplete: (uri: string, 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>;
110
- doCodeActions: (uri: string, 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>;
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: string, 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>;
114
- doCodeLens: (uri: string, token?: import("@volar/language-service").CancellationToken | undefined) => Promise<import("@volar/language-service").CodeLens[]>;
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: string, position: import("@volar/language-service").Position, token?: import("@volar/language-service").CancellationToken | undefined) => Promise<import("@volar/language-service").DocumentHighlight[] | undefined>;
117
- findDocumentLinks: (uri: string, token?: import("@volar/language-service").CancellationToken | undefined) => Promise<import("@volar/language-service").DocumentLink[]>;
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: string, selection: import("@volar/language-service").Position, change: {
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 | import("@volar/language-service").TextEdit | undefined>;
125
- doDocumentDrop: (uri: string, 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>;
126
- getInlayHints: (uri: string, range: import("@volar/language-service").Range, token?: import("@volar/language-service").CancellationToken | undefined) => Promise<import("@volar/language-service").InlayHint[] | undefined>;
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: string, position: import("@volar/language-service").Position, token?: import("@volar/language-service").CancellationToken | undefined): Promise<import("@volar/language-service").CallHierarchyItem[] | undefined>;
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").ServiceContext;
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 { createTypeScriptLanguage, createSys } from '@volar/typescript';
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.typescript.uriToFileName(env.workspaceFolder));
34
- const host = {
35
- ...sys,
36
- configFileName: undefined,
37
- syncSystem() {
38
- return sys.sync();
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
- getProjectVersion() {
50
- const models = workerContext.getMirrorModels();
51
- if (modelVersions.size === workerContext.getMirrorModels().length) {
52
- if (models.every(model => modelVersions.get(model) === model.version)) {
53
- return projectVersion.toString();
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
- modelVersions.clear();
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
- getCompilationSettings() {
81
- return compilerOptions;
82
- },
83
- fileNameToScriptId: env.typescript.fileNameToUri,
84
- scriptIdToFileName: env.typescript.uriToFileName,
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);