diff --git a/packages/compiler-sfc/__tests__/parse.spec.ts b/packages/compiler-sfc/__tests__/parse.spec.ts
index 2c640853..fff6cf3c 100644
--- a/packages/compiler-sfc/__tests__/parse.spec.ts
+++ b/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(``)
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(``)
+ 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', () => {
diff --git a/packages/compiler-sfc/src/parse.ts b/packages/compiler-sfc/src/parse.ts
index ad50baf5..7e9c2c25 100644
--- a/packages/compiler-sfc/src/parse.ts
+++ b/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,