Skip to content

Commit 17deb8e

Browse files
authored
fix(typescript): correct calculation of generated span for inlay hints (#273)
1 parent e828089 commit 17deb8e

File tree

1 file changed

+5
-30
lines changed

1 file changed

+5
-30
lines changed

packages/typescript/lib/node/proxyLanguageService.ts

Lines changed: 5 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -949,39 +949,14 @@ function provideInlayHints(language: Language<string>, provideInlayHints: ts.Lan
949949
return [];
950950
}
951951
if (serviceScript) {
952-
let start: number | undefined;
953-
let end: number | undefined;
954952
const map = language.maps.get(serviceScript.code, sourceScript);
955-
for (const mapping of map.mappings) {
956-
if (!isInlayHintsEnabled(mapping.data)) {
957-
continue;
958-
}
959-
let mappingStart = mapping.sourceOffsets[0];
960-
let genStart: number | undefined;
961-
let genEnd: number | undefined;
962-
if (mappingStart >= span.start && mappingStart <= span.start + span.length) {
963-
genStart = mapping.generatedOffsets[0];
964-
genEnd = mapping.generatedOffsets[mapping.generatedOffsets.length - 1]
965-
+ (mapping.generatedLengths ?? mapping.lengths)[mapping.generatedOffsets.length - 1];
966-
} else if (mappingStart < span.start && span.start < mappingStart + mapping.lengths[0]
967-
&& mapping.sourceOffsets.length == 1
968-
&& (!mapping.generatedLengths || mapping.generatedLengths[0] === mapping.lengths[0])
969-
) {
970-
genStart = mapping.generatedOffsets[0] + span.start - mappingStart;
971-
genEnd = Math.min(genStart + span.length, mapping.generatedOffsets[0] + mapping.lengths[0]);
972-
} else {
973-
continue;
974-
}
975-
start = Math.min(start ?? genStart, genStart);
976-
end = Math.max(end ?? genEnd, genEnd);
977-
}
978-
if (start === undefined || end === undefined) {
979-
start = 0;
980-
end = 0;
953+
const mapped = findOverlapCodeRange(span.start, span.start + span.length, map, isSemanticTokensEnabled);
954+
if (!mapped) {
955+
return [];
981956
}
982957
const mappingOffset = getMappingOffset(language, serviceScript);
983-
start += mappingOffset;
984-
end += mappingOffset;
958+
const start = mapped.start + mappingOffset;
959+
const end = mapped.end + mappingOffset;
985960
const result = provideInlayHints(targetScript.id, { start, length: end - start }, preferences);
986961
const hints: ts.InlayHint[] = [];
987962
for (const hint of result) {

0 commit comments

Comments
 (0)