Skip to content

Commit

Permalink
fix(template-compiler): allow comments on the root node in templates (v…
Browse files Browse the repository at this point in the history
…uejs#9408)

In SFC templates, we are allowed to add comments to the root node. If parsing with comments flag
true, we are not anymore. This ignores the root comments in case they cannot be added.

fix vuejs#9407
  • Loading branch information
elevatebart authored and Lostlover committed Dec 10, 2019
1 parent c16f928 commit 9881823
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 10 deletions.
22 changes: 13 additions & 9 deletions src/compiler/parser/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -377,16 +377,20 @@ export function parse (
}
},
comment (text: string, start, end) {
const child: ASTText = {
type: 3,
text,
isComment: true
}
if (process.env.NODE_ENV !== 'production' && options.outputSourceRange) {
child.start = start
child.end = end
// adding anyting as a sibling to the root node is forbidden
// comments should still be allowed, but ignored
if (currentParent) {
const child: ASTText = {
type: 3,
text,
isComment: true
}
if (process.env.NODE_ENV !== 'production' && options.outputSourceRange) {
child.start = start
child.end = end
}
currentParent.children.push(child)
}
currentParent.children.push(child)
}
})
return root
Expand Down
12 changes: 11 additions & 1 deletion test/unit/modules/compiler/parser.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -786,6 +786,16 @@ describe('parser', () => {
expect(ast.children[1].text).toBe('comment here')
})

// #9407
it('should parse templates with comments anywhere', () => {
const options = extend({
comments: true
}, baseOptions)
const ast = parse(`<!--comment here--><div>123</div>`, options)
expect(ast.tag).toBe('div')
expect(ast.children.length).toBe(1)
})

// #8103
it('should allow CRLFs in string interpolations', () => {
const ast = parse(`<p>{{\r\nmsg\r\n}}</p>`, baseOptions)
Expand All @@ -797,7 +807,7 @@ describe('parser', () => {
preserveWhitespace: false
}, baseOptions)

const ast = parse('<p>\n Welcome to <b>Vue.js</b> <i>world</i> \n <span>.\n Have fun!\n</span></p>', options)
const ast = parse('<p>\n Welcome to <b>Vue.js</b> <i>world</i> \n <span>.\n Have fun!\n</span></p>', options)
expect(ast.tag).toBe('p')
expect(ast.children.length).toBe(4)
expect(ast.children[0].type).toBe(3)
Expand Down

0 comments on commit 9881823

Please sign in to comment.