Skip to content

Commit

Permalink
fix(compiler-core): fix parsing <script setup> generics with >
Browse files Browse the repository at this point in the history
close #9890
  • Loading branch information
yyx990803 committed Dec 22, 2023
1 parent e7135f7 commit 7aa3f25
Show file tree
Hide file tree
Showing 5 changed files with 155 additions and 63 deletions.
88 changes: 44 additions & 44 deletions packages/compiler-core/__tests__/__snapshots__/parse.spec.ts.snap
Expand Up @@ -838,9 +838,9 @@ exports[`compiler: parse > Errors > EOF_BEFORE_TAG_NAME > <template>< 1`] = `
"codegenNode": undefined,
"loc": {
"end": {
"column": 13,
"column": 12,
"line": 1,
"offset": 12,
"offset": 11,
},
"source": "<template><",
"start": {
Expand Down Expand Up @@ -908,9 +908,9 @@ exports[`compiler: parse > Errors > EOF_BEFORE_TAG_NAME > <template></ 1`] = `
"codegenNode": undefined,
"loc": {
"end": {
"column": 14,
"column": 13,
"line": 1,
"offset": 13,
"offset": 12,
},
"source": "<template></",
"start": {
Expand Down Expand Up @@ -962,9 +962,9 @@ exports[`compiler: parse > Errors > EOF_IN_CDATA > <template><svg><![CDATA[ 1`]
"codegenNode": undefined,
"loc": {
"end": {
"column": 26,
"column": 25,
"line": 1,
"offset": 25,
"offset": 24,
},
"source": "<svg><![CDATA[",
"start": {
Expand All @@ -983,9 +983,9 @@ exports[`compiler: parse > Errors > EOF_IN_CDATA > <template><svg><![CDATA[ 1`]
"codegenNode": undefined,
"loc": {
"end": {
"column": 26,
"column": 25,
"line": 1,
"offset": 25,
"offset": 24,
},
"source": "<template><svg><![CDATA[",
"start": {
Expand Down Expand Up @@ -1055,9 +1055,9 @@ exports[`compiler: parse > Errors > EOF_IN_CDATA > <template><svg><![CDATA[cdata
"codegenNode": undefined,
"loc": {
"end": {
"column": 31,
"column": 30,
"line": 1,
"offset": 30,
"offset": 29,
},
"source": "<svg><![CDATA[cdata",
"start": {
Expand All @@ -1076,9 +1076,9 @@ exports[`compiler: parse > Errors > EOF_IN_CDATA > <template><svg><![CDATA[cdata
"codegenNode": undefined,
"loc": {
"end": {
"column": 31,
"column": 30,
"line": 1,
"offset": 30,
"offset": 29,
},
"source": "<template><svg><![CDATA[cdata",
"start": {
Expand Down Expand Up @@ -1128,9 +1128,9 @@ exports[`compiler: parse > Errors > EOF_IN_COMMENT > <template><!-- 1`] = `
"codegenNode": undefined,
"loc": {
"end": {
"column": 16,
"column": 15,
"line": 1,
"offset": 15,
"offset": 14,
},
"source": "<template><!--",
"start": {
Expand Down Expand Up @@ -1198,9 +1198,9 @@ exports[`compiler: parse > Errors > EOF_IN_COMMENT > <template><!--comment 1`] =
"codegenNode": undefined,
"loc": {
"end": {
"column": 23,
"column": 22,
"line": 1,
"offset": 22,
"offset": 21,
},
"source": "<template><!--comment",
"start": {
Expand Down Expand Up @@ -1250,9 +1250,9 @@ exports[`compiler: parse > Errors > EOF_IN_TAG > <div></div 1`] = `
"codegenNode": undefined,
"loc": {
"end": {
"column": 12,
"column": 11,
"line": 1,
"offset": 11,
"offset": 10,
},
"source": "<div></div",
"start": {
Expand Down Expand Up @@ -1302,9 +1302,9 @@ exports[`compiler: parse > Errors > EOF_IN_TAG > <template><div 1`] = `
"codegenNode": undefined,
"loc": {
"end": {
"column": 17,
"column": 16,
"line": 1,
"offset": 16,
"offset": 15,
},
"source": "<template><div ",
"start": {
Expand Down Expand Up @@ -1354,9 +1354,9 @@ exports[`compiler: parse > Errors > EOF_IN_TAG > <template><div 1`] = `
"codegenNode": undefined,
"loc": {
"end": {
"column": 16,
"column": 15,
"line": 1,
"offset": 15,
"offset": 14,
},
"source": "<template><div",
"start": {
Expand Down Expand Up @@ -1406,9 +1406,9 @@ exports[`compiler: parse > Errors > EOF_IN_TAG > <template><div id 1`] = `
"codegenNode": undefined,
"loc": {
"end": {
"column": 20,
"column": 19,
"line": 1,
"offset": 19,
"offset": 18,
},
"source": "<template><div id ",
"start": {
Expand Down Expand Up @@ -1458,9 +1458,9 @@ exports[`compiler: parse > Errors > EOF_IN_TAG > <template><div id = 1`] = `
"codegenNode": undefined,
"loc": {
"end": {
"column": 21,
"column": 20,
"line": 1,
"offset": 20,
"offset": 19,
},
"source": "<template><div id =",
"start": {
Expand Down Expand Up @@ -1510,9 +1510,9 @@ exports[`compiler: parse > Errors > EOF_IN_TAG > <template><div id 1`] = `
"codegenNode": undefined,
"loc": {
"end": {
"column": 19,
"column": 18,
"line": 1,
"offset": 18,
"offset": 17,
},
"source": "<template><div id",
"start": {
Expand Down Expand Up @@ -1562,9 +1562,9 @@ exports[`compiler: parse > Errors > EOF_IN_TAG > <template><div id="abc 1`] = `
"codegenNode": undefined,
"loc": {
"end": {
"column": 24,
"column": 23,
"line": 1,
"offset": 23,
"offset": 22,
},
"source": "<template><div id="abc",
"start": {
Expand Down Expand Up @@ -1614,9 +1614,9 @@ exports[`compiler: parse > Errors > EOF_IN_TAG > <template><div id="abc" 1`] = `
"codegenNode": undefined,
"loc": {
"end": {
"column": 25,
"column": 24,
"line": 1,
"offset": 24,
"offset": 23,
},
"source": "<template><div id="abc"",
"start": {
Expand Down Expand Up @@ -1684,9 +1684,9 @@ exports[`compiler: parse > Errors > EOF_IN_TAG > <template><div id="abc"/ 1`] =
"codegenNode": undefined,
"loc": {
"end": {
"column": 26,
"column": 25,
"line": 1,
"offset": 25,
"offset": 24,
},
"source": "<template><div id="abc"/",
"start": {
Expand Down Expand Up @@ -1736,9 +1736,9 @@ exports[`compiler: parse > Errors > EOF_IN_TAG > <template><div id='abc 1`] = `
"codegenNode": undefined,
"loc": {
"end": {
"column": 24,
"column": 23,
"line": 1,
"offset": 23,
"offset": 22,
},
"source": "<template><div id='abc",
"start": {
Expand Down Expand Up @@ -1788,9 +1788,9 @@ exports[`compiler: parse > Errors > EOF_IN_TAG > <template><div id='abc' 1`] = `
"codegenNode": undefined,
"loc": {
"end": {
"column": 25,
"column": 24,
"line": 1,
"offset": 24,
"offset": 23,
},
"source": "<template><div id='abc'",
"start": {
Expand Down Expand Up @@ -1858,9 +1858,9 @@ exports[`compiler: parse > Errors > EOF_IN_TAG > <template><div id='abc'/ 1`] =
"codegenNode": undefined,
"loc": {
"end": {
"column": 26,
"column": 25,
"line": 1,
"offset": 25,
"offset": 24,
},
"source": "<template><div id='abc'/",
"start": {
Expand Down Expand Up @@ -1928,9 +1928,9 @@ exports[`compiler: parse > Errors > EOF_IN_TAG > <template><div id=abc / 1`] = `
"codegenNode": undefined,
"loc": {
"end": {
"column": 25,
"column": 24,
"line": 1,
"offset": 24,
"offset": 23,
},
"source": "<template><div id=abc /",
"start": {
Expand Down Expand Up @@ -1980,9 +1980,9 @@ exports[`compiler: parse > Errors > EOF_IN_TAG > <template><div id=abc 1`] = `
"codegenNode": undefined,
"loc": {
"end": {
"column": 23,
"column": 22,
"line": 1,
"offset": 22,
"offset": 21,
},
"source": "<template><div id=abc",
"start": {
Expand Down
83 changes: 83 additions & 0 deletions packages/compiler-core/__tests__/parse.spec.ts
Expand Up @@ -984,6 +984,89 @@ describe('compiler: parse', () => {
})
})

test('attribute value with >', () => {
const ast = baseParse(
'<script setup lang="ts" generic="T extends Record<string,string>"></script>',
{ parseMode: 'sfc' }
)
const element = ast.children[0] as ElementNode
expect(element).toMatchObject({
type: NodeTypes.ELEMENT,
ns: Namespaces.HTML,
tag: 'script',
tagType: ElementTypes.ELEMENT,
codegenNode: undefined,
children: [],
innerLoc: {
start: { column: 67, line: 1, offset: 66 },
end: { column: 67, line: 1, offset: 66 }
},
props: [
{
loc: {
source: 'setup',
end: { column: 14, line: 1, offset: 13 },
start: { column: 9, line: 1, offset: 8 }
},
name: 'setup',
nameLoc: {
source: 'setup',
end: { column: 14, line: 1, offset: 13 },
start: { column: 9, line: 1, offset: 8 }
},
type: NodeTypes.ATTRIBUTE,
value: undefined
},
{
loc: {
source: 'lang="ts"',
end: { column: 24, line: 1, offset: 23 },
start: { column: 15, line: 1, offset: 14 }
},
name: 'lang',
nameLoc: {
source: 'lang',
end: { column: 19, line: 1, offset: 18 },
start: { column: 15, line: 1, offset: 14 }
},
type: NodeTypes.ATTRIBUTE,
value: {
content: 'ts',
loc: {
source: '"ts"',
end: { column: 24, line: 1, offset: 23 },
start: { column: 20, line: 1, offset: 19 }
},
type: NodeTypes.TEXT
}
},
{
loc: {
source: 'generic="T extends Record<string,string>"',
end: { column: 66, line: 1, offset: 65 },
start: { column: 25, line: 1, offset: 24 }
},
name: 'generic',
nameLoc: {
source: 'generic',
end: { column: 32, line: 1, offset: 31 },
start: { column: 25, line: 1, offset: 24 }
},
type: NodeTypes.ATTRIBUTE,
value: {
content: 'T extends Record<string,string>',
loc: {
source: '"T extends Record<string,string>"',
end: { column: 66, line: 1, offset: 65 },
start: { column: 33, line: 1, offset: 32 }
},
type: NodeTypes.TEXT
}
}
]
})
})

test('multiple attributes', () => {
const ast = baseParse('<div id=a class="c" inert style=\'\'></div>')
const element = ast.children[0] as ElementNode
Expand Down

0 comments on commit 7aa3f25

Please sign in to comment.