@volar/monaco 2.0.0-alpha.13 → 2.0.0-alpha.14
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/editor.js +6 -6
- package/lib/languages.js +1 -1
- package/lib/provider.js +2 -2
- package/package.json +4 -4
- package/worker.d.ts +7 -1
- package/worker.js +19 -21
package/lib/editor.js
CHANGED
|
@@ -3,7 +3,7 @@ import { markers } from './markers.js';
|
|
|
3
3
|
export function activateMarkers(worker, languages, markersOwn, getSyncUris, editor) {
|
|
4
4
|
const disposables = [];
|
|
5
5
|
const listener = new Map();
|
|
6
|
-
disposables.push(editor.onDidCreateModel(
|
|
6
|
+
disposables.push(editor.onDidCreateModel(model => hostingMarkers(model)), editor.onWillDisposeModel(stopHostingMarkers), editor.onDidChangeModelLanguage(event => {
|
|
7
7
|
stopHostingMarkers(event.model);
|
|
8
8
|
hostingMarkers(event.model);
|
|
9
9
|
}), {
|
|
@@ -16,7 +16,7 @@ export function activateMarkers(worker, languages, markersOwn, getSyncUris, edit
|
|
|
16
16
|
for (const model of editor.getModels()) {
|
|
17
17
|
hostingMarkers(model);
|
|
18
18
|
}
|
|
19
|
-
return { dispose: () => disposables.forEach(
|
|
19
|
+
return { dispose: () => disposables.forEach(d => d.dispose()) };
|
|
20
20
|
function stopHostingMarkers(model) {
|
|
21
21
|
editor.setModelMarkers(model, markersOwn, []);
|
|
22
22
|
const key = model.uri.toString();
|
|
@@ -76,7 +76,7 @@ export function activateAutoInsertion(worker, languages, getSyncUris, editor) {
|
|
|
76
76
|
const disposables = [];
|
|
77
77
|
const listener = new Map();
|
|
78
78
|
let timeout;
|
|
79
|
-
disposables.push(editor.onDidCreateModel(
|
|
79
|
+
disposables.push(editor.onDidCreateModel(model => hostingAutoInsertion(model)), editor.onWillDisposeModel(stopHostingAutoInsertion), editor.onDidChangeModelLanguage(event => {
|
|
80
80
|
stopHostingAutoInsertion(event.model);
|
|
81
81
|
hostingAutoInsertion(event.model);
|
|
82
82
|
}), {
|
|
@@ -90,7 +90,7 @@ export function activateAutoInsertion(worker, languages, getSyncUris, editor) {
|
|
|
90
90
|
for (const model of editor.getModels()) {
|
|
91
91
|
hostingAutoInsertion(model);
|
|
92
92
|
}
|
|
93
|
-
return { dispose: () => disposables.forEach(
|
|
93
|
+
return { dispose: () => disposables.forEach(d => d.dispose()) };
|
|
94
94
|
function stopHostingAutoInsertion(model) {
|
|
95
95
|
if (listener.has(model)) {
|
|
96
96
|
listener.get(model)?.dispose();
|
|
@@ -101,7 +101,7 @@ export function activateAutoInsertion(worker, languages, getSyncUris, editor) {
|
|
|
101
101
|
if (!languages.includes(model.getLanguageId?.() ?? model.getModeId?.())) {
|
|
102
102
|
return;
|
|
103
103
|
}
|
|
104
|
-
listener.set(model, model.onDidChangeContent(
|
|
104
|
+
listener.set(model, model.onDidChangeContent(e => {
|
|
105
105
|
if (model.isDisposed()) {
|
|
106
106
|
return;
|
|
107
107
|
}
|
|
@@ -137,7 +137,7 @@ export function activateAutoInsertion(worker, languages, getSyncUris, editor) {
|
|
|
137
137
|
if (model.getVersionId() !== version) {
|
|
138
138
|
return;
|
|
139
139
|
}
|
|
140
|
-
const codeEditor = editor.getEditors().find(
|
|
140
|
+
const codeEditor = editor.getEditors().find(e => e.getModel() === model);
|
|
141
141
|
if (codeEditor && edit && model.getVersionId() === version) {
|
|
142
142
|
if (typeof edit === 'string') {
|
|
143
143
|
codeEditor?.getContribution('snippetController2')?.insert(edit);
|
package/lib/languages.js
CHANGED
|
@@ -27,6 +27,6 @@ export async function registerProviders(worker, language, getSyncUris, languages
|
|
|
27
27
|
languages.registerDocumentSemanticTokensProvider(language, provider),
|
|
28
28
|
languages.registerDocumentRangeSemanticTokensProvider(language, provider),
|
|
29
29
|
];
|
|
30
|
-
return { dispose: () => disposables.forEach(
|
|
30
|
+
return { dispose: () => disposables.forEach(d => d.dispose()) };
|
|
31
31
|
}
|
|
32
32
|
//# sourceMappingURL=languages.js.map
|
package/lib/provider.js
CHANGED
|
@@ -245,8 +245,8 @@ export async function createLanguageFeaturesProvider(worker, getSyncUris) {
|
|
|
245
245
|
},
|
|
246
246
|
async provideSelectionRanges(model, positions) {
|
|
247
247
|
const languageService = await worker.withSyncedResources(getSyncUris());
|
|
248
|
-
const codeResults = await Promise.all(positions.map(
|
|
249
|
-
return codeResults.map(
|
|
248
|
+
const codeResults = await Promise.all(positions.map(position => languageService.getSelectionRanges(model.uri.toString(), [fromPosition(position)])));
|
|
249
|
+
return codeResults.map(codeResult => codeResult?.map(toSelectionRange) ?? []);
|
|
250
250
|
},
|
|
251
251
|
async provideSignatureHelp(model, position, _token, context) {
|
|
252
252
|
const languageService = await worker.withSyncedResources(getSyncUris());
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@volar/monaco",
|
|
3
|
-
"version": "2.0.0-alpha.
|
|
3
|
+
"version": "2.0.0-alpha.14",
|
|
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.0.0-alpha.
|
|
17
|
-
"@volar/typescript": "2.0.0-alpha.
|
|
16
|
+
"@volar/language-service": "2.0.0-alpha.14",
|
|
17
|
+
"@volar/typescript": "2.0.0-alpha.14",
|
|
18
18
|
"monaco-languageserver-types": "^0.3.2",
|
|
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": "83eb6a4a4475a3680f14fb3808e48ec4dbe62cc1"
|
|
26
26
|
}
|
package/worker.d.ts
CHANGED
|
@@ -58,7 +58,13 @@ export declare function createSimpleWorkerService<T = {}>(languages: LanguagePlu
|
|
|
58
58
|
dispose: () => void;
|
|
59
59
|
context: import("@volar/language-service").ServiceContext;
|
|
60
60
|
} & T;
|
|
61
|
-
export declare function createTypeScriptWorkerService<T = {}>(
|
|
61
|
+
export declare function createTypeScriptWorkerService<T = {}>(languages: LanguagePlugin[], services: ServicePlugin[], getMirrorModels: monaco.worker.IWorkerContext<any>['getMirrorModels'], { typescript: ts, compilerOptions, getCurrentDirectory, getScriptFileNames, getMirrorModel, }: {
|
|
62
|
+
typescript: typeof import('typescript');
|
|
63
|
+
compilerOptions: ts.CompilerOptions;
|
|
64
|
+
getCurrentDirectory(): string;
|
|
65
|
+
getScriptFileNames(): string[];
|
|
66
|
+
getMirrorModel(fileName: string): monaco.worker.IMirrorModel | undefined;
|
|
67
|
+
}, extraApis?: T): {
|
|
62
68
|
getTriggerCharacters: () => string[];
|
|
63
69
|
getAutoFormatTriggerCharacters: () => string[];
|
|
64
70
|
getSignatureHelpTriggerCharacters: () => string[];
|
package/worker.js
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
|
-
import { createLanguageService as _createLanguageService,
|
|
1
|
+
import { createLanguageService as _createLanguageService, createFileRegistry, resolveCommonLanguageId, } from '@volar/language-service';
|
|
2
2
|
import { URI } from 'vscode-uri';
|
|
3
3
|
import { createLanguage, createSys } from '@volar/typescript';
|
|
4
4
|
export function createSimpleWorkerService(languages, services, getMirrorModels, extraApis = {}) {
|
|
5
|
-
return createWorkerService(services,
|
|
5
|
+
return createWorkerService(services, () => {
|
|
6
6
|
const snapshots = new Map();
|
|
7
|
-
const files =
|
|
8
|
-
const
|
|
9
|
-
const model = getMirrorModels().find(model => model.uri.toString(true) === uri);
|
|
7
|
+
const files = createFileRegistry(languages, false, uri => {
|
|
8
|
+
const model = getMirrorModels().find(model => model.uri.toString() === uri);
|
|
10
9
|
if (model) {
|
|
11
10
|
const cache = snapshots.get(model);
|
|
12
11
|
if (cache && cache[0] === model.version) {
|
|
@@ -19,24 +18,23 @@ export function createSimpleWorkerService(languages, services, getMirrorModels,
|
|
|
19
18
|
getChangeRange: () => undefined,
|
|
20
19
|
};
|
|
21
20
|
snapshots.set(model, [model.version, snapshot]);
|
|
22
|
-
files.
|
|
21
|
+
files.set(uri, resolveCommonLanguageId(uri), snapshot);
|
|
23
22
|
}
|
|
24
23
|
else {
|
|
25
|
-
files.
|
|
24
|
+
files.delete(uri);
|
|
26
25
|
}
|
|
27
26
|
});
|
|
28
27
|
return { files };
|
|
29
28
|
}, extraApis);
|
|
30
29
|
}
|
|
31
|
-
export function createTypeScriptWorkerService(
|
|
30
|
+
export function createTypeScriptWorkerService(languages, services, getMirrorModels, { typescript: ts, compilerOptions, getCurrentDirectory, getScriptFileNames, getMirrorModel, }, extraApis = {}) {
|
|
32
31
|
return createWorkerService(services, env => {
|
|
33
32
|
let projectVersion = 0;
|
|
34
33
|
const modelSnapshot = new WeakMap();
|
|
35
34
|
const modelVersions = new Map();
|
|
36
35
|
const host = {
|
|
37
|
-
getCurrentDirectory
|
|
38
|
-
|
|
39
|
-
},
|
|
36
|
+
getCurrentDirectory,
|
|
37
|
+
getScriptFileNames,
|
|
40
38
|
getProjectVersion() {
|
|
41
39
|
const models = getMirrorModels();
|
|
42
40
|
if (modelVersions.size === getMirrorModels().length) {
|
|
@@ -51,13 +49,8 @@ export function createTypeScriptWorkerService(ts, languages, services, getMirror
|
|
|
51
49
|
projectVersion++;
|
|
52
50
|
return projectVersion.toString();
|
|
53
51
|
},
|
|
54
|
-
getScriptFileNames() {
|
|
55
|
-
const models = getMirrorModels();
|
|
56
|
-
return models.map(model => env.uriToFileName(model.uri.toString(true)));
|
|
57
|
-
},
|
|
58
52
|
getScriptSnapshot(fileName) {
|
|
59
|
-
const
|
|
60
|
-
const model = getMirrorModels().find(model => model.uri.toString(true) === uri);
|
|
53
|
+
const model = getMirrorModel(fileName);
|
|
61
54
|
if (model) {
|
|
62
55
|
const cache = modelSnapshot.get(model);
|
|
63
56
|
if (cache && cache[0] === model.version) {
|
|
@@ -77,16 +70,21 @@ export function createTypeScriptWorkerService(ts, languages, services, getMirror
|
|
|
77
70
|
},
|
|
78
71
|
getLanguageId: id => resolveCommonLanguageId(id),
|
|
79
72
|
};
|
|
80
|
-
const sys = createSys(ts, env, host
|
|
81
|
-
const language = createLanguage(ts, sys, languages, undefined, host
|
|
73
|
+
const sys = createSys(ts, env, host);
|
|
74
|
+
const language = createLanguage(ts, sys, languages, undefined, host, {
|
|
75
|
+
fileNameToFileId: env.typescript.fileNameToUri,
|
|
76
|
+
fileIdToFileName: env.typescript.uriToFileName,
|
|
77
|
+
});
|
|
82
78
|
return language;
|
|
83
79
|
}, extraApis);
|
|
84
80
|
}
|
|
85
81
|
function createWorkerService(services, getLanguage, extraApis = {}) {
|
|
86
82
|
const env = {
|
|
83
|
+
typescript: {
|
|
84
|
+
fileNameToUri: fileName => URI.file(fileName).toString(),
|
|
85
|
+
uriToFileName: uri => URI.parse(uri).fsPath.replace(/\\/g, '/')
|
|
86
|
+
},
|
|
87
87
|
workspaceFolder: URI.file('/'),
|
|
88
|
-
uriToFileName: uri => URI.parse(uri).fsPath.replace(/\\/g, '/'),
|
|
89
|
-
fileNameToUri: fileName => URI.file(fileName).toString(),
|
|
90
88
|
console,
|
|
91
89
|
};
|
|
92
90
|
const language = getLanguage(env);
|