Sfoglia il codice sorgente

fix(compiler-sfc): expose correct range for empty blocks

Evan You 4 anni fa
parent
commit
b274b08f5f

+ 17 - 1
packages/compiler-sfc/__tests__/parse.spec.ts

@@ -111,10 +111,26 @@ h1 { color: red }
     )
   })
 
-  test('should keep template nodes with no content', () => {
+  test('should parse correct range for blocks with no content (self closing)', () => {
     const { descriptor } = parse(`<template/>`)
     expect(descriptor.template).toBeTruthy()
     expect(descriptor.template!.content).toBeFalsy()
+    expect(descriptor.template!.loc).toMatchObject({
+      start: { line: 1, column: 1, offset: 0 },
+      end: { line: 1, column: 1, offset: 0 },
+      source: ''
+    })
+  })
+
+  test('should parse correct range for blocks with no content (explicit)', () => {
+    const { descriptor } = parse(`<template></template>`)
+    expect(descriptor.template).toBeTruthy()
+    expect(descriptor.template!.content).toBeFalsy()
+    expect(descriptor.template!.loc).toMatchObject({
+      start: { line: 1, column: 11, offset: 10 },
+      end: { line: 1, column: 11, offset: 10 },
+      source: ''
+    })
   })
 
   test('should ignore other nodes with no content', () => {

+ 10 - 0
packages/compiler-sfc/src/parse.ts

@@ -305,6 +305,16 @@ function createBlock(
     start = node.children[0].loc.start
     end = node.children[node.children.length - 1].loc.end
     content = source.slice(start.offset, end.offset)
+  } else {
+    const offset = node.loc.source.indexOf(`</`)
+    if (offset > -1) {
+      start = {
+        line: start.line,
+        column: start.column + offset,
+        offset: start.offset + offset
+      }
+    }
+    end = { ...start }
   }
   const loc = {
     source: content,