Skip to content

Commit

Permalink
fix(typescript): fix inlay hints mapping for large chunks of source c…
Browse files Browse the repository at this point in the history
…ode mapped verbatim to generated code.
  • Loading branch information
piotrtomiak committed Aug 30, 2024
1 parent 5d328de commit ffac5f7
Showing 1 changed file with 21 additions and 6 deletions.
27 changes: 21 additions & 6 deletions packages/typescript/lib/node/proxyLanguageService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -936,14 +936,29 @@ function provideInlayHints(language: Language<string>, provideInlayHints: ts.Lan
if (serviceScript) {
let start: number | undefined;
let end: number | undefined;
const map = language.maps.get(serviceScript.code, targetScript);
const map = language.maps.get(serviceScript.code, sourceScript);
for (const mapping of map.mappings) {
if (isInlayHintsEnabled(mapping.data) && mapping.sourceOffsets[0] >= span.start && mapping.sourceOffsets[0] <= span.start + span.length) {
start ??= mapping.generatedOffsets[0];
end ??= mapping.generatedOffsets[mapping.generatedOffsets.length - 1];
start = Math.min(start, mapping.generatedOffsets[0]);
end = Math.max(end, mapping.generatedOffsets[mapping.generatedOffsets.length - 1]);
if (!isInlayHintsEnabled(mapping.data)) {
continue;
}
let mappingStart = mapping.sourceOffsets[0];
let genStart: number | undefined;
let genEnd: number | undefined;
if (mappingStart >= span.start && mappingStart <= span.start + span.length) {
genStart = mapping.generatedOffsets[0];
genEnd = mapping.generatedOffsets[mapping.generatedOffsets.length - 1]
+ (mapping.generatedLengths ?? mapping.lengths)[mapping.generatedOffsets.length - 1];
} else if (mappingStart < span.start && span.start < mappingStart + mapping.lengths[0]
&& mapping.sourceOffsets.length == 1
&& (!mapping.generatedLengths || mapping.generatedLengths[0] === mapping.lengths[0])
) {
genStart = mapping.generatedOffsets[0] + span.start - mappingStart
genEnd = genStart + span.length
} else {
continue;
}
start = Math.min(start ?? genStart, genStart);
end = Math.max(end ?? genEnd, genEnd);
}
if (start === undefined || end === undefined) {
start = 0;
Expand Down

0 comments on commit ffac5f7

Please sign in to comment.