Skip to content

Commit 2fcb374

Browse files
authored
fix(typescript): fix inlay hints mapping for large chunks of source code mapped verbatim to generated code. (#236)
1 parent e53022a commit 2fcb374

File tree

1 file changed

+21
-6
lines changed

1 file changed

+21
-6
lines changed

packages/typescript/lib/node/proxyLanguageService.ts

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -936,14 +936,29 @@ function provideInlayHints(language: Language<string>, provideInlayHints: ts.Lan
936936
if (serviceScript) {
937937
let start: number | undefined;
938938
let end: number | undefined;
939-
const map = language.maps.get(serviceScript.code, targetScript);
939+
const map = language.maps.get(serviceScript.code, sourceScript);
940940
for (const mapping of map.mappings) {
941-
if (isInlayHintsEnabled(mapping.data) && mapping.sourceOffsets[0] >= span.start && mapping.sourceOffsets[0] <= span.start + span.length) {
942-
start ??= mapping.generatedOffsets[0];
943-
end ??= mapping.generatedOffsets[mapping.generatedOffsets.length - 1];
944-
start = Math.min(start, mapping.generatedOffsets[0]);
945-
end = Math.max(end, mapping.generatedOffsets[mapping.generatedOffsets.length - 1]);
941+
if (!isInlayHintsEnabled(mapping.data)) {
942+
continue;
943+
}
944+
let mappingStart = mapping.sourceOffsets[0];
945+
let genStart: number | undefined;
946+
let genEnd: number | undefined;
947+
if (mappingStart >= span.start && mappingStart <= span.start + span.length) {
948+
genStart = mapping.generatedOffsets[0];
949+
genEnd = mapping.generatedOffsets[mapping.generatedOffsets.length - 1]
950+
+ (mapping.generatedLengths ?? mapping.lengths)[mapping.generatedOffsets.length - 1];
951+
} else if (mappingStart < span.start && span.start < mappingStart + mapping.lengths[0]
952+
&& mapping.sourceOffsets.length == 1
953+
&& (!mapping.generatedLengths || mapping.generatedLengths[0] === mapping.lengths[0])
954+
) {
955+
genStart = mapping.generatedOffsets[0] + span.start - mappingStart
956+
genEnd = Math.min(genStart + span.length, mapping.generatedOffsets[0] + mapping.lengths[0])
957+
} else {
958+
continue;
946959
}
960+
start = Math.min(start ?? genStart, genStart);
961+
end = Math.max(end ?? genEnd, genEnd);
947962
}
948963
if (start === undefined || end === undefined) {
949964
start = 0;

0 commit comments

Comments
 (0)