From 1f898906aaf24f485ca1d992249aa2ebe55177dd Mon Sep 17 00:00:00 2001 From: Ryan Berdeen Date: Sun, 9 Apr 2023 02:01:03 -0400 Subject: [PATCH 1/2] add source map entries for all lines in formatted range --- .../src/source-maps.ts | 39 ++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/packages/chrome-devtools-formatter/src/source-maps.ts b/packages/chrome-devtools-formatter/src/source-maps.ts index cad1c8a..d262b1e 100644 --- a/packages/chrome-devtools-formatter/src/source-maps.ts +++ b/packages/chrome-devtools-formatter/src/source-maps.ts @@ -1,9 +1,10 @@ -import { Mapper } from "."; +import { Mapper, Mapping } from "."; // TODO when a range spans a newline, only the part on the first line is mapped export async function toMappings(mapper: Mapper, sourceIndex = -1) { let data = new Int32Array(1024); let len = 0; + let prev: Mapping | undefined; for (const m of mapper.iterateMappings()) { if (data.length < len + 6) { const expanded = new Int32Array(data.length * 2); @@ -11,6 +12,40 @@ export async function toMappings(mapper: Mapper, sourceIndex = -1) { data = expanded; } + /* + AAA + AAA + AAA + BBB + + AAA + AAA + ABB + + */ + + if (prev) { + const extraLines = + m.generated.line - + (prev.generated.line + 1 < m.generated.line + ? prev.generated.line + 1 + : prev.generated.line !== m.generated.line && m.generated.column !== 0 + ? prev.generated.line + : m.generated.line); + + // TODO is this only handling when the original was already formatted? + // no? at least not internally - maybe only at the end + for (let i = 0; i < extraLines; i++) { + data[len + 0] = i + prev.generated.line + 1; + data[len + 1] = 0; + data[len + 2] = sourceIndex; + data[len + 3] = i + prev.original.line + 1; + data[len + 4] = 0; + data[len + 5] = -1; + len += 6; + } + } + data[len + 0] = m.generated.line; data[len + 1] = m.generated.column; data[len + 2] = sourceIndex; @@ -18,6 +53,8 @@ export async function toMappings(mapper: Mapper, sourceIndex = -1) { data[len + 4] = m.original.column; data[len + 5] = -1; len += 6; + + prev = m; } return data.subarray(0, len); From 68ec4c7cf5e2490152f7ce94c12f300e7b6a074a Mon Sep 17 00:00:00 2001 From: Ryan Berdeen Date: Sun, 9 Apr 2023 02:03:18 -0400 Subject: [PATCH 2/2] add missing export --- packages/chrome-devtools-formatter/src/index.ts | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/packages/chrome-devtools-formatter/src/index.ts b/packages/chrome-devtools-formatter/src/index.ts index 65868ea..771ec0c 100644 --- a/packages/chrome-devtools-formatter/src/index.ts +++ b/packages/chrome-devtools-formatter/src/index.ts @@ -50,6 +50,19 @@ export async function formatWithMap( return { mapping, content: formatted.formattedContent }; } +export interface Mapping { + generated: { + line: number; + column: number; + offset: number; + }; + original: { + line: number; + column: number; + offset: number; + }; +} + export class Mapper { constructor( public original: string, @@ -83,7 +96,7 @@ export class Mapper { ); } - *iterateMappings() { + *iterateMappings(): Generator { for (let i = 0; i < this.mapping.formatted.length; i++) { const generated = this.positionToLocationFormatted( this.mapping.formatted[i]