Indexed column spans ignore section line offsets when clipping at the next section
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 72/100
- Tipo di issue
- Bug
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Attiva
- Stack tecnologico
- javascript
- Ambito
- tooling
Direzione di ricerca
Parti dallo script di riproduzione, che usa SourceMapConsumer con due sezioni indicizzate i cui offset si trovano alla riga 4. Chiama computeColumnSpans() e verifica generatedPositionFor, allGeneratedPositionsFor e eachMapping. Il bug è che il controllo del confine di sezione confronta una riga generata locale alla sezione con la riga assoluta della sezione successiva, prima che venga applicato l'offset. Il lavoro è completo quando il primo mapping termina alla colonna 9 e i test di regressione per tutte e tre le API passano, incluso un caso con un confine su una riga locale successiva.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Indexed maps whose first section has a nonzero line offset return a column span that extends into the next section on the same generated line.
Minimal reproduction on master (8c668f3):
const { SourceMapConsumer } = require("source-map");
(async () => {
const consumer = await new SourceMapConsumer({
version: 3,
sections: [
{
offset: { line: 4, column: 3 },
map: { version: 3, sources: ["first.js"], names: [], mappings: "AAAA" },
},
{
offset: { line: 4, column: 10 },
map: { version: 3, sources: ["second.js"], names: [], mappings: "AAAA" },
},
],
});
try {
consumer.computeColumnSpans();
console.log(consumer.generatedPositionFor({
source: "first.js", line: 1, column: 0,
}));
console.log(consumer.allGeneratedPositionsFor({
source: "first.js", line: 1, column: 0,
}));
consumer.eachMapping(console.log);
} finally {
consumer.destroy();
}
})();
Expected: the first mapping is at generated line 5, column 3, with an inclusive last column of 9 because the second section starts at column 10.
Actual: both position queries return lastColumn: Infinity, and eachMapping returns lastGeneratedColumn: Infinity for that mapping.
The section-boundary check compares a section-local generated line to the next section's absolute generated line before applying the line offset. The same ordering occurs in all three APIs. A boundary on a later local line is affected too; a zero line offset hides the problem.
I have a focused fix and regression tests ready. All 202 tests and lint pass with the fix; the three affected API tests fail on the original code.
- Lingua principale
- JavaScript
- Stelle
- 3.7k
- Fork
- 376
- Merge medio
- 4g 18h
- PR unite (30g)
- 1
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Nessun modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di mozilla/source-map
-
wasm-mappings fail to build with Rust 1.96+Forse già presa @MatrixNeoKozak l’ha presa 3 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
mozilla/source-map#530 ·
-
allow wasm to be bundledForse di nuovo libera Una pull request per questa issue è stata chiusa senza essere unita. Aperta
Difficoltà 4/5 3-5 giorni Idoneità per principianti 55/100
mozilla/source-map#527 ·
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 45/100
mozilla/source-map#524 · 6 commenti ·
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 25/100
mozilla/source-map#516 ·
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 30/100
mozilla/source-map#510 · 1 reazione ·
Tutte le issue di mozilla/source-map
Issue simili
-
clawsweeper:fix-shape-clear clawsweeper:queueable-fix clawsweeper:source-repro impact:ux-friction issue-rating: 🦞 diamond lobster no-stale P2
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
openclaw/openclaw-enterprise#2571 · 1 commento · 1 reazione ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
fabriziosalmi/certmate#1247 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
bradymholt/cRonstrue#427 ·
I maintainer di solito rispondono entro 1 giorno
-
internal
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
frostney/GocciaScript#1715 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
I maintainer di solito rispondono entro 2 giorni