From 4627f29829eff9e47ed8e0facf9d9160d8fc914c Mon Sep 17 00:00:00 2001 From: ktsn <ktsn55@gmail.com> Date: Wed, 14 Feb 2018 23:46:07 +0900 Subject: [PATCH 1/2] fix(sfc): avoid to deindent when pad option is specified --- src/sfc/parser.js | 8 ++++++-- test/unit/modules/sfc/sfc-parser.spec.js | 24 ++++++++++++++++++------ 2 files changed, 24 insertions(+), 8 deletions(-) diff --git a/src/sfc/parser.js b/src/sfc/parser.js index 868a43ca082..6223f1770c3 100644 --- a/src/sfc/parser.js +++ b/src/sfc/parser.js @@ -83,11 +83,15 @@ export function parseComponent ( function end (tag: string, start: number, end: number) { if (depth === 1 && currentBlock) { currentBlock.end = start - let text = deindent(content.slice(currentBlock.start, currentBlock.end)) + let text = content.slice(currentBlock.start, currentBlock.end) // pad content so that linters and pre-processors can output correct // line numbers in errors and warnings - if (currentBlock.type !== 'template' && options.pad) { + if (options.pad) { text = padContent(currentBlock, options.pad) + text + } else { + // avoid to deindent if pad option is specified + // to retain original source position. + text = deindent(text) } currentBlock.content = text currentBlock = null diff --git a/test/unit/modules/sfc/sfc-parser.spec.js b/test/unit/modules/sfc/sfc-parser.spec.js index 4cf6bad574a..6588a54dee6 100644 --- a/test/unit/modules/sfc/sfc-parser.spec.js +++ b/test/unit/modules/sfc/sfc-parser.spec.js @@ -71,21 +71,33 @@ describe('Single File Component parser', () => { const padLine = parseComponent(content.trim(), { pad: 'line' }) const padSpace = parseComponent(content.trim(), { pad: 'space' }) - expect(padDefault.script.content).toBe(Array(3 + 1).join('//\n') + '\nexport default {}\n') - expect(padDefault.styles[0].content).toBe(Array(6 + 1).join('\n') + '\nh1 { color: red }\n') - expect(padLine.script.content).toBe(Array(3 + 1).join('//\n') + '\nexport default {}\n') - expect(padLine.styles[0].content).toBe(Array(6 + 1).join('\n') + '\nh1 { color: red }\n') + expect(padDefault.script.content).toBe(Array(3 + 1).join('//\n') + ` + export default {} + `) + expect(padDefault.styles[0].content).toBe(Array(6 + 1).join('\n') + ` + h1 { color: red } + `) + expect(padLine.script.content).toBe(Array(3 + 1).join('//\n') + ` + export default {} + `) + expect(padLine.styles[0].content).toBe(Array(6 + 1).join('\n') + ` + h1 { color: red } + `) expect(padSpace.script.content).toBe(`<template> <div></div> </template> - <script>`.replace(/./g, ' ') + '\nexport default {}\n') + <script>`.replace(/./g, ' ') + ` + export default {} + `) expect(padSpace.styles[0].content).toBe(`<template> <div></div> </template> <script> export default {} </script> - <style>`.replace(/./g, ' ') + '\nh1 { color: red }\n') + <style>`.replace(/./g, ' ') + ` + h1 { color: red } + `) }) it('should handle template blocks with lang as special text', () => { From d9d1a5f13602c116b0702a7ceea4c4f544c40f5f Mon Sep 17 00:00:00 2001 From: ktsn <ktsn55@gmail.com> Date: Wed, 14 Feb 2018 23:53:03 +0900 Subject: [PATCH 2/2] test(sfc): add test of template block pad --- test/unit/modules/sfc/sfc-parser.spec.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/test/unit/modules/sfc/sfc-parser.spec.js b/test/unit/modules/sfc/sfc-parser.spec.js index 6588a54dee6..30a9f9e2c43 100644 --- a/test/unit/modules/sfc/sfc-parser.spec.js +++ b/test/unit/modules/sfc/sfc-parser.spec.js @@ -71,18 +71,27 @@ describe('Single File Component parser', () => { const padLine = parseComponent(content.trim(), { pad: 'line' }) const padSpace = parseComponent(content.trim(), { pad: 'space' }) + expect(padDefault.template.content).toBe(Array(1).join('\n') + ` + <div></div> + `) expect(padDefault.script.content).toBe(Array(3 + 1).join('//\n') + ` export default {} `) expect(padDefault.styles[0].content).toBe(Array(6 + 1).join('\n') + ` h1 { color: red } `) + expect(padLine.template.content).toBe(Array(1).join('\n') + ` + <div></div> + `) expect(padLine.script.content).toBe(Array(3 + 1).join('//\n') + ` export default {} `) expect(padLine.styles[0].content).toBe(Array(6 + 1).join('\n') + ` h1 { color: red } `) + expect(padSpace.template.content).toBe(`<template>`.replace(/./g, ' ') + ` + <div></div> + `) expect(padSpace.script.content).toBe(`<template> <div></div> </template>