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