@volar/typescript 2.3.0-alpha.1 → 2.3.0-alpha.11
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 +185 -122
- package/lib/node/decorateLanguageServiceHost.js +18 -9
- package/lib/node/decorateProgram.js +39 -12
- package/lib/node/proxyCreateProgram.js +4 -8
- package/lib/node/transform.d.ts +10 -8
- package/lib/node/transform.js +109 -54
- package/lib/node/utils.d.ts +2 -2
- package/lib/node/utils.js +15 -4
- package/lib/protocol/createProject.d.ts +2 -2
- package/lib/protocol/createProject.js +4 -4
- package/lib/quickstart/createAsyncLanguageServicePlugin.js +2 -6
- package/lib/quickstart/createLanguageServicePlugin.js +3 -6
- package/lib/resolveModuleName.js +18 -0
- package/package.json +4 -4
|
@@ -3,17 +3,17 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.decorateLanguageService = void 0;
|
|
4
4
|
const language_core_1 = require("@volar/language-core");
|
|
5
5
|
const dedupe_1 = require("./dedupe");
|
|
6
|
-
const utils_1 = require("./utils");
|
|
7
6
|
const transform_1 = require("./transform");
|
|
7
|
+
const utils_1 = require("./utils");
|
|
8
8
|
const windowsPathReg = /\\/g;
|
|
9
9
|
function decorateLanguageService(language, languageService) {
|
|
10
10
|
// ignored methods
|
|
11
11
|
const { getNavigationTree, getOutliningSpans, } = languageService;
|
|
12
12
|
languageService.getNavigationTree = filePath => {
|
|
13
13
|
const fileName = filePath.replace(windowsPathReg, '/');
|
|
14
|
-
const [serviceScript] = (0, utils_1.getServiceScript)(language, fileName);
|
|
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] = (0, utils_1.getServiceScript)(language, fileName);
|
|
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,14 +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,
|
|
38
|
+
const [serviceScript, targetScript, sourceScript] = (0, utils_1.getServiceScript)(language, fileName);
|
|
39
|
+
if (targetScript?.associatedOnly) {
|
|
40
|
+
return [];
|
|
41
|
+
}
|
|
39
42
|
if (serviceScript) {
|
|
43
|
+
const map = language.maps.get(serviceScript.code, targetScript);
|
|
40
44
|
if (!map.mappings.some(mapping => (0, language_core_1.isFormattingEnabled)(mapping.data))) {
|
|
41
45
|
return [];
|
|
42
46
|
}
|
|
43
|
-
const edits = getFormattingEditsForDocument(
|
|
47
|
+
const edits = getFormattingEditsForDocument(targetScript.id, options);
|
|
44
48
|
return edits
|
|
45
|
-
.map(edit => (0, transform_1.transformTextChange)(sourceScript,
|
|
49
|
+
.map(edit => (0, transform_1.transformTextChange)(sourceScript, language, serviceScript, edit, language_core_1.isFormattingEnabled)?.[1])
|
|
46
50
|
.filter(utils_1.notEmpty);
|
|
47
51
|
}
|
|
48
52
|
else {
|
|
@@ -51,14 +55,17 @@ function decorateLanguageService(language, languageService) {
|
|
|
51
55
|
};
|
|
52
56
|
languageService.getFormattingEditsForRange = (filePath, start, end, options) => {
|
|
53
57
|
const fileName = filePath.replace(windowsPathReg, '/');
|
|
54
|
-
const [serviceScript,
|
|
58
|
+
const [serviceScript, targetScript, sourceScript] = (0, utils_1.getServiceScript)(language, fileName);
|
|
59
|
+
if (targetScript?.associatedOnly) {
|
|
60
|
+
return [];
|
|
61
|
+
}
|
|
55
62
|
if (serviceScript) {
|
|
56
|
-
const generateStart = (0, transform_1.toGeneratedOffset)(
|
|
57
|
-
const generateEnd = (0, transform_1.toGeneratedOffset)(
|
|
63
|
+
const generateStart = (0, transform_1.toGeneratedOffset)(language, serviceScript, targetScript, start, language_core_1.isFormattingEnabled);
|
|
64
|
+
const generateEnd = (0, transform_1.toGeneratedOffset)(language, serviceScript, targetScript, end, language_core_1.isFormattingEnabled);
|
|
58
65
|
if (generateStart !== undefined && generateEnd !== undefined) {
|
|
59
|
-
const edits = getFormattingEditsForRange(
|
|
66
|
+
const edits = getFormattingEditsForRange(targetScript.id, generateStart, generateEnd, options);
|
|
60
67
|
return edits
|
|
61
|
-
.map(edit => (0, transform_1.transformTextChange)(sourceScript,
|
|
68
|
+
.map(edit => (0, transform_1.transformTextChange)(sourceScript, language, serviceScript, edit, language_core_1.isFormattingEnabled)?.[1])
|
|
62
69
|
.filter(utils_1.notEmpty);
|
|
63
70
|
}
|
|
64
71
|
return [];
|
|
@@ -69,13 +76,16 @@ function decorateLanguageService(language, languageService) {
|
|
|
69
76
|
};
|
|
70
77
|
languageService.getFormattingEditsAfterKeystroke = (filePath, position, key, options) => {
|
|
71
78
|
const fileName = filePath.replace(windowsPathReg, '/');
|
|
72
|
-
const [serviceScript,
|
|
79
|
+
const [serviceScript, targetScript, sourceScript] = (0, utils_1.getServiceScript)(language, fileName);
|
|
80
|
+
if (targetScript?.associatedOnly) {
|
|
81
|
+
return [];
|
|
82
|
+
}
|
|
73
83
|
if (serviceScript) {
|
|
74
|
-
const generatePosition = (0, transform_1.toGeneratedOffset)(
|
|
84
|
+
const generatePosition = (0, transform_1.toGeneratedOffset)(language, serviceScript, targetScript, position, language_core_1.isFormattingEnabled);
|
|
75
85
|
if (generatePosition !== undefined) {
|
|
76
|
-
const edits = getFormattingEditsAfterKeystroke(
|
|
86
|
+
const edits = getFormattingEditsAfterKeystroke(targetScript.id, generatePosition, key, options);
|
|
77
87
|
return edits
|
|
78
|
-
.map(edit => (0, transform_1.transformTextChange)(sourceScript,
|
|
88
|
+
.map(edit => (0, transform_1.transformTextChange)(sourceScript, language, serviceScript, edit, language_core_1.isFormattingEnabled)?.[1])
|
|
79
89
|
.filter(utils_1.notEmpty);
|
|
80
90
|
}
|
|
81
91
|
return [];
|
|
@@ -86,21 +96,22 @@ function decorateLanguageService(language, languageService) {
|
|
|
86
96
|
};
|
|
87
97
|
languageService.getEditsForFileRename = (oldFilePath, newFilePath, formatOptions, preferences) => {
|
|
88
98
|
const edits = getEditsForFileRename(oldFilePath, newFilePath, formatOptions, preferences);
|
|
89
|
-
return edits
|
|
90
|
-
.map(edit => (0, transform_1.transformFileTextChanges)(language, edit, language_core_1.isRenameEnabled))
|
|
91
|
-
.filter(utils_1.notEmpty);
|
|
99
|
+
return (0, transform_1.transformFileTextChanges)(language, edits, language_core_1.isRenameEnabled);
|
|
92
100
|
};
|
|
93
101
|
languageService.getLinkedEditingRangeAtPosition = (filePath, position) => {
|
|
94
102
|
const fileName = filePath.replace(windowsPathReg, '/');
|
|
95
|
-
const [serviceScript,
|
|
103
|
+
const [serviceScript, targetScript, sourceScript] = (0, utils_1.getServiceScript)(language, fileName);
|
|
104
|
+
if (targetScript?.associatedOnly) {
|
|
105
|
+
return undefined;
|
|
106
|
+
}
|
|
96
107
|
if (serviceScript) {
|
|
97
|
-
const generatePosition = (0, transform_1.toGeneratedOffset)(
|
|
108
|
+
const generatePosition = (0, transform_1.toGeneratedOffset)(language, serviceScript, targetScript, position, language_core_1.isLinkedEditingEnabled);
|
|
98
109
|
if (generatePosition !== undefined) {
|
|
99
|
-
const info = getLinkedEditingRangeAtPosition(
|
|
110
|
+
const info = getLinkedEditingRangeAtPosition(targetScript.id, generatePosition);
|
|
100
111
|
if (info) {
|
|
101
112
|
return {
|
|
102
113
|
ranges: info.ranges
|
|
103
|
-
.map(span => (0, transform_1.transformTextSpan)(sourceScript,
|
|
114
|
+
.map(span => (0, transform_1.transformTextSpan)(sourceScript, language, serviceScript, span, language_core_1.isLinkedEditingEnabled)?.[1])
|
|
104
115
|
.filter(utils_1.notEmpty),
|
|
105
116
|
wordPattern: info.wordPattern,
|
|
106
117
|
};
|
|
@@ -113,11 +124,14 @@ function decorateLanguageService(language, languageService) {
|
|
|
113
124
|
};
|
|
114
125
|
languageService.prepareCallHierarchy = (filePath, position) => {
|
|
115
126
|
const fileName = filePath.replace(windowsPathReg, '/');
|
|
116
|
-
const [serviceScript,
|
|
127
|
+
const [serviceScript, targetScript] = (0, utils_1.getServiceScript)(language, fileName);
|
|
128
|
+
if (targetScript?.associatedOnly) {
|
|
129
|
+
return undefined;
|
|
130
|
+
}
|
|
117
131
|
if (serviceScript) {
|
|
118
|
-
const generatePosition = (0, transform_1.toGeneratedOffset)(
|
|
132
|
+
const generatePosition = (0, transform_1.toGeneratedOffset)(language, serviceScript, targetScript, position, language_core_1.isCallHierarchyEnabled);
|
|
119
133
|
if (generatePosition !== undefined) {
|
|
120
|
-
const item = prepareCallHierarchy(
|
|
134
|
+
const item = prepareCallHierarchy(targetScript.id, generatePosition);
|
|
121
135
|
if (Array.isArray(item)) {
|
|
122
136
|
return item.map(item => (0, transform_1.transformCallHierarchyItem)(language, item, language_core_1.isCallHierarchyEnabled));
|
|
123
137
|
}
|
|
@@ -133,11 +147,14 @@ function decorateLanguageService(language, languageService) {
|
|
|
133
147
|
languageService.provideCallHierarchyIncomingCalls = (filePath, position) => {
|
|
134
148
|
let calls = [];
|
|
135
149
|
const fileName = filePath.replace(windowsPathReg, '/');
|
|
136
|
-
const [serviceScript,
|
|
150
|
+
const [serviceScript, targetScript] = (0, utils_1.getServiceScript)(language, fileName);
|
|
151
|
+
if (targetScript?.associatedOnly) {
|
|
152
|
+
return [];
|
|
153
|
+
}
|
|
137
154
|
if (serviceScript) {
|
|
138
|
-
const generatePosition = (0, transform_1.toGeneratedOffset)(
|
|
155
|
+
const generatePosition = (0, transform_1.toGeneratedOffset)(language, serviceScript, targetScript, position, language_core_1.isCallHierarchyEnabled);
|
|
139
156
|
if (generatePosition !== undefined) {
|
|
140
|
-
calls = provideCallHierarchyIncomingCalls(
|
|
157
|
+
calls = provideCallHierarchyIncomingCalls(targetScript.id, generatePosition);
|
|
141
158
|
}
|
|
142
159
|
}
|
|
143
160
|
else {
|
|
@@ -158,9 +175,12 @@ function decorateLanguageService(language, languageService) {
|
|
|
158
175
|
languageService.provideCallHierarchyOutgoingCalls = (filePath, position) => {
|
|
159
176
|
let calls = [];
|
|
160
177
|
const fileName = filePath.replace(windowsPathReg, '/');
|
|
161
|
-
const [serviceScript,
|
|
178
|
+
const [serviceScript, targetScript, sourceScript] = (0, utils_1.getServiceScript)(language, fileName);
|
|
179
|
+
if (targetScript?.associatedOnly) {
|
|
180
|
+
return [];
|
|
181
|
+
}
|
|
162
182
|
if (serviceScript) {
|
|
163
|
-
const generatePosition = (0, transform_1.toGeneratedOffset)(
|
|
183
|
+
const generatePosition = (0, transform_1.toGeneratedOffset)(language, serviceScript, targetScript, position, language_core_1.isCallHierarchyEnabled);
|
|
164
184
|
if (generatePosition !== undefined) {
|
|
165
185
|
calls = provideCallHierarchyOutgoingCalls(fileName, generatePosition);
|
|
166
186
|
}
|
|
@@ -172,8 +192,8 @@ function decorateLanguageService(language, languageService) {
|
|
|
172
192
|
.map(call => {
|
|
173
193
|
const to = (0, transform_1.transformCallHierarchyItem)(language, call.to, language_core_1.isCallHierarchyEnabled);
|
|
174
194
|
const fromSpans = call.fromSpans
|
|
175
|
-
.map(span =>
|
|
176
|
-
? (0, transform_1.transformTextSpan)(sourceScript,
|
|
195
|
+
.map(span => serviceScript
|
|
196
|
+
? (0, transform_1.transformTextSpan)(sourceScript, language, serviceScript, span, language_core_1.isCallHierarchyEnabled)?.[1]
|
|
177
197
|
: span)
|
|
178
198
|
.filter(utils_1.notEmpty);
|
|
179
199
|
return {
|
|
@@ -184,27 +204,24 @@ function decorateLanguageService(language, languageService) {
|
|
|
184
204
|
};
|
|
185
205
|
languageService.organizeImports = (args, formatOptions, preferences) => {
|
|
186
206
|
const unresolved = organizeImports(args, formatOptions, preferences);
|
|
187
|
-
|
|
188
|
-
.map(changes => (0, transform_1.transformFileTextChanges)(language, changes, language_core_1.isCodeActionsEnabled))
|
|
189
|
-
.filter(utils_1.notEmpty);
|
|
190
|
-
return resolved;
|
|
207
|
+
return (0, transform_1.transformFileTextChanges)(language, unresolved, language_core_1.isCodeActionsEnabled);
|
|
191
208
|
};
|
|
192
209
|
languageService.getQuickInfoAtPosition = (filePath, position) => {
|
|
193
210
|
const fileName = filePath.replace(windowsPathReg, '/');
|
|
194
|
-
const [serviceScript,
|
|
211
|
+
const [serviceScript, targetScript, sourceScript] = (0, utils_1.getServiceScript)(language, fileName);
|
|
212
|
+
if (targetScript?.associatedOnly) {
|
|
213
|
+
return undefined;
|
|
214
|
+
}
|
|
195
215
|
if (serviceScript) {
|
|
196
216
|
const infos = [];
|
|
197
|
-
for (const [generatePosition
|
|
198
|
-
|
|
199
|
-
continue;
|
|
200
|
-
}
|
|
201
|
-
const info = getQuickInfoAtPosition(fileName, generatePosition);
|
|
217
|
+
for (const [generatePosition] of (0, transform_1.toGeneratedOffsets)(language, serviceScript, targetScript, position, language_core_1.isHoverEnabled)) {
|
|
218
|
+
const info = getQuickInfoAtPosition(targetScript.id, generatePosition);
|
|
202
219
|
if (info) {
|
|
203
|
-
const textSpan = (0, transform_1.transformTextSpan)(sourceScript,
|
|
220
|
+
const textSpan = (0, transform_1.transformTextSpan)(sourceScript, language, serviceScript, info.textSpan, language_core_1.isHoverEnabled)?.[1];
|
|
204
221
|
if (textSpan) {
|
|
205
222
|
infos.push({
|
|
206
223
|
...info,
|
|
207
|
-
textSpan,
|
|
224
|
+
textSpan: textSpan,
|
|
208
225
|
});
|
|
209
226
|
}
|
|
210
227
|
}
|
|
@@ -254,13 +271,16 @@ function decorateLanguageService(language, languageService) {
|
|
|
254
271
|
};
|
|
255
272
|
languageService.getSignatureHelpItems = (filePath, position, options) => {
|
|
256
273
|
const fileName = filePath.replace(windowsPathReg, '/');
|
|
257
|
-
const [serviceScript,
|
|
274
|
+
const [serviceScript, targetScript, sourceScript] = (0, utils_1.getServiceScript)(language, fileName);
|
|
275
|
+
if (targetScript?.associatedOnly) {
|
|
276
|
+
return undefined;
|
|
277
|
+
}
|
|
258
278
|
if (serviceScript) {
|
|
259
|
-
const generatePosition = (0, transform_1.toGeneratedOffset)(
|
|
279
|
+
const generatePosition = (0, transform_1.toGeneratedOffset)(language, serviceScript, targetScript, position, language_core_1.isSignatureHelpEnabled);
|
|
260
280
|
if (generatePosition !== undefined) {
|
|
261
|
-
const result = getSignatureHelpItems(
|
|
281
|
+
const result = getSignatureHelpItems(targetScript.id, generatePosition, options);
|
|
262
282
|
if (result) {
|
|
263
|
-
const applicableSpan = (0, transform_1.transformTextSpan)(sourceScript,
|
|
283
|
+
const applicableSpan = (0, transform_1.transformTextSpan)(sourceScript, language, serviceScript, result.applicableSpan, language_core_1.isSignatureHelpEnabled)?.[1];
|
|
264
284
|
if (applicableSpan) {
|
|
265
285
|
return {
|
|
266
286
|
...result,
|
|
@@ -276,7 +296,7 @@ function decorateLanguageService(language, languageService) {
|
|
|
276
296
|
};
|
|
277
297
|
languageService.getDocumentHighlights = (filePath, position, filesToSearch) => {
|
|
278
298
|
const fileName = filePath.replace(windowsPathReg, '/');
|
|
279
|
-
const unresolved = linkedCodeFeatureWorker(fileName, position, language_core_1.isHighlightEnabled, position => getDocumentHighlights(fileName, position, filesToSearch), function* (result) {
|
|
299
|
+
const unresolved = linkedCodeFeatureWorker(fileName, position, language_core_1.isHighlightEnabled, (fileName, position) => getDocumentHighlights(fileName, position, filesToSearch), function* (result) {
|
|
280
300
|
for (const ref of result) {
|
|
281
301
|
for (const reference of ref.highlightSpans) {
|
|
282
302
|
yield [reference.fileName ?? ref.fileName, reference.textSpan.start];
|
|
@@ -290,7 +310,7 @@ function decorateLanguageService(language, languageService) {
|
|
|
290
310
|
...highlights,
|
|
291
311
|
highlightSpans: highlights.highlightSpans
|
|
292
312
|
.map(span => {
|
|
293
|
-
const textSpan = (0, transform_1.transformSpan)(language, span.fileName ?? highlights.fileName, span.textSpan, language_core_1.isHighlightEnabled)
|
|
313
|
+
const { textSpan } = (0, transform_1.transformSpan)(language, span.fileName ?? highlights.fileName, span.textSpan, language_core_1.isHighlightEnabled) ?? {};
|
|
294
314
|
if (textSpan) {
|
|
295
315
|
return {
|
|
296
316
|
...span,
|
|
@@ -306,9 +326,12 @@ function decorateLanguageService(language, languageService) {
|
|
|
306
326
|
};
|
|
307
327
|
languageService.getApplicableRefactors = (filePath, positionOrRange, preferences, triggerReason, kind, includeInteractiveActions) => {
|
|
308
328
|
const fileName = filePath.replace(windowsPathReg, '/');
|
|
309
|
-
const [serviceScript,
|
|
329
|
+
const [serviceScript, targetScript] = (0, utils_1.getServiceScript)(language, fileName);
|
|
330
|
+
if (targetScript?.associatedOnly) {
|
|
331
|
+
return [];
|
|
332
|
+
}
|
|
310
333
|
if (serviceScript) {
|
|
311
|
-
const generatePosition = (0, transform_1.toGeneratedOffset)(
|
|
334
|
+
const generatePosition = (0, transform_1.toGeneratedOffset)(language, serviceScript, targetScript, typeof positionOrRange === 'number' ? positionOrRange : positionOrRange.pos, language_core_1.isCodeActionsEnabled);
|
|
312
335
|
if (generatePosition !== undefined) {
|
|
313
336
|
const por = typeof positionOrRange === 'number'
|
|
314
337
|
? generatePosition
|
|
@@ -316,7 +339,7 @@ function decorateLanguageService(language, languageService) {
|
|
|
316
339
|
pos: generatePosition,
|
|
317
340
|
end: generatePosition + positionOrRange.end - positionOrRange.pos,
|
|
318
341
|
};
|
|
319
|
-
return getApplicableRefactors(
|
|
342
|
+
return getApplicableRefactors(targetScript.id, por, preferences, triggerReason, kind, includeInteractiveActions);
|
|
320
343
|
}
|
|
321
344
|
return [];
|
|
322
345
|
}
|
|
@@ -327,9 +350,12 @@ function decorateLanguageService(language, languageService) {
|
|
|
327
350
|
languageService.getEditsForRefactor = (filePath, formatOptions, positionOrRange, refactorName, actionName, preferences) => {
|
|
328
351
|
let edits;
|
|
329
352
|
const fileName = filePath.replace(windowsPathReg, '/');
|
|
330
|
-
const [serviceScript,
|
|
353
|
+
const [serviceScript, targetScript] = (0, utils_1.getServiceScript)(language, fileName);
|
|
354
|
+
if (targetScript?.associatedOnly) {
|
|
355
|
+
return undefined;
|
|
356
|
+
}
|
|
331
357
|
if (serviceScript) {
|
|
332
|
-
const generatePosition = (0, transform_1.toGeneratedOffset)(
|
|
358
|
+
const generatePosition = (0, transform_1.toGeneratedOffset)(language, serviceScript, targetScript, typeof positionOrRange === 'number'
|
|
333
359
|
? positionOrRange
|
|
334
360
|
: positionOrRange.pos, language_core_1.isCodeActionsEnabled);
|
|
335
361
|
if (generatePosition !== undefined) {
|
|
@@ -339,31 +365,32 @@ function decorateLanguageService(language, languageService) {
|
|
|
339
365
|
pos: generatePosition,
|
|
340
366
|
end: generatePosition + positionOrRange.end - positionOrRange.pos,
|
|
341
367
|
};
|
|
342
|
-
edits = getEditsForRefactor(
|
|
368
|
+
edits = getEditsForRefactor(targetScript.id, formatOptions, por, refactorName, actionName, preferences);
|
|
343
369
|
}
|
|
344
370
|
}
|
|
345
371
|
else {
|
|
346
372
|
edits = getEditsForRefactor(fileName, formatOptions, positionOrRange, refactorName, actionName, preferences);
|
|
347
373
|
}
|
|
348
374
|
if (edits) {
|
|
349
|
-
edits.edits = edits.edits
|
|
350
|
-
.map(edit => (0, transform_1.transformFileTextChanges)(language, edit, language_core_1.isCodeActionsEnabled))
|
|
351
|
-
.filter(utils_1.notEmpty);
|
|
375
|
+
edits.edits = (0, transform_1.transformFileTextChanges)(language, edits.edits, language_core_1.isCodeActionsEnabled);
|
|
352
376
|
return edits;
|
|
353
377
|
}
|
|
354
378
|
};
|
|
355
379
|
languageService.getRenameInfo = (filePath, position, options) => {
|
|
356
380
|
const fileName = filePath.replace(windowsPathReg, '/');
|
|
357
|
-
const [serviceScript,
|
|
381
|
+
const [serviceScript, targetScript, sourceScript] = (0, utils_1.getServiceScript)(language, fileName);
|
|
382
|
+
if (targetScript?.associatedOnly) {
|
|
383
|
+
return {
|
|
384
|
+
canRename: false,
|
|
385
|
+
localizedErrorMessage: "Cannot rename"
|
|
386
|
+
};
|
|
387
|
+
}
|
|
358
388
|
if (serviceScript) {
|
|
359
389
|
let failed;
|
|
360
|
-
for (const [generateOffset
|
|
361
|
-
|
|
362
|
-
continue;
|
|
363
|
-
}
|
|
364
|
-
const info = getRenameInfo(fileName, generateOffset, options);
|
|
390
|
+
for (const [generateOffset] of (0, transform_1.toGeneratedOffsets)(language, serviceScript, targetScript, position, language_core_1.isRenameEnabled)) {
|
|
391
|
+
const info = getRenameInfo(targetScript.id, generateOffset, options);
|
|
365
392
|
if (info.canRename) {
|
|
366
|
-
const span = (0, transform_1.transformTextSpan)(sourceScript,
|
|
393
|
+
const span = (0, transform_1.transformTextSpan)(sourceScript, language, serviceScript, info.triggerSpan, language_core_1.isRenameEnabled)?.[1];
|
|
367
394
|
if (span) {
|
|
368
395
|
info.triggerSpan = span;
|
|
369
396
|
return info;
|
|
@@ -388,29 +415,39 @@ function decorateLanguageService(language, languageService) {
|
|
|
388
415
|
languageService.getCodeFixesAtPosition = (filePath, start, end, errorCodes, formatOptions, preferences) => {
|
|
389
416
|
let fixes = [];
|
|
390
417
|
const fileName = filePath.replace(windowsPathReg, '/');
|
|
391
|
-
const [serviceScript,
|
|
418
|
+
const [serviceScript, targetScript] = (0, utils_1.getServiceScript)(language, fileName);
|
|
419
|
+
if (targetScript?.associatedOnly) {
|
|
420
|
+
return [];
|
|
421
|
+
}
|
|
392
422
|
if (serviceScript) {
|
|
393
|
-
const generateStart = (0, transform_1.toGeneratedOffset)(
|
|
394
|
-
const generateEnd = (0, transform_1.toGeneratedOffset)(
|
|
423
|
+
const generateStart = (0, transform_1.toGeneratedOffset)(language, serviceScript, targetScript, start, language_core_1.isCodeActionsEnabled);
|
|
424
|
+
const generateEnd = (0, transform_1.toGeneratedOffset)(language, serviceScript, targetScript, end, language_core_1.isCodeActionsEnabled);
|
|
395
425
|
if (generateStart !== undefined && generateEnd !== undefined) {
|
|
396
|
-
fixes = getCodeFixesAtPosition(
|
|
426
|
+
fixes = getCodeFixesAtPosition(targetScript.id, generateStart, generateEnd, errorCodes, formatOptions, preferences);
|
|
397
427
|
}
|
|
398
428
|
}
|
|
399
429
|
else {
|
|
400
430
|
fixes = getCodeFixesAtPosition(fileName, start, end, errorCodes, formatOptions, preferences);
|
|
401
431
|
}
|
|
402
432
|
fixes = fixes.map(fix => {
|
|
403
|
-
fix.changes =
|
|
433
|
+
fix.changes = (0, transform_1.transformFileTextChanges)(language, fix.changes, language_core_1.isCodeActionsEnabled);
|
|
404
434
|
return fix;
|
|
405
435
|
});
|
|
406
436
|
return fixes;
|
|
407
437
|
};
|
|
408
438
|
languageService.getEncodedSemanticClassifications = (filePath, span, format) => {
|
|
409
439
|
const fileName = filePath.replace(windowsPathReg, '/');
|
|
410
|
-
const [serviceScript,
|
|
440
|
+
const [serviceScript, targetScript, sourceScript] = (0, utils_1.getServiceScript)(language, fileName);
|
|
441
|
+
if (targetScript?.associatedOnly) {
|
|
442
|
+
return {
|
|
443
|
+
spans: [],
|
|
444
|
+
endOfLineState: 0
|
|
445
|
+
};
|
|
446
|
+
}
|
|
411
447
|
if (serviceScript) {
|
|
412
448
|
let start;
|
|
413
449
|
let end;
|
|
450
|
+
const map = language.maps.get(serviceScript.code, targetScript);
|
|
414
451
|
for (const mapping of map.mappings) {
|
|
415
452
|
// TODO reuse the logic from language service
|
|
416
453
|
if ((0, language_core_1.isSemanticTokensEnabled)(mapping.data) && mapping.sourceOffsets[0] >= span.start && mapping.sourceOffsets[0] <= span.start + span.length) {
|
|
@@ -421,16 +458,23 @@ function decorateLanguageService(language, languageService) {
|
|
|
421
458
|
}
|
|
422
459
|
}
|
|
423
460
|
start ??= 0;
|
|
424
|
-
end ??=
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
461
|
+
end ??= targetScript.snapshot.getLength();
|
|
462
|
+
const mappingOffset = (0, transform_1.getMappingOffset)(language, serviceScript);
|
|
463
|
+
start += mappingOffset;
|
|
464
|
+
end += mappingOffset;
|
|
465
|
+
const result = getEncodedSemanticClassifications(targetScript.id, { start, length: end - start }, format);
|
|
428
466
|
const spans = [];
|
|
429
467
|
for (let i = 0; i < result.spans.length; i += 3) {
|
|
430
|
-
const sourceStart
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
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)) {
|
|
470
|
+
if (sourceStart[0] === sourceEnd[0] && sourceEnd[1] >= sourceStart[1]) {
|
|
471
|
+
spans.push(sourceStart[1], sourceEnd[1] - sourceStart[1], result.spans[i + 2]);
|
|
472
|
+
break;
|
|
473
|
+
}
|
|
474
|
+
}
|
|
475
|
+
if (spans.length) {
|
|
476
|
+
break;
|
|
477
|
+
}
|
|
434
478
|
}
|
|
435
479
|
}
|
|
436
480
|
result.spans = spans;
|
|
@@ -442,25 +486,37 @@ function decorateLanguageService(language, languageService) {
|
|
|
442
486
|
};
|
|
443
487
|
languageService.getSyntacticDiagnostics = filePath => {
|
|
444
488
|
const fileName = filePath.replace(windowsPathReg, '/');
|
|
489
|
+
const [_serviceScript, targetScript, sourceScript] = (0, utils_1.getServiceScript)(language, fileName);
|
|
490
|
+
if (targetScript?.associatedOnly) {
|
|
491
|
+
return [];
|
|
492
|
+
}
|
|
445
493
|
return getSyntacticDiagnostics(fileName)
|
|
446
|
-
.map(d => (0, transform_1.transformDiagnostic)(language, d, false))
|
|
494
|
+
.map(d => (0, transform_1.transformDiagnostic)(sourceScript, language, d, languageService.getProgram(), false))
|
|
447
495
|
.filter(utils_1.notEmpty);
|
|
448
496
|
};
|
|
449
497
|
languageService.getSemanticDiagnostics = filePath => {
|
|
450
498
|
const fileName = filePath.replace(windowsPathReg, '/');
|
|
499
|
+
const [_serviceScript, targetScript, sourceScript] = (0, utils_1.getServiceScript)(language, fileName);
|
|
500
|
+
if (targetScript?.associatedOnly) {
|
|
501
|
+
return [];
|
|
502
|
+
}
|
|
451
503
|
return getSemanticDiagnostics(fileName)
|
|
452
|
-
.map(d => (0, transform_1.transformDiagnostic)(language, d, false))
|
|
504
|
+
.map(d => (0, transform_1.transformDiagnostic)(sourceScript, language, d, languageService.getProgram(), false))
|
|
453
505
|
.filter(utils_1.notEmpty);
|
|
454
506
|
};
|
|
455
507
|
languageService.getSuggestionDiagnostics = filePath => {
|
|
456
508
|
const fileName = filePath.replace(windowsPathReg, '/');
|
|
509
|
+
const [_serviceScript, targetScript, sourceScript] = (0, utils_1.getServiceScript)(language, fileName);
|
|
510
|
+
if (targetScript?.associatedOnly) {
|
|
511
|
+
return [];
|
|
512
|
+
}
|
|
457
513
|
return getSuggestionDiagnostics(fileName)
|
|
458
|
-
.map(d => (0, transform_1.transformDiagnostic)(language, d, false))
|
|
514
|
+
.map(d => (0, transform_1.transformDiagnostic)(sourceScript, language, d, languageService.getProgram(), false))
|
|
459
515
|
.filter(utils_1.notEmpty);
|
|
460
516
|
};
|
|
461
517
|
languageService.getDefinitionAndBoundSpan = (filePath, position) => {
|
|
462
518
|
const fileName = filePath.replace(windowsPathReg, '/');
|
|
463
|
-
const unresolved = linkedCodeFeatureWorker(fileName, position, language_core_1.isDefinitionEnabled, position => getDefinitionAndBoundSpan(fileName, position), function* (result) {
|
|
519
|
+
const unresolved = linkedCodeFeatureWorker(fileName, position, language_core_1.isDefinitionEnabled, (fileName, position) => getDefinitionAndBoundSpan(fileName, position), function* (result) {
|
|
464
520
|
for (const ref of result.definitions ?? []) {
|
|
465
521
|
yield [ref.fileName, ref.textSpan.start];
|
|
466
522
|
}
|
|
@@ -484,7 +540,7 @@ function decorateLanguageService(language, languageService) {
|
|
|
484
540
|
};
|
|
485
541
|
languageService.findReferences = (filePath, position) => {
|
|
486
542
|
const fileName = filePath.replace(windowsPathReg, '/');
|
|
487
|
-
const unresolved = linkedCodeFeatureWorker(fileName, position, language_core_1.isReferencesEnabled, position => findReferences(fileName, position), function* (result) {
|
|
543
|
+
const unresolved = linkedCodeFeatureWorker(fileName, position, language_core_1.isReferencesEnabled, (fileName, position) => findReferences(fileName, position), function* (result) {
|
|
488
544
|
for (const ref of result) {
|
|
489
545
|
for (const reference of ref.references) {
|
|
490
546
|
yield [reference.fileName, reference.textSpan.start];
|
|
@@ -506,7 +562,7 @@ function decorateLanguageService(language, languageService) {
|
|
|
506
562
|
};
|
|
507
563
|
languageService.getDefinitionAtPosition = (filePath, position) => {
|
|
508
564
|
const fileName = filePath.replace(windowsPathReg, '/');
|
|
509
|
-
const unresolved = linkedCodeFeatureWorker(fileName, position, language_core_1.isDefinitionEnabled, position => getDefinitionAtPosition(fileName, position), function* (result) {
|
|
565
|
+
const unresolved = linkedCodeFeatureWorker(fileName, position, language_core_1.isDefinitionEnabled, (fileName, position) => getDefinitionAtPosition(fileName, position), function* (result) {
|
|
510
566
|
for (const ref of result) {
|
|
511
567
|
yield [ref.fileName, ref.textSpan.start];
|
|
512
568
|
}
|
|
@@ -519,7 +575,7 @@ function decorateLanguageService(language, languageService) {
|
|
|
519
575
|
};
|
|
520
576
|
languageService.getTypeDefinitionAtPosition = (filePath, position) => {
|
|
521
577
|
const fileName = filePath.replace(windowsPathReg, '/');
|
|
522
|
-
const unresolved = linkedCodeFeatureWorker(fileName, position, language_core_1.isTypeDefinitionEnabled, position => getTypeDefinitionAtPosition(fileName, position), function* (result) {
|
|
578
|
+
const unresolved = linkedCodeFeatureWorker(fileName, position, language_core_1.isTypeDefinitionEnabled, (fileName, position) => getTypeDefinitionAtPosition(fileName, position), function* (result) {
|
|
523
579
|
for (const ref of result) {
|
|
524
580
|
yield [ref.fileName, ref.textSpan.start];
|
|
525
581
|
}
|
|
@@ -532,7 +588,7 @@ function decorateLanguageService(language, languageService) {
|
|
|
532
588
|
};
|
|
533
589
|
languageService.getImplementationAtPosition = (filePath, position) => {
|
|
534
590
|
const fileName = filePath.replace(windowsPathReg, '/');
|
|
535
|
-
const unresolved = linkedCodeFeatureWorker(fileName, position, language_core_1.isImplementationEnabled, position => getImplementationAtPosition(fileName, position), function* (result) {
|
|
591
|
+
const unresolved = linkedCodeFeatureWorker(fileName, position, language_core_1.isImplementationEnabled, (fileName, position) => getImplementationAtPosition(fileName, position), function* (result) {
|
|
536
592
|
for (const ref of result) {
|
|
537
593
|
yield [ref.fileName, ref.textSpan.start];
|
|
538
594
|
}
|
|
@@ -545,7 +601,7 @@ function decorateLanguageService(language, languageService) {
|
|
|
545
601
|
};
|
|
546
602
|
languageService.findRenameLocations = (filePath, position, findInStrings, findInComments, preferences) => {
|
|
547
603
|
const fileName = filePath.replace(windowsPathReg, '/');
|
|
548
|
-
const unresolved = linkedCodeFeatureWorker(fileName, position, language_core_1.isRenameEnabled, position => findRenameLocations(fileName, position, findInStrings, findInComments, preferences), function* (result) {
|
|
604
|
+
const unresolved = linkedCodeFeatureWorker(fileName, position, language_core_1.isRenameEnabled, (fileName, position) => findRenameLocations(fileName, position, findInStrings, findInComments, preferences), function* (result) {
|
|
549
605
|
for (const ref of result) {
|
|
550
606
|
yield [ref.fileName, ref.textSpan.start];
|
|
551
607
|
}
|
|
@@ -558,7 +614,7 @@ function decorateLanguageService(language, languageService) {
|
|
|
558
614
|
};
|
|
559
615
|
languageService.getReferencesAtPosition = (filePath, position) => {
|
|
560
616
|
const fileName = filePath.replace(windowsPathReg, '/');
|
|
561
|
-
const unresolved = linkedCodeFeatureWorker(fileName, position, language_core_1.isReferencesEnabled, position => getReferencesAtPosition(fileName, position), function* (result) {
|
|
617
|
+
const unresolved = linkedCodeFeatureWorker(fileName, position, language_core_1.isReferencesEnabled, (fileName, position) => getReferencesAtPosition(fileName, position), function* (result) {
|
|
562
618
|
for (const ref of result) {
|
|
563
619
|
yield [ref.fileName, ref.textSpan.start];
|
|
564
620
|
}
|
|
@@ -571,14 +627,14 @@ function decorateLanguageService(language, languageService) {
|
|
|
571
627
|
};
|
|
572
628
|
languageService.getCompletionsAtPosition = (filePath, position, options, formattingSettings) => {
|
|
573
629
|
const fileName = filePath.replace(windowsPathReg, '/');
|
|
574
|
-
const [serviceScript,
|
|
630
|
+
const [serviceScript, targetScript, sourceScript] = (0, utils_1.getServiceScript)(language, fileName);
|
|
631
|
+
if (targetScript?.associatedOnly) {
|
|
632
|
+
return undefined;
|
|
633
|
+
}
|
|
575
634
|
if (serviceScript) {
|
|
576
635
|
const results = [];
|
|
577
|
-
for (const [generatedOffset, mapping] of (0, transform_1.toGeneratedOffsets)(
|
|
578
|
-
|
|
579
|
-
continue;
|
|
580
|
-
}
|
|
581
|
-
const result = getCompletionsAtPosition(fileName, generatedOffset, options, formattingSettings);
|
|
636
|
+
for (const [generatedOffset, mapping] of (0, transform_1.toGeneratedOffsets)(language, serviceScript, targetScript, position, language_core_1.isCompletionEnabled)) {
|
|
637
|
+
const result = getCompletionsAtPosition(targetScript.id, generatedOffset, options, formattingSettings);
|
|
582
638
|
if (!result) {
|
|
583
639
|
continue;
|
|
584
640
|
}
|
|
@@ -586,10 +642,10 @@ function decorateLanguageService(language, languageService) {
|
|
|
586
642
|
result.entries = result.entries.filter(entry => !!entry.sourceDisplay);
|
|
587
643
|
}
|
|
588
644
|
for (const entry of result.entries) {
|
|
589
|
-
entry.replacementSpan = entry.replacementSpan && (0, transform_1.transformTextSpan)(sourceScript,
|
|
645
|
+
entry.replacementSpan = entry.replacementSpan && (0, transform_1.transformTextSpan)(sourceScript, language, serviceScript, entry.replacementSpan, language_core_1.isCompletionEnabled)?.[1];
|
|
590
646
|
}
|
|
591
647
|
result.optionalReplacementSpan = result.optionalReplacementSpan
|
|
592
|
-
&& (0, transform_1.transformTextSpan)(sourceScript,
|
|
648
|
+
&& (0, transform_1.transformTextSpan)(sourceScript, language, serviceScript, result.optionalReplacementSpan, language_core_1.isCompletionEnabled)?.[1];
|
|
593
649
|
const isAdditional = typeof mapping.data.completion === 'object' && mapping.data.completion.isAdditional;
|
|
594
650
|
if (isAdditional) {
|
|
595
651
|
results.push(result);
|
|
@@ -614,11 +670,14 @@ function decorateLanguageService(language, languageService) {
|
|
|
614
670
|
languageService.getCompletionEntryDetails = (filePath, position, entryName, formatOptions, source, preferences, data) => {
|
|
615
671
|
let details;
|
|
616
672
|
const fileName = filePath.replace(windowsPathReg, '/');
|
|
617
|
-
const [serviceScript,
|
|
673
|
+
const [serviceScript, targetScript] = (0, utils_1.getServiceScript)(language, fileName);
|
|
674
|
+
if (targetScript?.associatedOnly) {
|
|
675
|
+
return undefined;
|
|
676
|
+
}
|
|
618
677
|
if (serviceScript) {
|
|
619
|
-
const generatePosition = (0, transform_1.toGeneratedOffset)(
|
|
678
|
+
const generatePosition = (0, transform_1.toGeneratedOffset)(language, serviceScript, targetScript, position, language_core_1.isCompletionEnabled);
|
|
620
679
|
if (generatePosition !== undefined) {
|
|
621
|
-
details = getCompletionEntryDetails(
|
|
680
|
+
details = getCompletionEntryDetails(targetScript.id, generatePosition, entryName, formatOptions, source, preferences, data);
|
|
622
681
|
}
|
|
623
682
|
}
|
|
624
683
|
else {
|
|
@@ -626,17 +685,21 @@ function decorateLanguageService(language, languageService) {
|
|
|
626
685
|
}
|
|
627
686
|
if (details?.codeActions) {
|
|
628
687
|
for (const codeAction of details.codeActions) {
|
|
629
|
-
codeAction.changes =
|
|
688
|
+
codeAction.changes = (0, transform_1.transformFileTextChanges)(language, codeAction.changes, language_core_1.isCompletionEnabled);
|
|
630
689
|
}
|
|
631
690
|
}
|
|
632
691
|
return details;
|
|
633
692
|
};
|
|
634
693
|
languageService.provideInlayHints = (filePath, span, preferences) => {
|
|
635
694
|
const fileName = filePath.replace(windowsPathReg, '/');
|
|
636
|
-
const [serviceScript,
|
|
695
|
+
const [serviceScript, targetScript, sourceScript] = (0, utils_1.getServiceScript)(language, fileName);
|
|
696
|
+
if (targetScript?.associatedOnly) {
|
|
697
|
+
return [];
|
|
698
|
+
}
|
|
637
699
|
if (serviceScript) {
|
|
638
700
|
let start;
|
|
639
701
|
let end;
|
|
702
|
+
const map = language.maps.get(serviceScript.code, targetScript);
|
|
640
703
|
for (const mapping of map.mappings) {
|
|
641
704
|
if ((0, language_core_1.isInlayHintsEnabled)(mapping.data) && mapping.sourceOffsets[0] >= span.start && mapping.sourceOffsets[0] <= span.start + span.length) {
|
|
642
705
|
start ??= mapping.generatedOffsets[0];
|
|
@@ -649,16 +712,17 @@ function decorateLanguageService(language, languageService) {
|
|
|
649
712
|
start = 0;
|
|
650
713
|
end = 0;
|
|
651
714
|
}
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
715
|
+
const mappingOffset = (0, transform_1.getMappingOffset)(language, serviceScript);
|
|
716
|
+
start += mappingOffset;
|
|
717
|
+
end += mappingOffset;
|
|
718
|
+
const result = provideInlayHints(targetScript.id, { start, length: end - start }, preferences);
|
|
655
719
|
const hints = [];
|
|
656
720
|
for (const hint of result) {
|
|
657
|
-
const sourcePosition = (0, transform_1.toSourceOffset)(sourceScript,
|
|
721
|
+
const sourcePosition = (0, transform_1.toSourceOffset)(sourceScript, language, serviceScript, hint.position, language_core_1.isInlayHintsEnabled);
|
|
658
722
|
if (sourcePosition !== undefined) {
|
|
659
723
|
hints.push({
|
|
660
724
|
...hint,
|
|
661
|
-
position: sourcePosition,
|
|
725
|
+
position: sourcePosition[1],
|
|
662
726
|
});
|
|
663
727
|
}
|
|
664
728
|
}
|
|
@@ -679,12 +743,10 @@ function decorateLanguageService(language, languageService) {
|
|
|
679
743
|
function linkedCodeFeatureWorker(fileName, position, filter, worker, getLinkedCodes) {
|
|
680
744
|
const results = [];
|
|
681
745
|
const processedFilePositions = new Set();
|
|
682
|
-
const [serviceScript,
|
|
746
|
+
const [serviceScript, targetScript] = (0, utils_1.getServiceScript)(language, fileName);
|
|
683
747
|
if (serviceScript) {
|
|
684
|
-
for (const [generatedOffset
|
|
685
|
-
|
|
686
|
-
process(fileName, generatedOffset + sourceScript.snapshot.getLength());
|
|
687
|
-
}
|
|
748
|
+
for (const [generatedOffset] of (0, transform_1.toGeneratedOffsets)(language, serviceScript, targetScript, position, filter)) {
|
|
749
|
+
process(targetScript.id, generatedOffset);
|
|
688
750
|
}
|
|
689
751
|
}
|
|
690
752
|
else {
|
|
@@ -696,23 +758,24 @@ function decorateLanguageService(language, languageService) {
|
|
|
696
758
|
return;
|
|
697
759
|
}
|
|
698
760
|
processedFilePositions.add(fileName + ':' + position);
|
|
699
|
-
const result = worker(position);
|
|
761
|
+
const result = worker(fileName, position);
|
|
700
762
|
if (!result) {
|
|
701
763
|
return;
|
|
702
764
|
}
|
|
703
765
|
results.push(result);
|
|
704
766
|
for (const ref of getLinkedCodes(result)) {
|
|
705
767
|
processedFilePositions.add(ref[0] + ':' + ref[1]);
|
|
706
|
-
const [
|
|
707
|
-
if (!
|
|
768
|
+
const [serviceScript] = (0, utils_1.getServiceScript)(language, ref[0]);
|
|
769
|
+
if (!serviceScript) {
|
|
708
770
|
continue;
|
|
709
771
|
}
|
|
710
|
-
const linkedCodeMap = language.linkedCodeMaps.get(
|
|
772
|
+
const linkedCodeMap = language.linkedCodeMaps.get(serviceScript.code);
|
|
711
773
|
if (!linkedCodeMap) {
|
|
712
774
|
continue;
|
|
713
775
|
}
|
|
714
|
-
|
|
715
|
-
|
|
776
|
+
const mappingOffset = (0, transform_1.getMappingOffset)(language, serviceScript);
|
|
777
|
+
for (const linkedCodeOffset of linkedCodeMap.getLinkedOffsets(ref[1] - mappingOffset)) {
|
|
778
|
+
process(ref[0], linkedCodeOffset + mappingOffset);
|
|
716
779
|
}
|
|
717
780
|
}
|
|
718
781
|
}
|