diff --git a/src/compiler/parse/read/script.ts b/src/compiler/parse/read/script.ts index 130c346ba1..8260894215 100644 --- a/src/compiler/parse/read/script.ts +++ b/src/compiler/parse/read/script.ts @@ -37,7 +37,8 @@ export default function read_script(parser: Parser, start: number, attributes: N message: `<script> must have a closing tag` }); - const source = ' '.repeat(script_start) + parser.template.slice(script_start, script_end); + const source = parser.template.slice(0, script_start).replace(/[^\n]/g, ' ') + + parser.template.slice(script_start, script_end); parser.index = script_end + script_closing_tag.length; let ast: Program; diff --git a/test/sourcemaps/samples/script-after-comment/input.svelte b/test/sourcemaps/samples/script-after-comment/input.svelte new file mode 100644 index 0000000000..1f06455678 --- /dev/null +++ b/test/sourcemaps/samples/script-after-comment/input.svelte @@ -0,0 +1,9 @@ +<!-- + Multiline + comment +--> +<script> + function assertThisLine() {} +</script> + +{foo.bar.baz} diff --git a/test/sourcemaps/samples/script-after-comment/test.js b/test/sourcemaps/samples/script-after-comment/test.js new file mode 100644 index 0000000000..b473970112 --- /dev/null +++ b/test/sourcemaps/samples/script-after-comment/test.js @@ -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 + }); +} diff --git a/test/sourcemaps/samples/two-scripts/input.svelte b/test/sourcemaps/samples/two-scripts/input.svelte new file mode 100644 index 0000000000..4c869827c0 --- /dev/null +++ b/test/sourcemaps/samples/two-scripts/input.svelte @@ -0,0 +1,9 @@ +<script context="module"> + export let first; +</script> + +<script> + function assertThisLine() {} +</script> + +{foo.bar.baz} diff --git a/test/sourcemaps/samples/two-scripts/test.js b/test/sourcemaps/samples/two-scripts/test.js new file mode 100644 index 0000000000..b473970112 --- /dev/null +++ b/test/sourcemaps/samples/two-scripts/test.js @@ -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 + }); +}