Skip to content

Commit 5afb642

Browse files
committed
fix: improve trace remapping
1 parent e0d0e18 commit 5afb642

File tree

3 files changed

+24
-10
lines changed

3 files changed

+24
-10
lines changed

.changeset/smooth-olives-drum.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
"@marko/language-tools": patch
3+
"@marko/type-check": patch
4+
---
5+
6+
Expose source/generated range helpers and use that when remapping generated traces in mtc.

packages/language-tools/src/util/extractor.ts

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -102,14 +102,15 @@ export class Extracted {
102102
if (sourceOffset !== undefined) return this.parsed.positionAt(sourceOffset);
103103
}
104104

105+
sourceRangeAt(generatedStart: number, generatedEnd: number) {
106+
return this.#generatedToSource.rangeAt(generatedStart, generatedEnd);
107+
}
108+
105109
sourceLocationAt(
106110
generatedStart: number,
107111
generatedEnd: number,
108112
): Location | undefined {
109-
const sourceRange = this.#generatedToSource.rangeAt(
110-
generatedStart,
111-
generatedEnd,
112-
);
113+
const sourceRange = this.sourceRangeAt(generatedStart, generatedEnd);
113114
if (sourceRange) {
114115
return this.parsed.locationAt(sourceRange);
115116
}
@@ -126,14 +127,15 @@ export class Extracted {
126127
}
127128
}
128129

130+
generatedRangeAt(sourceStart: number, sourceEnd: number) {
131+
return this.#sourceToGenerated.rangeAt(sourceStart, sourceEnd);
132+
}
133+
129134
generatedLocationAt(
130135
sourceStart: number,
131136
sourceEnd: number,
132137
): Location | undefined {
133-
const generatedRange = this.#sourceToGenerated.rangeAt(
134-
sourceStart,
135-
sourceEnd,
136-
);
138+
const generatedRange = this.generatedRangeAt(sourceStart, sourceEnd);
137139
if (generatedRange) {
138140
return getLocation(
139141
this.#generatedLines,

packages/type-check/src/run.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -106,10 +106,16 @@ export default function run(opts: Options) {
106106
if (typeof fileName === "string") {
107107
const extracted = extractCache.get(getCanonicalFileName(fileName));
108108
if (extracted) {
109+
const sourceRange = extracted.sourceRangeAt(args.pos, args.end);
110+
if (sourceRange) {
111+
args.pos = sourceRange.start;
112+
args.end = sourceRange.end;
113+
} else {
114+
args.pos = args.end = undefined;
115+
}
116+
109117
(args as any).generatedPos = args.pos;
110118
(args as any).generatedEnd = args.end;
111-
args.pos = extracted.sourceOffsetAt(args.pos);
112-
args.end = extracted.sourceOffsetAt(args.end);
113119
}
114120
}
115121
}

0 commit comments

Comments
 (0)