From 2e65ea481f74db8649df8110a031cbdc98f98c84 Mon Sep 17 00:00:00 2001 From: Evan You Date: Mon, 27 Nov 2023 14:49:13 +0800 Subject: [PATCH] fix(compiler-core): fix line/column tracking when fast forwarding --- packages/compiler-core/src/tokenizer.ts | 6 +- packages/compiler-sfc/__tests__/parse.spec.ts | 58 +++++++++++++++++-- 2 files changed, 57 insertions(+), 7 deletions(-) diff --git a/packages/compiler-core/src/tokenizer.ts b/packages/compiler-core/src/tokenizer.ts index 39b64622d..22ff504db 100644 --- a/packages/compiler-core/src/tokenizer.ts +++ b/packages/compiler-core/src/tokenizer.ts @@ -463,7 +463,11 @@ export default class Tokenizer { */ private fastForwardTo(c: number): boolean { while (++this.index < this.buffer.length) { - if (this.buffer.charCodeAt(this.index) === c) { + const cc = this.buffer.charCodeAt(this.index) + if (cc === CharCodes.NewLine) { + this.newlines.push(this.index) + } + if (cc === c) { return true } } diff --git a/packages/compiler-sfc/__tests__/parse.spec.ts b/packages/compiler-sfc/__tests__/parse.spec.ts index 7c8efdfc4..c19232a70 100644 --- a/packages/compiler-sfc/__tests__/parse.spec.ts +++ b/packages/compiler-sfc/__tests__/parse.spec.ts @@ -7,15 +7,61 @@ describe('compiler:sfc', () => { test('style block', () => { // Padding determines how many blank lines will there be before the style block const padding = Math.round(Math.random() * 10) - const style = parse( - `${'\n'.repeat(padding)}\n` - ).descriptor.styles[0] + const src = + `${'\n'.repeat(padding)}` + + ` - expect(style.map).not.toBeUndefined() + - const consumer = new SourceMapConsumer(style.map!) + + +` + const { + descriptor: { styles } + } = parse(src) + + expect(styles[0].map).not.toBeUndefined() + const consumer = new SourceMapConsumer(styles[0].map!) + const lineOffset = + src.slice(0, src.indexOf(`