diff --git a/packages/compiler-sfc/__tests__/parse.spec.ts b/packages/compiler-sfc/__tests__/parse.spec.ts index 8d1cad1a9c8..9db9bb7f3e6 100644 --- a/packages/compiler-sfc/__tests__/parse.spec.ts +++ b/packages/compiler-sfc/__tests__/parse.spec.ts @@ -167,6 +167,28 @@ h1 { color: red } expect(descriptor.script!.attrs['src']).toBe('com') }) + test('ignoreEmpty: false', () => { + const { descriptor } = parse( + `\n`, + { + ignoreEmpty: false + } + ) + expect(descriptor.script).toBeTruthy() + expect(descriptor.script!.loc).toMatchObject({ + source: '', + start: { line: 1, column: 9, offset: 8 }, + end: { line: 1, column: 9, offset: 8 } + }) + + expect(descriptor.scriptSetup).toBeTruthy() + expect(descriptor.scriptSetup!.loc).toMatchObject({ + source: '\n', + start: { line: 2, column: 15, offset: 32 }, + end: { line: 3, column: 1, offset: 33 } + }) + }) + test('nested templates', () => { const content = ` diff --git a/packages/compiler-sfc/src/parse.ts b/packages/compiler-sfc/src/parse.ts index 2650d48064b..019851efab3 100644 --- a/packages/compiler-sfc/src/parse.ts +++ b/packages/compiler-sfc/src/parse.ts @@ -18,6 +18,7 @@ export interface SFCParseOptions { sourceMap?: boolean sourceRoot?: string pad?: boolean | 'line' | 'space' + ignoreEmpty?: boolean compiler?: TemplateCompiler } @@ -104,6 +105,7 @@ export function parse( filename = 'anonymous.vue', sourceRoot = '', pad = false, + ignoreEmpty = true, compiler = CompilerDOM }: SFCParseOptions = {} ): SFCParseResult { @@ -163,7 +165,12 @@ export function parse( return } // we only want to keep the nodes that are not empty (when the tag is not a template) - if (node.tag !== 'template' && isEmpty(node) && !hasSrc(node)) { + if ( + ignoreEmpty && + node.tag !== 'template' && + isEmpty(node) && + !hasSrc(node) + ) { return } switch (node.tag) {