fix misaligned line number in sourcemap (#3906)

pull/4738/head
nomnomnomnom 6 years ago
parent dbfc44d078
commit eca7f03f0c

@ -31,13 +31,16 @@ function get_context(parser: Parser, attributes: any[], start: number): string {
export default function read_script(parser: Parser, start: number, attributes: Node[]): Script { export default function read_script(parser: Parser, start: number, attributes: Node[]): Script {
const script_start = parser.index; const script_start = parser.index;
const script_end = parser.template.indexOf(script_closing_tag, script_start); const script_end = parser.template.indexOf(script_closing_tag, script_start);
const script_start_line = parser.template.slice(0, script_start).split('\n').length - 1;
if (script_end === -1) parser.error({ if (script_end === -1) parser.error({
code: `unclosed-script`, code: `unclosed-script`,
message: `<script> must have a closing tag` message: `<script> must have a closing tag`
}); });
const source = ' '.repeat(script_start) + parser.template.slice(script_start, script_end); const source = '\n'.repeat(script_start_line) + ' '.repeat(script_start - script_start_line) +
parser.template.slice(script_start, script_end);
parser.index = script_end + script_closing_tag.length; parser.index = script_end + script_closing_tag.length;
let ast: Program; let ast: Program;

@ -0,0 +1,9 @@
<!--
Multiline
comment
-->
<script>
function assertThisLine() {}
</script>
{foo.bar.baz}

@ -0,0 +1,16 @@
export function test({ assert, smc, locateInSource, locateInGenerated }) {
const expected = locateInSource( 'assertThisLine' );
const start = locateInGenerated( 'assertThisLine' );
const actual = smc.originalPositionFor({
line: start.line + 1,
column: start.column
});
assert.deepEqual( actual, {
source: 'input.svelte',
name: null,
line: expected.line + 1,
column: expected.column
});
}

@ -0,0 +1,9 @@
<script context="module">
export let first;
</script>
<script>
function assertThisLine() {}
</script>
{foo.bar.baz}

@ -0,0 +1,16 @@
export function test({ assert, smc, locateInSource, locateInGenerated }) {
const expected = locateInSource( 'assertThisLine' );
const start = locateInGenerated( 'assertThisLine' );
const actual = smc.originalPositionFor({
line: start.line + 1,
column: start.column
});
assert.deepEqual( actual, {
source: 'input.svelte',
name: null,
line: expected.line + 1,
column: expected.column
});
}
Loading…
Cancel
Save