@volar/typescript 2.3.0-alpha.9 → 2.3.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/common.js +1 -2
- package/lib/node/decorateLanguageService.js +141 -146
- package/lib/node/decorateLanguageServiceHost.js +2 -3
- package/lib/node/decorateProgram.js +38 -24
- package/lib/node/dedupe.js +1 -2
- package/lib/node/proxyCreateProgram.js +1 -2
- package/lib/node/transform.d.ts +11 -9
- package/lib/node/transform.js +79 -61
- package/lib/node/utils.d.ts +1 -2
- package/lib/node/utils.js +5 -10
- package/lib/protocol/createProject.js +1 -2
- package/lib/protocol/createSys.js +1 -2
- package/lib/quickstart/createAsyncLanguageServicePlugin.d.ts +5 -2
- package/lib/quickstart/createAsyncLanguageServicePlugin.js +16 -17
- package/lib/quickstart/createLanguageServicePlugin.d.ts +9 -2
- package/lib/quickstart/createLanguageServicePlugin.js +21 -20
- package/lib/quickstart/runTsc.js +2 -2
- package/lib/resolveModuleName.js +1 -2
- package/lib/typescript/core.js +18 -20
- package/lib/typescript/path.js +10 -11
- package/lib/typescript/utilities.js +1 -3
- package/package.json +4 -4
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.decorateLanguageService =
|
|
3
|
+
exports.decorateLanguageService = decorateLanguageService;
|
|
4
4
|
const language_core_1 = require("@volar/language-core");
|
|
5
5
|
const dedupe_1 = require("./dedupe");
|
|
6
6
|
const transform_1 = require("./transform");
|
|
@@ -11,9 +11,9 @@ function decorateLanguageService(language, languageService) {
|
|
|
11
11
|
const { getNavigationTree, getOutliningSpans, } = languageService;
|
|
12
12
|
languageService.getNavigationTree = filePath => {
|
|
13
13
|
const fileName = filePath.replace(windowsPathReg, '/');
|
|
14
|
-
const [serviceScript,
|
|
15
|
-
if (serviceScript ||
|
|
16
|
-
const tree = getNavigationTree(
|
|
14
|
+
const [serviceScript, targetScript] = (0, utils_1.getServiceScript)(language, fileName);
|
|
15
|
+
if (serviceScript || targetScript?.associatedOnly) {
|
|
16
|
+
const tree = getNavigationTree(targetScript.id);
|
|
17
17
|
tree.childItems = undefined;
|
|
18
18
|
return tree;
|
|
19
19
|
}
|
|
@@ -23,8 +23,8 @@ function decorateLanguageService(language, languageService) {
|
|
|
23
23
|
};
|
|
24
24
|
languageService.getOutliningSpans = filePath => {
|
|
25
25
|
const fileName = filePath.replace(windowsPathReg, '/');
|
|
26
|
-
const [serviceScript,
|
|
27
|
-
if (serviceScript ||
|
|
26
|
+
const [serviceScript, targetScript] = (0, utils_1.getServiceScript)(language, fileName);
|
|
27
|
+
if (serviceScript || targetScript?.associatedOnly) {
|
|
28
28
|
return [];
|
|
29
29
|
}
|
|
30
30
|
else {
|
|
@@ -35,19 +35,19 @@ function decorateLanguageService(language, languageService) {
|
|
|
35
35
|
const { findReferences, findRenameLocations, getCompletionEntryDetails, getCompletionsAtPosition, getDefinitionAndBoundSpan, getDefinitionAtPosition, getFileReferences, getFormattingEditsForDocument, getFormattingEditsForRange, getFormattingEditsAfterKeystroke, getImplementationAtPosition, getLinkedEditingRangeAtPosition, getQuickInfoAtPosition, getSignatureHelpItems, getReferencesAtPosition, getSemanticDiagnostics, getSyntacticDiagnostics, getSuggestionDiagnostics, getTypeDefinitionAtPosition, getEncodedSemanticClassifications, getDocumentHighlights, getApplicableRefactors, getEditsForFileRename, getEditsForRefactor, getRenameInfo, getCodeFixesAtPosition, prepareCallHierarchy, provideCallHierarchyIncomingCalls, provideCallHierarchyOutgoingCalls, provideInlayHints, organizeImports, } = languageService;
|
|
36
36
|
languageService.getFormattingEditsForDocument = (filePath, options) => {
|
|
37
37
|
const fileName = filePath.replace(windowsPathReg, '/');
|
|
38
|
-
const [serviceScript, sourceScript] = (0, utils_1.getServiceScript)(language, fileName);
|
|
39
|
-
if (
|
|
38
|
+
const [serviceScript, targetScript, sourceScript] = (0, utils_1.getServiceScript)(language, fileName);
|
|
39
|
+
if (targetScript?.associatedOnly) {
|
|
40
40
|
return [];
|
|
41
41
|
}
|
|
42
42
|
if (serviceScript) {
|
|
43
|
-
const map = language.maps.get(serviceScript.code,
|
|
43
|
+
const map = language.maps.get(serviceScript.code, targetScript);
|
|
44
44
|
if (!map.mappings.some(mapping => (0, language_core_1.isFormattingEnabled)(mapping.data))) {
|
|
45
45
|
return [];
|
|
46
46
|
}
|
|
47
|
-
const edits = getFormattingEditsForDocument(
|
|
47
|
+
const edits = getFormattingEditsForDocument(targetScript.id, options);
|
|
48
48
|
return edits
|
|
49
49
|
.map(edit => (0, transform_1.transformTextChange)(sourceScript, language, serviceScript, edit, language_core_1.isFormattingEnabled)?.[1])
|
|
50
|
-
.filter(
|
|
50
|
+
.filter(edit => !!edit);
|
|
51
51
|
}
|
|
52
52
|
else {
|
|
53
53
|
return getFormattingEditsForDocument(fileName, options);
|
|
@@ -55,18 +55,18 @@ function decorateLanguageService(language, languageService) {
|
|
|
55
55
|
};
|
|
56
56
|
languageService.getFormattingEditsForRange = (filePath, start, end, options) => {
|
|
57
57
|
const fileName = filePath.replace(windowsPathReg, '/');
|
|
58
|
-
const [serviceScript, sourceScript] = (0, utils_1.getServiceScript)(language, fileName);
|
|
59
|
-
if (
|
|
58
|
+
const [serviceScript, targetScript, sourceScript] = (0, utils_1.getServiceScript)(language, fileName);
|
|
59
|
+
if (targetScript?.associatedOnly) {
|
|
60
60
|
return [];
|
|
61
61
|
}
|
|
62
62
|
if (serviceScript) {
|
|
63
63
|
const generateStart = (0, transform_1.toGeneratedOffset)(language, serviceScript, sourceScript, start, language_core_1.isFormattingEnabled);
|
|
64
64
|
const generateEnd = (0, transform_1.toGeneratedOffset)(language, serviceScript, sourceScript, end, language_core_1.isFormattingEnabled);
|
|
65
65
|
if (generateStart !== undefined && generateEnd !== undefined) {
|
|
66
|
-
const edits = getFormattingEditsForRange(
|
|
66
|
+
const edits = getFormattingEditsForRange(targetScript.id, generateStart, generateEnd, options);
|
|
67
67
|
return edits
|
|
68
68
|
.map(edit => (0, transform_1.transformTextChange)(sourceScript, language, serviceScript, edit, language_core_1.isFormattingEnabled)?.[1])
|
|
69
|
-
.filter(
|
|
69
|
+
.filter(edit => !!edit);
|
|
70
70
|
}
|
|
71
71
|
return [];
|
|
72
72
|
}
|
|
@@ -76,17 +76,17 @@ function decorateLanguageService(language, languageService) {
|
|
|
76
76
|
};
|
|
77
77
|
languageService.getFormattingEditsAfterKeystroke = (filePath, position, key, options) => {
|
|
78
78
|
const fileName = filePath.replace(windowsPathReg, '/');
|
|
79
|
-
const [serviceScript, sourceScript] = (0, utils_1.getServiceScript)(language, fileName);
|
|
80
|
-
if (
|
|
79
|
+
const [serviceScript, targetScript, sourceScript] = (0, utils_1.getServiceScript)(language, fileName);
|
|
80
|
+
if (targetScript?.associatedOnly) {
|
|
81
81
|
return [];
|
|
82
82
|
}
|
|
83
83
|
if (serviceScript) {
|
|
84
84
|
const generatePosition = (0, transform_1.toGeneratedOffset)(language, serviceScript, sourceScript, position, language_core_1.isFormattingEnabled);
|
|
85
85
|
if (generatePosition !== undefined) {
|
|
86
|
-
const edits = getFormattingEditsAfterKeystroke(
|
|
86
|
+
const edits = getFormattingEditsAfterKeystroke(targetScript.id, generatePosition, key, options);
|
|
87
87
|
return edits
|
|
88
88
|
.map(edit => (0, transform_1.transformTextChange)(sourceScript, language, serviceScript, edit, language_core_1.isFormattingEnabled)?.[1])
|
|
89
|
-
.filter(
|
|
89
|
+
.filter(edit => !!edit);
|
|
90
90
|
}
|
|
91
91
|
return [];
|
|
92
92
|
}
|
|
@@ -96,23 +96,23 @@ function decorateLanguageService(language, languageService) {
|
|
|
96
96
|
};
|
|
97
97
|
languageService.getEditsForFileRename = (oldFilePath, newFilePath, formatOptions, preferences) => {
|
|
98
98
|
const edits = getEditsForFileRename(oldFilePath, newFilePath, formatOptions, preferences);
|
|
99
|
-
return (0, transform_1.transformFileTextChanges)(
|
|
99
|
+
return (0, transform_1.transformFileTextChanges)(language, edits, language_core_1.isRenameEnabled);
|
|
100
100
|
};
|
|
101
101
|
languageService.getLinkedEditingRangeAtPosition = (filePath, position) => {
|
|
102
102
|
const fileName = filePath.replace(windowsPathReg, '/');
|
|
103
|
-
const [serviceScript, sourceScript] = (0, utils_1.getServiceScript)(language, fileName);
|
|
104
|
-
if (
|
|
103
|
+
const [serviceScript, targetScript, sourceScript] = (0, utils_1.getServiceScript)(language, fileName);
|
|
104
|
+
if (targetScript?.associatedOnly) {
|
|
105
105
|
return undefined;
|
|
106
106
|
}
|
|
107
107
|
if (serviceScript) {
|
|
108
108
|
const generatePosition = (0, transform_1.toGeneratedOffset)(language, serviceScript, sourceScript, position, language_core_1.isLinkedEditingEnabled);
|
|
109
109
|
if (generatePosition !== undefined) {
|
|
110
|
-
const info = getLinkedEditingRangeAtPosition(
|
|
110
|
+
const info = getLinkedEditingRangeAtPosition(targetScript.id, generatePosition);
|
|
111
111
|
if (info) {
|
|
112
112
|
return {
|
|
113
113
|
ranges: info.ranges
|
|
114
114
|
.map(span => (0, transform_1.transformTextSpan)(sourceScript, language, serviceScript, span, language_core_1.isLinkedEditingEnabled)?.[1])
|
|
115
|
-
.filter(
|
|
115
|
+
.filter(span => !!span),
|
|
116
116
|
wordPattern: info.wordPattern,
|
|
117
117
|
};
|
|
118
118
|
}
|
|
@@ -124,19 +124,19 @@ function decorateLanguageService(language, languageService) {
|
|
|
124
124
|
};
|
|
125
125
|
languageService.prepareCallHierarchy = (filePath, position) => {
|
|
126
126
|
const fileName = filePath.replace(windowsPathReg, '/');
|
|
127
|
-
const [serviceScript, sourceScript] = (0, utils_1.getServiceScript)(language, fileName);
|
|
128
|
-
if (
|
|
127
|
+
const [serviceScript, targetScript, sourceScript] = (0, utils_1.getServiceScript)(language, fileName);
|
|
128
|
+
if (targetScript?.associatedOnly) {
|
|
129
129
|
return undefined;
|
|
130
130
|
}
|
|
131
131
|
if (serviceScript) {
|
|
132
132
|
const generatePosition = (0, transform_1.toGeneratedOffset)(language, serviceScript, sourceScript, position, language_core_1.isCallHierarchyEnabled);
|
|
133
133
|
if (generatePosition !== undefined) {
|
|
134
|
-
const item = prepareCallHierarchy(
|
|
134
|
+
const item = prepareCallHierarchy(targetScript.id, generatePosition);
|
|
135
135
|
if (Array.isArray(item)) {
|
|
136
|
-
return item.map(item => (0, transform_1.transformCallHierarchyItem)(
|
|
136
|
+
return item.map(item => (0, transform_1.transformCallHierarchyItem)(language, item, language_core_1.isCallHierarchyEnabled));
|
|
137
137
|
}
|
|
138
138
|
else if (item) {
|
|
139
|
-
return (0, transform_1.transformCallHierarchyItem)(
|
|
139
|
+
return (0, transform_1.transformCallHierarchyItem)(language, item, language_core_1.isCallHierarchyEnabled);
|
|
140
140
|
}
|
|
141
141
|
}
|
|
142
142
|
}
|
|
@@ -147,14 +147,14 @@ function decorateLanguageService(language, languageService) {
|
|
|
147
147
|
languageService.provideCallHierarchyIncomingCalls = (filePath, position) => {
|
|
148
148
|
let calls = [];
|
|
149
149
|
const fileName = filePath.replace(windowsPathReg, '/');
|
|
150
|
-
const [serviceScript, sourceScript] = (0, utils_1.getServiceScript)(language, fileName);
|
|
151
|
-
if (
|
|
150
|
+
const [serviceScript, targetScript, sourceScript] = (0, utils_1.getServiceScript)(language, fileName);
|
|
151
|
+
if (targetScript?.associatedOnly) {
|
|
152
152
|
return [];
|
|
153
153
|
}
|
|
154
154
|
if (serviceScript) {
|
|
155
155
|
const generatePosition = (0, transform_1.toGeneratedOffset)(language, serviceScript, sourceScript, position, language_core_1.isCallHierarchyEnabled);
|
|
156
156
|
if (generatePosition !== undefined) {
|
|
157
|
-
calls = provideCallHierarchyIncomingCalls(
|
|
157
|
+
calls = provideCallHierarchyIncomingCalls(targetScript.id, generatePosition);
|
|
158
158
|
}
|
|
159
159
|
}
|
|
160
160
|
else {
|
|
@@ -162,10 +162,10 @@ function decorateLanguageService(language, languageService) {
|
|
|
162
162
|
}
|
|
163
163
|
return calls
|
|
164
164
|
.map(call => {
|
|
165
|
-
const from = (0, transform_1.transformCallHierarchyItem)(
|
|
165
|
+
const from = (0, transform_1.transformCallHierarchyItem)(language, call.from, language_core_1.isCallHierarchyEnabled);
|
|
166
166
|
const fromSpans = call.fromSpans
|
|
167
|
-
.map(span => (0, transform_1.transformSpan)(
|
|
168
|
-
.filter(
|
|
167
|
+
.map(span => (0, transform_1.transformSpan)(language, call.from.file, span, language_core_1.isCallHierarchyEnabled)?.textSpan)
|
|
168
|
+
.filter(span => !!span);
|
|
169
169
|
return {
|
|
170
170
|
from,
|
|
171
171
|
fromSpans,
|
|
@@ -175,14 +175,14 @@ function decorateLanguageService(language, languageService) {
|
|
|
175
175
|
languageService.provideCallHierarchyOutgoingCalls = (filePath, position) => {
|
|
176
176
|
let calls = [];
|
|
177
177
|
const fileName = filePath.replace(windowsPathReg, '/');
|
|
178
|
-
const [serviceScript, sourceScript] = (0, utils_1.getServiceScript)(language, fileName);
|
|
179
|
-
if (
|
|
178
|
+
const [serviceScript, targetScript, sourceScript] = (0, utils_1.getServiceScript)(language, fileName);
|
|
179
|
+
if (targetScript?.associatedOnly) {
|
|
180
180
|
return [];
|
|
181
181
|
}
|
|
182
182
|
if (serviceScript) {
|
|
183
183
|
const generatePosition = (0, transform_1.toGeneratedOffset)(language, serviceScript, sourceScript, position, language_core_1.isCallHierarchyEnabled);
|
|
184
184
|
if (generatePosition !== undefined) {
|
|
185
|
-
calls = provideCallHierarchyOutgoingCalls(
|
|
185
|
+
calls = provideCallHierarchyOutgoingCalls(targetScript.id, generatePosition);
|
|
186
186
|
}
|
|
187
187
|
}
|
|
188
188
|
else {
|
|
@@ -190,12 +190,12 @@ function decorateLanguageService(language, languageService) {
|
|
|
190
190
|
}
|
|
191
191
|
return calls
|
|
192
192
|
.map(call => {
|
|
193
|
-
const to = (0, transform_1.transformCallHierarchyItem)(
|
|
193
|
+
const to = (0, transform_1.transformCallHierarchyItem)(language, call.to, language_core_1.isCallHierarchyEnabled);
|
|
194
194
|
const fromSpans = call.fromSpans
|
|
195
195
|
.map(span => serviceScript
|
|
196
196
|
? (0, transform_1.transformTextSpan)(sourceScript, language, serviceScript, span, language_core_1.isCallHierarchyEnabled)?.[1]
|
|
197
197
|
: span)
|
|
198
|
-
.filter(
|
|
198
|
+
.filter(span => !!span);
|
|
199
199
|
return {
|
|
200
200
|
to,
|
|
201
201
|
fromSpans,
|
|
@@ -204,18 +204,18 @@ function decorateLanguageService(language, languageService) {
|
|
|
204
204
|
};
|
|
205
205
|
languageService.organizeImports = (args, formatOptions, preferences) => {
|
|
206
206
|
const unresolved = organizeImports(args, formatOptions, preferences);
|
|
207
|
-
return (0, transform_1.transformFileTextChanges)(
|
|
207
|
+
return (0, transform_1.transformFileTextChanges)(language, unresolved, language_core_1.isCodeActionsEnabled);
|
|
208
208
|
};
|
|
209
209
|
languageService.getQuickInfoAtPosition = (filePath, position) => {
|
|
210
210
|
const fileName = filePath.replace(windowsPathReg, '/');
|
|
211
|
-
const [serviceScript, sourceScript] = (0, utils_1.getServiceScript)(language, fileName);
|
|
212
|
-
if (
|
|
211
|
+
const [serviceScript, targetScript, sourceScript] = (0, utils_1.getServiceScript)(language, fileName);
|
|
212
|
+
if (targetScript?.associatedOnly) {
|
|
213
213
|
return undefined;
|
|
214
214
|
}
|
|
215
215
|
if (serviceScript) {
|
|
216
216
|
const infos = [];
|
|
217
217
|
for (const [generatePosition] of (0, transform_1.toGeneratedOffsets)(language, serviceScript, sourceScript, position, language_core_1.isHoverEnabled)) {
|
|
218
|
-
const info = getQuickInfoAtPosition(
|
|
218
|
+
const info = getQuickInfoAtPosition(targetScript.id, generatePosition);
|
|
219
219
|
if (info) {
|
|
220
220
|
const textSpan = (0, transform_1.transformTextSpan)(sourceScript, language, serviceScript, info.textSpan, language_core_1.isHoverEnabled)?.[1];
|
|
221
221
|
if (textSpan) {
|
|
@@ -271,14 +271,14 @@ function decorateLanguageService(language, languageService) {
|
|
|
271
271
|
};
|
|
272
272
|
languageService.getSignatureHelpItems = (filePath, position, options) => {
|
|
273
273
|
const fileName = filePath.replace(windowsPathReg, '/');
|
|
274
|
-
const [serviceScript, sourceScript] = (0, utils_1.getServiceScript)(language, fileName);
|
|
275
|
-
if (
|
|
274
|
+
const [serviceScript, targetScript, sourceScript] = (0, utils_1.getServiceScript)(language, fileName);
|
|
275
|
+
if (targetScript?.associatedOnly) {
|
|
276
276
|
return undefined;
|
|
277
277
|
}
|
|
278
278
|
if (serviceScript) {
|
|
279
279
|
const generatePosition = (0, transform_1.toGeneratedOffset)(language, serviceScript, sourceScript, position, language_core_1.isSignatureHelpEnabled);
|
|
280
280
|
if (generatePosition !== undefined) {
|
|
281
|
-
const result = getSignatureHelpItems(
|
|
281
|
+
const result = getSignatureHelpItems(targetScript.id, generatePosition, options);
|
|
282
282
|
if (result) {
|
|
283
283
|
const applicableSpan = (0, transform_1.transformTextSpan)(sourceScript, language, serviceScript, result.applicableSpan, language_core_1.isSignatureHelpEnabled)?.[1];
|
|
284
284
|
if (applicableSpan) {
|
|
@@ -310,36 +310,37 @@ function decorateLanguageService(language, languageService) {
|
|
|
310
310
|
...highlights,
|
|
311
311
|
highlightSpans: highlights.highlightSpans
|
|
312
312
|
.map(span => {
|
|
313
|
-
const { textSpan } = (0, transform_1.transformSpan)(
|
|
313
|
+
const { textSpan } = (0, transform_1.transformSpan)(language, span.fileName ?? highlights.fileName, span.textSpan, language_core_1.isHighlightEnabled) ?? {};
|
|
314
314
|
if (textSpan) {
|
|
315
315
|
return {
|
|
316
316
|
...span,
|
|
317
|
-
contextSpan: (0, transform_1.transformSpan)(
|
|
317
|
+
contextSpan: (0, transform_1.transformSpan)(language, span.fileName ?? highlights.fileName, span.contextSpan, language_core_1.isHighlightEnabled)?.textSpan,
|
|
318
318
|
textSpan,
|
|
319
319
|
};
|
|
320
320
|
}
|
|
321
321
|
})
|
|
322
|
-
.filter(
|
|
322
|
+
.filter(span => !!span),
|
|
323
323
|
};
|
|
324
324
|
});
|
|
325
325
|
return resolved;
|
|
326
326
|
};
|
|
327
327
|
languageService.getApplicableRefactors = (filePath, positionOrRange, preferences, triggerReason, kind, includeInteractiveActions) => {
|
|
328
328
|
const fileName = filePath.replace(windowsPathReg, '/');
|
|
329
|
-
const [serviceScript, sourceScript] = (0, utils_1.getServiceScript)(language, fileName);
|
|
330
|
-
if (
|
|
329
|
+
const [serviceScript, targetScript, sourceScript] = (0, utils_1.getServiceScript)(language, fileName);
|
|
330
|
+
if (targetScript?.associatedOnly) {
|
|
331
331
|
return [];
|
|
332
332
|
}
|
|
333
333
|
if (serviceScript) {
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
334
|
+
if (typeof positionOrRange === 'number') {
|
|
335
|
+
const generatePosition = (0, transform_1.toGeneratedOffset)(language, serviceScript, sourceScript, positionOrRange, language_core_1.isCodeActionsEnabled);
|
|
336
|
+
if (generatePosition !== undefined) {
|
|
337
|
+
return getApplicableRefactors(targetScript.id, generatePosition, preferences, triggerReason, kind, includeInteractiveActions);
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
else {
|
|
341
|
+
for (const [generatedStart, generatedEnd] of (0, transform_1.toGeneratedRanges)(language, serviceScript, sourceScript, positionOrRange.pos, positionOrRange.end, language_core_1.isCodeActionsEnabled)) {
|
|
342
|
+
return getApplicableRefactors(targetScript.id, { pos: generatedStart, end: generatedEnd }, preferences, triggerReason, kind, includeInteractiveActions);
|
|
343
|
+
}
|
|
343
344
|
}
|
|
344
345
|
return [];
|
|
345
346
|
}
|
|
@@ -350,36 +351,35 @@ function decorateLanguageService(language, languageService) {
|
|
|
350
351
|
languageService.getEditsForRefactor = (filePath, formatOptions, positionOrRange, refactorName, actionName, preferences) => {
|
|
351
352
|
let edits;
|
|
352
353
|
const fileName = filePath.replace(windowsPathReg, '/');
|
|
353
|
-
const [serviceScript, sourceScript] = (0, utils_1.getServiceScript)(language, fileName);
|
|
354
|
-
if (
|
|
354
|
+
const [serviceScript, targetScript, sourceScript] = (0, utils_1.getServiceScript)(language, fileName);
|
|
355
|
+
if (targetScript?.associatedOnly) {
|
|
355
356
|
return undefined;
|
|
356
357
|
}
|
|
357
358
|
if (serviceScript) {
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
edits = getEditsForRefactor(sourceScript.id, formatOptions, por, refactorName, actionName, preferences);
|
|
359
|
+
if (typeof positionOrRange === 'number') {
|
|
360
|
+
const generatePosition = (0, transform_1.toGeneratedOffset)(language, serviceScript, sourceScript, positionOrRange, language_core_1.isCodeActionsEnabled);
|
|
361
|
+
if (generatePosition !== undefined) {
|
|
362
|
+
edits = getEditsForRefactor(targetScript.id, formatOptions, generatePosition, refactorName, actionName, preferences);
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
else {
|
|
366
|
+
for (const [generatedStart, generatedEnd] of (0, transform_1.toGeneratedRanges)(language, serviceScript, sourceScript, positionOrRange.pos, positionOrRange.end, language_core_1.isCodeActionsEnabled)) {
|
|
367
|
+
edits = getEditsForRefactor(targetScript.id, formatOptions, { pos: generatedStart, end: generatedEnd }, refactorName, actionName, preferences);
|
|
368
|
+
}
|
|
369
369
|
}
|
|
370
370
|
}
|
|
371
371
|
else {
|
|
372
372
|
edits = getEditsForRefactor(fileName, formatOptions, positionOrRange, refactorName, actionName, preferences);
|
|
373
373
|
}
|
|
374
374
|
if (edits) {
|
|
375
|
-
edits.edits = (0, transform_1.transformFileTextChanges)(
|
|
375
|
+
edits.edits = (0, transform_1.transformFileTextChanges)(language, edits.edits, language_core_1.isCodeActionsEnabled);
|
|
376
376
|
return edits;
|
|
377
377
|
}
|
|
378
378
|
};
|
|
379
379
|
languageService.getRenameInfo = (filePath, position, options) => {
|
|
380
380
|
const fileName = filePath.replace(windowsPathReg, '/');
|
|
381
|
-
const [serviceScript, sourceScript] = (0, utils_1.getServiceScript)(language, fileName);
|
|
382
|
-
if (
|
|
381
|
+
const [serviceScript, targetScript, sourceScript] = (0, utils_1.getServiceScript)(language, fileName);
|
|
382
|
+
if (targetScript?.associatedOnly) {
|
|
383
383
|
return {
|
|
384
384
|
canRename: false,
|
|
385
385
|
localizedErrorMessage: "Cannot rename"
|
|
@@ -388,7 +388,7 @@ function decorateLanguageService(language, languageService) {
|
|
|
388
388
|
if (serviceScript) {
|
|
389
389
|
let failed;
|
|
390
390
|
for (const [generateOffset] of (0, transform_1.toGeneratedOffsets)(language, serviceScript, sourceScript, position, language_core_1.isRenameEnabled)) {
|
|
391
|
-
const info = getRenameInfo(
|
|
391
|
+
const info = getRenameInfo(targetScript.id, generateOffset, options);
|
|
392
392
|
if (info.canRename) {
|
|
393
393
|
const span = (0, transform_1.transformTextSpan)(sourceScript, language, serviceScript, info.triggerSpan, language_core_1.isRenameEnabled)?.[1];
|
|
394
394
|
if (span) {
|
|
@@ -415,30 +415,30 @@ function decorateLanguageService(language, languageService) {
|
|
|
415
415
|
languageService.getCodeFixesAtPosition = (filePath, start, end, errorCodes, formatOptions, preferences) => {
|
|
416
416
|
let fixes = [];
|
|
417
417
|
const fileName = filePath.replace(windowsPathReg, '/');
|
|
418
|
-
const [serviceScript, sourceScript] = (0, utils_1.getServiceScript)(language, fileName);
|
|
419
|
-
if (
|
|
418
|
+
const [serviceScript, targetScript, sourceScript] = (0, utils_1.getServiceScript)(language, fileName);
|
|
419
|
+
if (targetScript?.associatedOnly) {
|
|
420
420
|
return [];
|
|
421
421
|
}
|
|
422
422
|
if (serviceScript) {
|
|
423
423
|
const generateStart = (0, transform_1.toGeneratedOffset)(language, serviceScript, sourceScript, start, language_core_1.isCodeActionsEnabled);
|
|
424
424
|
const generateEnd = (0, transform_1.toGeneratedOffset)(language, serviceScript, sourceScript, end, language_core_1.isCodeActionsEnabled);
|
|
425
425
|
if (generateStart !== undefined && generateEnd !== undefined) {
|
|
426
|
-
fixes = getCodeFixesAtPosition(
|
|
426
|
+
fixes = getCodeFixesAtPosition(targetScript.id, generateStart, generateEnd, errorCodes, formatOptions, preferences);
|
|
427
427
|
}
|
|
428
428
|
}
|
|
429
429
|
else {
|
|
430
430
|
fixes = getCodeFixesAtPosition(fileName, start, end, errorCodes, formatOptions, preferences);
|
|
431
431
|
}
|
|
432
432
|
fixes = fixes.map(fix => {
|
|
433
|
-
fix.changes = (0, transform_1.transformFileTextChanges)(
|
|
433
|
+
fix.changes = (0, transform_1.transformFileTextChanges)(language, fix.changes, language_core_1.isCodeActionsEnabled);
|
|
434
434
|
return fix;
|
|
435
435
|
});
|
|
436
436
|
return fixes;
|
|
437
437
|
};
|
|
438
438
|
languageService.getEncodedSemanticClassifications = (filePath, span, format) => {
|
|
439
439
|
const fileName = filePath.replace(windowsPathReg, '/');
|
|
440
|
-
const [serviceScript, sourceScript] = (0, utils_1.getServiceScript)(language, fileName);
|
|
441
|
-
if (
|
|
440
|
+
const [serviceScript, targetScript, sourceScript] = (0, utils_1.getServiceScript)(language, fileName);
|
|
441
|
+
if (targetScript?.associatedOnly) {
|
|
442
442
|
return {
|
|
443
443
|
spans: [],
|
|
444
444
|
endOfLineState: 0
|
|
@@ -447,7 +447,7 @@ function decorateLanguageService(language, languageService) {
|
|
|
447
447
|
if (serviceScript) {
|
|
448
448
|
let start;
|
|
449
449
|
let end;
|
|
450
|
-
const map = language.maps.get(serviceScript.code,
|
|
450
|
+
const map = language.maps.get(serviceScript.code, targetScript);
|
|
451
451
|
for (const mapping of map.mappings) {
|
|
452
452
|
// TODO reuse the logic from language service
|
|
453
453
|
if ((0, language_core_1.isSemanticTokensEnabled)(mapping.data) && mapping.sourceOffsets[0] >= span.start && mapping.sourceOffsets[0] <= span.start + span.length) {
|
|
@@ -458,23 +458,16 @@ function decorateLanguageService(language, languageService) {
|
|
|
458
458
|
}
|
|
459
459
|
}
|
|
460
460
|
start ??= 0;
|
|
461
|
-
end ??=
|
|
461
|
+
end ??= targetScript.snapshot.getLength();
|
|
462
462
|
const mappingOffset = (0, transform_1.getMappingOffset)(language, serviceScript);
|
|
463
463
|
start += mappingOffset;
|
|
464
464
|
end += mappingOffset;
|
|
465
|
-
const result = getEncodedSemanticClassifications(
|
|
465
|
+
const result = getEncodedSemanticClassifications(targetScript.id, { start, length: end - start }, format);
|
|
466
466
|
const spans = [];
|
|
467
467
|
for (let i = 0; i < result.spans.length; i += 3) {
|
|
468
|
-
for (const sourceStart of (0, transform_1.
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
spans.push(sourceStart[1], sourceEnd[1] - sourceStart[1], result.spans[i + 2]);
|
|
472
|
-
break;
|
|
473
|
-
}
|
|
474
|
-
}
|
|
475
|
-
if (spans.length) {
|
|
476
|
-
break;
|
|
477
|
-
}
|
|
468
|
+
for (const [_, sourceStart, sourceEnd] of (0, transform_1.toSourceRanges)(sourceScript, language, serviceScript, result.spans[i], result.spans[i] + result.spans[i + 1], language_core_1.isSemanticTokensEnabled)) {
|
|
469
|
+
spans.push(sourceStart, sourceEnd - sourceStart, result.spans[i + 2]);
|
|
470
|
+
break;
|
|
478
471
|
}
|
|
479
472
|
}
|
|
480
473
|
result.spans = spans;
|
|
@@ -486,33 +479,36 @@ function decorateLanguageService(language, languageService) {
|
|
|
486
479
|
};
|
|
487
480
|
languageService.getSyntacticDiagnostics = filePath => {
|
|
488
481
|
const fileName = filePath.replace(windowsPathReg, '/');
|
|
489
|
-
const [
|
|
490
|
-
if (
|
|
482
|
+
const [serviceScript, targetScript, sourceScript] = (0, utils_1.getServiceScript)(language, fileName);
|
|
483
|
+
if (targetScript?.associatedOnly) {
|
|
491
484
|
return [];
|
|
492
485
|
}
|
|
493
|
-
return getSyntacticDiagnostics(fileName)
|
|
494
|
-
.map(d => (0, transform_1.transformDiagnostic)(
|
|
495
|
-
.filter(
|
|
486
|
+
return getSyntacticDiagnostics(targetScript?.id ?? fileName)
|
|
487
|
+
.map(d => (0, transform_1.transformDiagnostic)(language, d, languageService.getProgram(), false))
|
|
488
|
+
.filter(d => !!d)
|
|
489
|
+
.filter(d => !serviceScript || language.scripts.get(d.file.fileName) === sourceScript);
|
|
496
490
|
};
|
|
497
491
|
languageService.getSemanticDiagnostics = filePath => {
|
|
498
492
|
const fileName = filePath.replace(windowsPathReg, '/');
|
|
499
|
-
const [
|
|
500
|
-
if (
|
|
493
|
+
const [serviceScript, targetScript, sourceScript] = (0, utils_1.getServiceScript)(language, fileName);
|
|
494
|
+
if (targetScript?.associatedOnly) {
|
|
501
495
|
return [];
|
|
502
496
|
}
|
|
503
|
-
return getSemanticDiagnostics(fileName)
|
|
504
|
-
.map(d => (0, transform_1.transformDiagnostic)(
|
|
505
|
-
.filter(
|
|
497
|
+
return getSemanticDiagnostics(targetScript?.id ?? fileName)
|
|
498
|
+
.map(d => (0, transform_1.transformDiagnostic)(language, d, languageService.getProgram(), false))
|
|
499
|
+
.filter(d => !!d)
|
|
500
|
+
.filter(d => !serviceScript || !d.file || language.scripts.get(d.file.fileName) === sourceScript);
|
|
506
501
|
};
|
|
507
502
|
languageService.getSuggestionDiagnostics = filePath => {
|
|
508
503
|
const fileName = filePath.replace(windowsPathReg, '/');
|
|
509
|
-
const [
|
|
510
|
-
if (
|
|
504
|
+
const [serviceScript, targetScript, sourceScript] = (0, utils_1.getServiceScript)(language, fileName);
|
|
505
|
+
if (targetScript?.associatedOnly) {
|
|
511
506
|
return [];
|
|
512
507
|
}
|
|
513
|
-
return getSuggestionDiagnostics(fileName)
|
|
514
|
-
.map(d => (0, transform_1.transformDiagnostic)(
|
|
515
|
-
.filter(
|
|
508
|
+
return getSuggestionDiagnostics(targetScript?.id ?? fileName)
|
|
509
|
+
.map(d => (0, transform_1.transformDiagnostic)(language, d, languageService.getProgram(), false))
|
|
510
|
+
.filter(d => !!d)
|
|
511
|
+
.filter(d => !serviceScript || !d.file || language.scripts.get(d.file.fileName) === sourceScript);
|
|
516
512
|
};
|
|
517
513
|
languageService.getDefinitionAndBoundSpan = (filePath, position) => {
|
|
518
514
|
const fileName = filePath.replace(windowsPathReg, '/');
|
|
@@ -522,16 +518,16 @@ function decorateLanguageService(language, languageService) {
|
|
|
522
518
|
}
|
|
523
519
|
});
|
|
524
520
|
const textSpan = unresolved
|
|
525
|
-
.map(s => (0, transform_1.transformSpan)(
|
|
526
|
-
.filter(
|
|
521
|
+
.map(s => (0, transform_1.transformSpan)(language, fileName, s.textSpan, language_core_1.isDefinitionEnabled)?.textSpan)
|
|
522
|
+
.filter(s => !!s)[0];
|
|
527
523
|
if (!textSpan) {
|
|
528
524
|
return;
|
|
529
525
|
}
|
|
530
526
|
const definitions = unresolved
|
|
531
527
|
.map(s => s.definitions
|
|
532
|
-
?.map(s => (0, transform_1.transformDocumentSpan)(
|
|
533
|
-
.filter(
|
|
534
|
-
|
|
528
|
+
?.map(s => (0, transform_1.transformDocumentSpan)(language, s, language_core_1.isDefinitionEnabled, s.fileName !== fileName))
|
|
529
|
+
.filter(s => !!s)
|
|
530
|
+
?? [])
|
|
535
531
|
.flat();
|
|
536
532
|
return {
|
|
537
533
|
textSpan,
|
|
@@ -550,12 +546,12 @@ function decorateLanguageService(language, languageService) {
|
|
|
550
546
|
const resolved = unresolved
|
|
551
547
|
.flat()
|
|
552
548
|
.map(symbol => {
|
|
553
|
-
const definition = (0, transform_1.transformDocumentSpan)(
|
|
549
|
+
const definition = (0, transform_1.transformDocumentSpan)(language, symbol.definition, language_core_1.isDefinitionEnabled, true);
|
|
554
550
|
return {
|
|
555
551
|
definition,
|
|
556
552
|
references: symbol.references
|
|
557
|
-
.map(r => (0, transform_1.transformDocumentSpan)(
|
|
558
|
-
.filter(
|
|
553
|
+
.map(r => (0, transform_1.transformDocumentSpan)(language, r, language_core_1.isReferencesEnabled))
|
|
554
|
+
.filter(r => !!r),
|
|
559
555
|
};
|
|
560
556
|
});
|
|
561
557
|
return resolved;
|
|
@@ -569,8 +565,8 @@ function decorateLanguageService(language, languageService) {
|
|
|
569
565
|
});
|
|
570
566
|
const resolved = unresolved
|
|
571
567
|
.flat()
|
|
572
|
-
.map(s => (0, transform_1.transformDocumentSpan)(
|
|
573
|
-
.filter(
|
|
568
|
+
.map(s => (0, transform_1.transformDocumentSpan)(language, s, language_core_1.isDefinitionEnabled, s.fileName !== fileName))
|
|
569
|
+
.filter(s => !!s);
|
|
574
570
|
return (0, dedupe_1.dedupeDocumentSpans)(resolved);
|
|
575
571
|
};
|
|
576
572
|
languageService.getTypeDefinitionAtPosition = (filePath, position) => {
|
|
@@ -582,8 +578,8 @@ function decorateLanguageService(language, languageService) {
|
|
|
582
578
|
});
|
|
583
579
|
const resolved = unresolved
|
|
584
580
|
.flat()
|
|
585
|
-
.map(s => (0, transform_1.transformDocumentSpan)(
|
|
586
|
-
.filter(
|
|
581
|
+
.map(s => (0, transform_1.transformDocumentSpan)(language, s, language_core_1.isTypeDefinitionEnabled))
|
|
582
|
+
.filter(s => !!s);
|
|
587
583
|
return (0, dedupe_1.dedupeDocumentSpans)(resolved);
|
|
588
584
|
};
|
|
589
585
|
languageService.getImplementationAtPosition = (filePath, position) => {
|
|
@@ -595,8 +591,8 @@ function decorateLanguageService(language, languageService) {
|
|
|
595
591
|
});
|
|
596
592
|
const resolved = unresolved
|
|
597
593
|
.flat()
|
|
598
|
-
.map(s => (0, transform_1.transformDocumentSpan)(
|
|
599
|
-
.filter(
|
|
594
|
+
.map(s => (0, transform_1.transformDocumentSpan)(language, s, language_core_1.isImplementationEnabled))
|
|
595
|
+
.filter(s => !!s);
|
|
600
596
|
return (0, dedupe_1.dedupeDocumentSpans)(resolved);
|
|
601
597
|
};
|
|
602
598
|
languageService.findRenameLocations = (filePath, position, findInStrings, findInComments, preferences) => {
|
|
@@ -608,8 +604,8 @@ function decorateLanguageService(language, languageService) {
|
|
|
608
604
|
});
|
|
609
605
|
const resolved = unresolved
|
|
610
606
|
.flat()
|
|
611
|
-
.map(s => (0, transform_1.transformDocumentSpan)(
|
|
612
|
-
.filter(
|
|
607
|
+
.map(s => (0, transform_1.transformDocumentSpan)(language, s, language_core_1.isRenameEnabled))
|
|
608
|
+
.filter(s => !!s);
|
|
613
609
|
return (0, dedupe_1.dedupeDocumentSpans)(resolved);
|
|
614
610
|
};
|
|
615
611
|
languageService.getReferencesAtPosition = (filePath, position) => {
|
|
@@ -621,20 +617,20 @@ function decorateLanguageService(language, languageService) {
|
|
|
621
617
|
});
|
|
622
618
|
const resolved = unresolved
|
|
623
619
|
.flat()
|
|
624
|
-
.map(s => (0, transform_1.transformDocumentSpan)(
|
|
625
|
-
.filter(
|
|
620
|
+
.map(s => (0, transform_1.transformDocumentSpan)(language, s, language_core_1.isReferencesEnabled))
|
|
621
|
+
.filter(s => !!s);
|
|
626
622
|
return (0, dedupe_1.dedupeDocumentSpans)(resolved);
|
|
627
623
|
};
|
|
628
624
|
languageService.getCompletionsAtPosition = (filePath, position, options, formattingSettings) => {
|
|
629
625
|
const fileName = filePath.replace(windowsPathReg, '/');
|
|
630
|
-
const [serviceScript, sourceScript] = (0, utils_1.getServiceScript)(language, fileName);
|
|
631
|
-
if (
|
|
626
|
+
const [serviceScript, targetScript, sourceScript] = (0, utils_1.getServiceScript)(language, fileName);
|
|
627
|
+
if (targetScript?.associatedOnly) {
|
|
632
628
|
return undefined;
|
|
633
629
|
}
|
|
634
630
|
if (serviceScript) {
|
|
635
631
|
const results = [];
|
|
636
632
|
for (const [generatedOffset, mapping] of (0, transform_1.toGeneratedOffsets)(language, serviceScript, sourceScript, position, language_core_1.isCompletionEnabled)) {
|
|
637
|
-
const result = getCompletionsAtPosition(
|
|
633
|
+
const result = getCompletionsAtPosition(targetScript.id, generatedOffset, options, formattingSettings);
|
|
638
634
|
if (!result) {
|
|
639
635
|
continue;
|
|
640
636
|
}
|
|
@@ -670,14 +666,14 @@ function decorateLanguageService(language, languageService) {
|
|
|
670
666
|
languageService.getCompletionEntryDetails = (filePath, position, entryName, formatOptions, source, preferences, data) => {
|
|
671
667
|
let details;
|
|
672
668
|
const fileName = filePath.replace(windowsPathReg, '/');
|
|
673
|
-
const [serviceScript, sourceScript] = (0, utils_1.getServiceScript)(language, fileName);
|
|
674
|
-
if (
|
|
669
|
+
const [serviceScript, targetScript, sourceScript] = (0, utils_1.getServiceScript)(language, fileName);
|
|
670
|
+
if (targetScript?.associatedOnly) {
|
|
675
671
|
return undefined;
|
|
676
672
|
}
|
|
677
673
|
if (serviceScript) {
|
|
678
674
|
const generatePosition = (0, transform_1.toGeneratedOffset)(language, serviceScript, sourceScript, position, language_core_1.isCompletionEnabled);
|
|
679
675
|
if (generatePosition !== undefined) {
|
|
680
|
-
details = getCompletionEntryDetails(
|
|
676
|
+
details = getCompletionEntryDetails(targetScript.id, generatePosition, entryName, formatOptions, source, preferences, data);
|
|
681
677
|
}
|
|
682
678
|
}
|
|
683
679
|
else {
|
|
@@ -685,21 +681,21 @@ function decorateLanguageService(language, languageService) {
|
|
|
685
681
|
}
|
|
686
682
|
if (details?.codeActions) {
|
|
687
683
|
for (const codeAction of details.codeActions) {
|
|
688
|
-
codeAction.changes = (0, transform_1.transformFileTextChanges)(
|
|
684
|
+
codeAction.changes = (0, transform_1.transformFileTextChanges)(language, codeAction.changes, language_core_1.isCompletionEnabled);
|
|
689
685
|
}
|
|
690
686
|
}
|
|
691
687
|
return details;
|
|
692
688
|
};
|
|
693
689
|
languageService.provideInlayHints = (filePath, span, preferences) => {
|
|
694
690
|
const fileName = filePath.replace(windowsPathReg, '/');
|
|
695
|
-
const [serviceScript, sourceScript] = (0, utils_1.getServiceScript)(language, fileName);
|
|
696
|
-
if (
|
|
691
|
+
const [serviceScript, targetScript, sourceScript] = (0, utils_1.getServiceScript)(language, fileName);
|
|
692
|
+
if (targetScript?.associatedOnly) {
|
|
697
693
|
return [];
|
|
698
694
|
}
|
|
699
695
|
if (serviceScript) {
|
|
700
696
|
let start;
|
|
701
697
|
let end;
|
|
702
|
-
const map = language.maps.get(serviceScript.code,
|
|
698
|
+
const map = language.maps.get(serviceScript.code, targetScript);
|
|
703
699
|
for (const mapping of map.mappings) {
|
|
704
700
|
if ((0, language_core_1.isInlayHintsEnabled)(mapping.data) && mapping.sourceOffsets[0] >= span.start && mapping.sourceOffsets[0] <= span.start + span.length) {
|
|
705
701
|
start ??= mapping.generatedOffsets[0];
|
|
@@ -715,7 +711,7 @@ function decorateLanguageService(language, languageService) {
|
|
|
715
711
|
const mappingOffset = (0, transform_1.getMappingOffset)(language, serviceScript);
|
|
716
712
|
start += mappingOffset;
|
|
717
713
|
end += mappingOffset;
|
|
718
|
-
const result = provideInlayHints(
|
|
714
|
+
const result = provideInlayHints(targetScript.id, { start, length: end - start }, preferences);
|
|
719
715
|
const hints = [];
|
|
720
716
|
for (const hint of result) {
|
|
721
717
|
const sourcePosition = (0, transform_1.toSourceOffset)(sourceScript, language, serviceScript, hint.position, language_core_1.isInlayHintsEnabled);
|
|
@@ -736,17 +732,17 @@ function decorateLanguageService(language, languageService) {
|
|
|
736
732
|
const fileName = filePath.replace(windowsPathReg, '/');
|
|
737
733
|
const unresolved = getFileReferences(fileName);
|
|
738
734
|
const resolved = unresolved
|
|
739
|
-
.map(s => (0, transform_1.transformDocumentSpan)(
|
|
740
|
-
.filter(
|
|
735
|
+
.map(s => (0, transform_1.transformDocumentSpan)(language, s, language_core_1.isReferencesEnabled))
|
|
736
|
+
.filter(s => !!s);
|
|
741
737
|
return (0, dedupe_1.dedupeDocumentSpans)(resolved);
|
|
742
738
|
};
|
|
743
739
|
function linkedCodeFeatureWorker(fileName, position, filter, worker, getLinkedCodes) {
|
|
744
740
|
const results = [];
|
|
745
741
|
const processedFilePositions = new Set();
|
|
746
|
-
const [serviceScript, sourceScript] = (0, utils_1.getServiceScript)(language, fileName);
|
|
742
|
+
const [serviceScript, targetScript, sourceScript] = (0, utils_1.getServiceScript)(language, fileName);
|
|
747
743
|
if (serviceScript) {
|
|
748
744
|
for (const [generatedOffset] of (0, transform_1.toGeneratedOffsets)(language, serviceScript, sourceScript, position, filter)) {
|
|
749
|
-
process(
|
|
745
|
+
process(targetScript.id, generatedOffset);
|
|
750
746
|
}
|
|
751
747
|
}
|
|
752
748
|
else {
|
|
@@ -781,7 +777,6 @@ function decorateLanguageService(language, languageService) {
|
|
|
781
777
|
}
|
|
782
778
|
}
|
|
783
779
|
}
|
|
784
|
-
exports.decorateLanguageService = decorateLanguageService;
|
|
785
780
|
function displayPartsToString(displayParts) {
|
|
786
781
|
if (displayParts) {
|
|
787
782
|
return displayParts.map(displayPart => displayPart.text).join('');
|