@volar/monaco 1.11.0 → 2.0.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/README.md +1 -1
- package/index.d.ts +2 -3
- package/index.js +2 -18
- package/lib/editor.d.ts +3 -6
- package/lib/editor.js +129 -142
- package/lib/languages.d.ts +2 -9
- package/lib/languages.js +31 -42
- package/lib/markers.d.ts +3 -0
- package/lib/markers.js +2 -0
- package/lib/{utils/provider.d.ts → provider.d.ts} +1 -2
- package/lib/{utils/provider.js → provider.js} +65 -68
- package/package.json +8 -5
- package/worker.d.ts +117 -7
- package/worker.js +97 -63
- package/lib/utils/markers.d.ts +0 -4
- package/lib/utils/markers.js +0 -5
- package/lib/utils/monaco2protocol.d.ts +0 -14
- package/lib/utils/monaco2protocol.js +0 -100
- package/lib/utils/protocol2monaco.d.ts +0 -39
- package/lib/utils/protocol2monaco.js +0 -498
package/README.md
CHANGED
package/index.d.ts
CHANGED
|
@@ -1,3 +1,2 @@
|
|
|
1
|
-
export * from './lib/editor';
|
|
2
|
-
export * from './lib/languages';
|
|
3
|
-
//# sourceMappingURL=index.d.ts.map
|
|
1
|
+
export * from './lib/editor.js';
|
|
2
|
+
export * from './lib/languages.js';
|
package/index.js
CHANGED
|
@@ -1,19 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
-
};
|
|
16
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
__exportStar(require("./lib/editor"), exports);
|
|
18
|
-
__exportStar(require("./lib/languages"), exports);
|
|
1
|
+
export * from './lib/editor.js';
|
|
2
|
+
export * from './lib/languages.js';
|
|
19
3
|
//# sourceMappingURL=index.js.map
|
package/lib/editor.d.ts
CHANGED
|
@@ -1,7 +1,4 @@
|
|
|
1
1
|
import type { LanguageService } from '@volar/language-service';
|
|
2
|
-
import type { editor
|
|
3
|
-
export declare
|
|
4
|
-
|
|
5
|
-
function activateAutoInsertion(worker: _editor.MonacoWebWorker<LanguageService>, languages: string[], getSyncUris: () => Uri[], editor: typeof import('monaco-editor-core').editor): IDisposable;
|
|
6
|
-
}
|
|
7
|
-
//# sourceMappingURL=editor.d.ts.map
|
|
2
|
+
import type { editor, IDisposable, MonacoEditor, Uri } from 'monaco-types';
|
|
3
|
+
export declare function activateMarkers(worker: editor.MonacoWebWorker<LanguageService>, languages: string[], markersOwn: string, getSyncUris: () => Uri[], editor: MonacoEditor['editor']): IDisposable;
|
|
4
|
+
export declare function activateAutoInsertion(worker: editor.MonacoWebWorker<LanguageService>, languages: string[], getSyncUris: () => Uri[], editor: MonacoEditor['editor']): IDisposable;
|
package/lib/editor.js
CHANGED
|
@@ -1,167 +1,154 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
(
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
1
|
+
import { fromPosition, fromRange, toMarkerData, toTextEdit } from 'monaco-languageserver-types';
|
|
2
|
+
import { markers } from './markers.js';
|
|
3
|
+
export function activateMarkers(worker, languages, markersOwn, getSyncUris, editor) {
|
|
4
|
+
const disposables = [];
|
|
5
|
+
const listener = new Map();
|
|
6
|
+
disposables.push(editor.onDidCreateModel((model) => hostingMarkers(model)), editor.onWillDisposeModel(stopHostingMarkers), editor.onDidChangeModelLanguage((event) => {
|
|
7
|
+
stopHostingMarkers(event.model);
|
|
8
|
+
hostingMarkers(event.model);
|
|
9
|
+
}), {
|
|
10
|
+
dispose: () => {
|
|
11
|
+
for (const model of editor.getModels()) {
|
|
12
|
+
stopHostingMarkers(model);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
for (const model of editor.getModels()) {
|
|
17
|
+
hostingMarkers(model);
|
|
18
|
+
}
|
|
19
|
+
return { dispose: () => disposables.forEach((d) => d.dispose()) };
|
|
20
|
+
function stopHostingMarkers(model) {
|
|
21
|
+
editor.setModelMarkers(model, markersOwn, []);
|
|
22
|
+
const key = model.uri.toString();
|
|
23
|
+
if (listener.has(key)) {
|
|
24
|
+
listener.get(key)?.dispose();
|
|
25
|
+
listener.delete(key);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
function hostingMarkers(model) {
|
|
29
|
+
if (!languages.includes(model.getLanguageId?.() ?? model.getModeId?.())) {
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
let timer;
|
|
33
|
+
const changeSubscription = model.onDidChangeContent(() => {
|
|
34
|
+
clearTimeout(timer);
|
|
35
|
+
timer = setTimeout(() => doValidation(model), 250);
|
|
36
|
+
});
|
|
37
|
+
const visibleSubscription = model.onDidChangeAttached(() => {
|
|
38
|
+
if (model.isAttachedToEditor()) {
|
|
39
|
+
doValidation(model);
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
editor.setModelMarkers(model, markersOwn, []);
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
listener.set(model.uri.toString(), {
|
|
16
46
|
dispose: () => {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
47
|
+
changeSubscription.dispose();
|
|
48
|
+
visibleSubscription.dispose();
|
|
49
|
+
clearTimeout(timer);
|
|
20
50
|
}
|
|
21
51
|
});
|
|
22
|
-
|
|
23
|
-
|
|
52
|
+
doValidation(model);
|
|
53
|
+
}
|
|
54
|
+
async function doValidation(model) {
|
|
55
|
+
if (model.isDisposed()) {
|
|
56
|
+
return;
|
|
24
57
|
}
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
editor.setModelMarkers(model, markersOwn, []);
|
|
28
|
-
const key = model.uri.toString();
|
|
29
|
-
if (listener.has(key)) {
|
|
30
|
-
listener.get(key)?.dispose();
|
|
31
|
-
listener.delete(key);
|
|
32
|
-
}
|
|
58
|
+
if (!model.isAttachedToEditor()) {
|
|
59
|
+
return;
|
|
33
60
|
}
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
61
|
+
const version = model.getVersionId();
|
|
62
|
+
const languageService = await worker.withSyncedResources(getSyncUris());
|
|
63
|
+
const diagnostics = await languageService.doValidation(model.uri.toString(), 'all');
|
|
64
|
+
if (model.getVersionId() !== version) {
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
const result = diagnostics.map(error => {
|
|
68
|
+
const marker = toMarkerData(error);
|
|
69
|
+
markers.set(marker, error);
|
|
70
|
+
return marker;
|
|
71
|
+
});
|
|
72
|
+
editor.setModelMarkers(model, markersOwn, result);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
export function activateAutoInsertion(worker, languages, getSyncUris, editor) {
|
|
76
|
+
const disposables = [];
|
|
77
|
+
const listener = new Map();
|
|
78
|
+
let timeout;
|
|
79
|
+
disposables.push(editor.onDidCreateModel((model) => hostingAutoInsertion(model)), editor.onWillDisposeModel(stopHostingAutoInsertion), editor.onDidChangeModelLanguage((event) => {
|
|
80
|
+
stopHostingAutoInsertion(event.model);
|
|
81
|
+
hostingAutoInsertion(event.model);
|
|
82
|
+
}), {
|
|
83
|
+
dispose: () => {
|
|
84
|
+
for (const disposable of listener.values()) {
|
|
85
|
+
disposable.dispose();
|
|
37
86
|
}
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
}
|
|
50
|
-
});
|
|
51
|
-
listener.set(model.uri.toString(), {
|
|
52
|
-
dispose: () => {
|
|
53
|
-
changeSubscription.dispose();
|
|
54
|
-
visibleSubscription.dispose();
|
|
55
|
-
clearTimeout(timer);
|
|
56
|
-
}
|
|
57
|
-
});
|
|
58
|
-
doValidation(model);
|
|
87
|
+
listener.clear();
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
for (const model of editor.getModels()) {
|
|
91
|
+
hostingAutoInsertion(model);
|
|
92
|
+
}
|
|
93
|
+
return { dispose: () => disposables.forEach((d) => d.dispose()) };
|
|
94
|
+
function stopHostingAutoInsertion(model) {
|
|
95
|
+
if (listener.has(model)) {
|
|
96
|
+
listener.get(model)?.dispose();
|
|
97
|
+
listener.delete(model);
|
|
59
98
|
}
|
|
60
|
-
|
|
99
|
+
}
|
|
100
|
+
function hostingAutoInsertion(model) {
|
|
101
|
+
if (!languages.includes(model.getLanguageId?.() ?? model.getModeId?.())) {
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
listener.set(model, model.onDidChangeContent((e) => {
|
|
61
105
|
if (model.isDisposed()) {
|
|
62
106
|
return;
|
|
63
107
|
}
|
|
64
108
|
if (!model.isAttachedToEditor()) {
|
|
65
109
|
return;
|
|
66
110
|
}
|
|
67
|
-
|
|
68
|
-
const languageService = await worker.withSyncedResources(getSyncUris());
|
|
69
|
-
const diagnostics = await languageService.doValidation(model.uri.toString(), 'all');
|
|
70
|
-
if (model.getVersionId() !== version) {
|
|
111
|
+
if (e.changes.length === 0 || e.isUndoing || e.isRedoing) {
|
|
71
112
|
return;
|
|
72
113
|
}
|
|
73
|
-
const
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
return marker;
|
|
77
|
-
});
|
|
78
|
-
editor.setModelMarkers(model, markersOwn, result);
|
|
79
|
-
}
|
|
114
|
+
const lastChange = e.changes[e.changes.length - 1];
|
|
115
|
+
doAutoInsert(model, lastChange);
|
|
116
|
+
}));
|
|
80
117
|
}
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
let timeout;
|
|
86
|
-
disposables.push(editor.onDidCreateModel((model) => hostingAutoInsertion(model)), editor.onWillDisposeModel(stopHostingAutoInsertion), editor.onDidChangeModelLanguage((event) => {
|
|
87
|
-
stopHostingAutoInsertion(event.model);
|
|
88
|
-
hostingAutoInsertion(event.model);
|
|
89
|
-
}), {
|
|
90
|
-
dispose: () => {
|
|
91
|
-
for (const disposable of listener.values()) {
|
|
92
|
-
disposable.dispose();
|
|
93
|
-
}
|
|
94
|
-
listener.clear();
|
|
95
|
-
}
|
|
96
|
-
});
|
|
97
|
-
for (const model of editor.getModels()) {
|
|
98
|
-
hostingAutoInsertion(model);
|
|
118
|
+
async function doAutoInsert(model, lastChange) {
|
|
119
|
+
if (timeout) {
|
|
120
|
+
clearTimeout(timeout);
|
|
121
|
+
timeout = undefined;
|
|
99
122
|
}
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
listener.delete(model);
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
function hostingAutoInsertion(model) {
|
|
108
|
-
if (!languages.includes(model.getLanguageId?.() ?? model.getModeId?.())) {
|
|
109
|
-
return;
|
|
110
|
-
}
|
|
111
|
-
listener.set(model, model.onDidChangeContent((e) => {
|
|
112
|
-
if (model.isDisposed()) {
|
|
113
|
-
return;
|
|
114
|
-
}
|
|
115
|
-
if (!model.isAttachedToEditor()) {
|
|
123
|
+
const version = model.getVersionId();
|
|
124
|
+
timeout = setTimeout(() => {
|
|
125
|
+
(async () => {
|
|
126
|
+
if (model.getVersionId() !== version) {
|
|
116
127
|
return;
|
|
117
128
|
}
|
|
118
|
-
|
|
129
|
+
const languageService = await worker.withSyncedResources(getSyncUris());
|
|
130
|
+
const edit = await languageService.doAutoInsert(model.uri.toString(), fromPosition({
|
|
131
|
+
lineNumber: lastChange.range.startLineNumber,
|
|
132
|
+
column: lastChange.range.startColumn + lastChange.text.length,
|
|
133
|
+
}), {
|
|
134
|
+
range: fromRange(lastChange.range),
|
|
135
|
+
text: lastChange.text,
|
|
136
|
+
});
|
|
137
|
+
if (model.getVersionId() !== version) {
|
|
119
138
|
return;
|
|
120
139
|
}
|
|
121
|
-
const
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
async function doAutoInsert(model, lastChange) {
|
|
126
|
-
if (timeout) {
|
|
127
|
-
clearTimeout(timeout);
|
|
128
|
-
timeout = undefined;
|
|
129
|
-
}
|
|
130
|
-
const version = model.getVersionId();
|
|
131
|
-
timeout = setTimeout(() => {
|
|
132
|
-
(async () => {
|
|
133
|
-
if (model.getVersionId() !== version) {
|
|
134
|
-
return;
|
|
135
|
-
}
|
|
136
|
-
const languageService = await worker.withSyncedResources(getSyncUris());
|
|
137
|
-
const edit = await languageService.doAutoInsert(model.uri.toString(), monaco2protocol.asPosition({
|
|
138
|
-
lineNumber: lastChange.range.startLineNumber,
|
|
139
|
-
column: lastChange.range.startColumn + lastChange.text.length,
|
|
140
|
-
}), {
|
|
141
|
-
lastChange: {
|
|
142
|
-
range: monaco2protocol.asRange(lastChange.range),
|
|
143
|
-
rangeLength: lastChange.rangeLength,
|
|
144
|
-
text: lastChange.text,
|
|
145
|
-
rangeOffset: lastChange.rangeOffset,
|
|
146
|
-
},
|
|
147
|
-
});
|
|
148
|
-
if (model.getVersionId() !== version) {
|
|
149
|
-
return;
|
|
140
|
+
const codeEditor = editor.getEditors().find((e) => e.getModel() === model);
|
|
141
|
+
if (codeEditor && edit && model.getVersionId() === version) {
|
|
142
|
+
if (typeof edit === 'string') {
|
|
143
|
+
codeEditor?.getContribution('snippetController2')?.insert(edit);
|
|
150
144
|
}
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
if (typeof edit === 'string') {
|
|
154
|
-
codeEditor?.getContribution('snippetController2')?.insert(edit);
|
|
155
|
-
}
|
|
156
|
-
else {
|
|
157
|
-
model.pushEditOperations([], [protocol2monaco.asTextEdit(edit)], () => []);
|
|
158
|
-
}
|
|
145
|
+
else {
|
|
146
|
+
model.pushEditOperations([], [toTextEdit(edit)], () => []);
|
|
159
147
|
}
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
}
|
|
148
|
+
}
|
|
149
|
+
})();
|
|
150
|
+
timeout = undefined;
|
|
151
|
+
}, 100);
|
|
164
152
|
}
|
|
165
|
-
|
|
166
|
-
})(editor || (exports.editor = editor = {}));
|
|
153
|
+
}
|
|
167
154
|
//# sourceMappingURL=editor.js.map
|
package/lib/languages.d.ts
CHANGED
|
@@ -1,10 +1,3 @@
|
|
|
1
|
-
import type { editor, languages as _languages, IDisposable, Uri } from 'monaco-editor-core';
|
|
2
1
|
import type { LanguageService } from '@volar/language-service';
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
* @deprecated Use `registerProviders` instead.
|
|
6
|
-
*/
|
|
7
|
-
const registerProvides: typeof registerProviders;
|
|
8
|
-
function registerProviders(worker: editor.MonacoWebWorker<LanguageService>, language: _languages.LanguageSelector, getSyncUris: () => Uri[], languages: typeof import('monaco-editor-core').languages): Promise<IDisposable>;
|
|
9
|
-
}
|
|
10
|
-
//# sourceMappingURL=languages.d.ts.map
|
|
2
|
+
import type { IDisposable, MonacoEditor, Uri, editor, languages } from 'monaco-types';
|
|
3
|
+
export declare function registerProviders(worker: editor.MonacoWebWorker<LanguageService>, language: languages.LanguageSelector, getSyncUris: () => Uri[], languages: MonacoEditor['languages']): Promise<IDisposable>;
|
package/lib/languages.js
CHANGED
|
@@ -1,43 +1,32 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
const
|
|
5
|
-
|
|
6
|
-
(
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
languages.registerFoldingRangeProvider(language, provider),
|
|
33
|
-
languages.registerDeclarationProvider(language, provider),
|
|
34
|
-
languages.registerSelectionRangeProvider(language, provider),
|
|
35
|
-
languages.registerInlayHintsProvider(language, provider),
|
|
36
|
-
languages.registerDocumentSemanticTokensProvider(language, provider),
|
|
37
|
-
languages.registerDocumentRangeSemanticTokensProvider(language, provider),
|
|
38
|
-
];
|
|
39
|
-
return { dispose: () => disposables.forEach((d) => d.dispose()) };
|
|
40
|
-
}
|
|
41
|
-
languages_1.registerProviders = registerProviders;
|
|
42
|
-
})(languages || (exports.languages = languages = {}));
|
|
1
|
+
import { createLanguageFeaturesProvider } from './provider.js';
|
|
2
|
+
export async function registerProviders(worker, language, getSyncUris, languages) {
|
|
3
|
+
const provider = await createLanguageFeaturesProvider(worker, getSyncUris);
|
|
4
|
+
const disposables = [
|
|
5
|
+
languages.registerHoverProvider(language, provider),
|
|
6
|
+
languages.registerReferenceProvider(language, provider),
|
|
7
|
+
languages.registerRenameProvider(language, provider),
|
|
8
|
+
languages.registerSignatureHelpProvider(language, provider),
|
|
9
|
+
languages.registerDocumentSymbolProvider(language, provider),
|
|
10
|
+
languages.registerDocumentHighlightProvider(language, provider),
|
|
11
|
+
languages.registerLinkedEditingRangeProvider(language, provider),
|
|
12
|
+
languages.registerDefinitionProvider(language, provider),
|
|
13
|
+
languages.registerImplementationProvider(language, provider),
|
|
14
|
+
languages.registerTypeDefinitionProvider(language, provider),
|
|
15
|
+
languages.registerCodeLensProvider(language, provider),
|
|
16
|
+
languages.registerCodeActionProvider(language, provider),
|
|
17
|
+
languages.registerDocumentFormattingEditProvider(language, provider),
|
|
18
|
+
languages.registerDocumentRangeFormattingEditProvider(language, provider),
|
|
19
|
+
languages.registerOnTypeFormattingEditProvider(language, provider),
|
|
20
|
+
languages.registerLinkProvider(language, provider),
|
|
21
|
+
languages.registerCompletionItemProvider(language, provider),
|
|
22
|
+
languages.registerColorProvider(language, provider),
|
|
23
|
+
languages.registerFoldingRangeProvider(language, provider),
|
|
24
|
+
languages.registerDeclarationProvider(language, provider),
|
|
25
|
+
languages.registerSelectionRangeProvider(language, provider),
|
|
26
|
+
languages.registerInlayHintsProvider(language, provider),
|
|
27
|
+
languages.registerDocumentSemanticTokensProvider(language, provider),
|
|
28
|
+
languages.registerDocumentRangeSemanticTokensProvider(language, provider),
|
|
29
|
+
];
|
|
30
|
+
return { dispose: () => disposables.forEach((d) => d.dispose()) };
|
|
31
|
+
}
|
|
43
32
|
//# sourceMappingURL=languages.js.map
|
package/lib/markers.d.ts
ADDED
package/lib/markers.js
ADDED
|
@@ -1,4 +1,3 @@
|
|
|
1
1
|
import { LanguageService } from '@volar/language-service';
|
|
2
|
-
import type { editor, languages
|
|
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>;
|
|
4
|
-
//# sourceMappingURL=provider.d.ts.map
|