Ver Fonte

fix(compiler): set end location for incomplete elements (#9598)

Jason há 7 anos atrás
pai
commit
cbad54aa52

+ 1 - 1
src/compiler/parser/html-parser.js

@@ -279,7 +279,7 @@ export function parseHTML (html, options) {
         ) {
           options.warn(
             `tag <${stack[i].tag}> has no matching end tag.`,
-            { start: stack[i].start }
+            { start: stack[i].start, end: stack[i].end }
           )
         }
         if (options.end) {

+ 2 - 1
src/compiler/parser/index.js

@@ -210,7 +210,7 @@ export function parse (
     shouldDecodeNewlinesForHref: options.shouldDecodeNewlinesForHref,
     shouldKeepComment: options.comments,
     outputSourceRange: options.outputSourceRange,
-    start (tag, attrs, unary, start) {
+    start (tag, attrs, unary, start, end) {
       // check namespace.
       // inherit parent ns if there is one
       const ns = (currentParent && currentParent.ns) || platformGetTagNamespace(tag)
@@ -229,6 +229,7 @@ export function parse (
       if (process.env.NODE_ENV !== 'production') {
         if (options.outputSourceRange) {
           element.start = start
+          element.end = end
           element.rawAttrsMap = element.attrsList.reduce((cumulated, attr) => {
             cumulated[attr.name] = attr
             return cumulated

+ 5 - 0
test/unit/modules/compiler/compiler-options.spec.js

@@ -140,6 +140,11 @@ describe('compile options', () => {
     expect(compiled.errors[0].end).toBe(17)
     expect(compiled.errors[1].start).toBe(18)
     expect(compiled.errors[1].end).toBe(29)
+
+    compiled = compile('<div><span></div>', { outputSourceRange: true })
+    expect(compiled.errors.length).toBe(1)
+    expect(compiled.errors[0].start).toBe(5)
+    expect(compiled.errors[0].end).toBe(11)
   })
 
   it('should collect source range for binding keys', () => {