Skip to content

Commit 7aa3f25

Browse files
committed
fix(compiler-core): fix parsing <script setup> generics with >
close #9890
1 parent e7135f7 commit 7aa3f25

File tree

5 files changed

+155
-63
lines changed

5 files changed

+155
-63
lines changed

packages/compiler-core/__tests__/__snapshots__/parse.spec.ts.snap

Lines changed: 44 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -838,9 +838,9 @@ exports[`compiler: parse > Errors > EOF_BEFORE_TAG_NAME > <template>< 1`] = `
838838
"codegenNode": undefined,
839839
"loc": {
840840
"end": {
841-
"column": 13,
841+
"column": 12,
842842
"line": 1,
843-
"offset": 12,
843+
"offset": 11,
844844
},
845845
"source": "<template><",
846846
"start": {
@@ -908,9 +908,9 @@ exports[`compiler: parse > Errors > EOF_BEFORE_TAG_NAME > <template></ 1`] = `
908908
"codegenNode": undefined,
909909
"loc": {
910910
"end": {
911-
"column": 14,
911+
"column": 13,
912912
"line": 1,
913-
"offset": 13,
913+
"offset": 12,
914914
},
915915
"source": "<template></",
916916
"start": {
@@ -962,9 +962,9 @@ exports[`compiler: parse > Errors > EOF_IN_CDATA > <template><svg><![CDATA[ 1`]
962962
"codegenNode": undefined,
963963
"loc": {
964964
"end": {
965-
"column": 26,
965+
"column": 25,
966966
"line": 1,
967-
"offset": 25,
967+
"offset": 24,
968968
},
969969
"source": "<svg><![CDATA[",
970970
"start": {
@@ -983,9 +983,9 @@ exports[`compiler: parse > Errors > EOF_IN_CDATA > <template><svg><![CDATA[ 1`]
983983
"codegenNode": undefined,
984984
"loc": {
985985
"end": {
986-
"column": 26,
986+
"column": 25,
987987
"line": 1,
988-
"offset": 25,
988+
"offset": 24,
989989
},
990990
"source": "<template><svg><![CDATA[",
991991
"start": {
@@ -1055,9 +1055,9 @@ exports[`compiler: parse > Errors > EOF_IN_CDATA > <template><svg><![CDATA[cdata
10551055
"codegenNode": undefined,
10561056
"loc": {
10571057
"end": {
1058-
"column": 31,
1058+
"column": 30,
10591059
"line": 1,
1060-
"offset": 30,
1060+
"offset": 29,
10611061
},
10621062
"source": "<svg><![CDATA[cdata",
10631063
"start": {
@@ -1076,9 +1076,9 @@ exports[`compiler: parse > Errors > EOF_IN_CDATA > <template><svg><![CDATA[cdata
10761076
"codegenNode": undefined,
10771077
"loc": {
10781078
"end": {
1079-
"column": 31,
1079+
"column": 30,
10801080
"line": 1,
1081-
"offset": 30,
1081+
"offset": 29,
10821082
},
10831083
"source": "<template><svg><![CDATA[cdata",
10841084
"start": {
@@ -1128,9 +1128,9 @@ exports[`compiler: parse > Errors > EOF_IN_COMMENT > <template><!-- 1`] = `
11281128
"codegenNode": undefined,
11291129
"loc": {
11301130
"end": {
1131-
"column": 16,
1131+
"column": 15,
11321132
"line": 1,
1133-
"offset": 15,
1133+
"offset": 14,
11341134
},
11351135
"source": "<template><!--",
11361136
"start": {
@@ -1198,9 +1198,9 @@ exports[`compiler: parse > Errors > EOF_IN_COMMENT > <template><!--comment 1`] =
11981198
"codegenNode": undefined,
11991199
"loc": {
12001200
"end": {
1201-
"column": 23,
1201+
"column": 22,
12021202
"line": 1,
1203-
"offset": 22,
1203+
"offset": 21,
12041204
},
12051205
"source": "<template><!--comment",
12061206
"start": {
@@ -1250,9 +1250,9 @@ exports[`compiler: parse > Errors > EOF_IN_TAG > <div></div 1`] = `
12501250
"codegenNode": undefined,
12511251
"loc": {
12521252
"end": {
1253-
"column": 12,
1253+
"column": 11,
12541254
"line": 1,
1255-
"offset": 11,
1255+
"offset": 10,
12561256
},
12571257
"source": "<div></div",
12581258
"start": {
@@ -1302,9 +1302,9 @@ exports[`compiler: parse > Errors > EOF_IN_TAG > <template><div 1`] = `
13021302
"codegenNode": undefined,
13031303
"loc": {
13041304
"end": {
1305-
"column": 17,
1305+
"column": 16,
13061306
"line": 1,
1307-
"offset": 16,
1307+
"offset": 15,
13081308
},
13091309
"source": "<template><div ",
13101310
"start": {
@@ -1354,9 +1354,9 @@ exports[`compiler: parse > Errors > EOF_IN_TAG > <template><div 1`] = `
13541354
"codegenNode": undefined,
13551355
"loc": {
13561356
"end": {
1357-
"column": 16,
1357+
"column": 15,
13581358
"line": 1,
1359-
"offset": 15,
1359+
"offset": 14,
13601360
},
13611361
"source": "<template><div",
13621362
"start": {
@@ -1406,9 +1406,9 @@ exports[`compiler: parse > Errors > EOF_IN_TAG > <template><div id 1`] = `
14061406
"codegenNode": undefined,
14071407
"loc": {
14081408
"end": {
1409-
"column": 20,
1409+
"column": 19,
14101410
"line": 1,
1411-
"offset": 19,
1411+
"offset": 18,
14121412
},
14131413
"source": "<template><div id ",
14141414
"start": {
@@ -1458,9 +1458,9 @@ exports[`compiler: parse > Errors > EOF_IN_TAG > <template><div id = 1`] = `
14581458
"codegenNode": undefined,
14591459
"loc": {
14601460
"end": {
1461-
"column": 21,
1461+
"column": 20,
14621462
"line": 1,
1463-
"offset": 20,
1463+
"offset": 19,
14641464
},
14651465
"source": "<template><div id =",
14661466
"start": {
@@ -1510,9 +1510,9 @@ exports[`compiler: parse > Errors > EOF_IN_TAG > <template><div id 1`] = `
15101510
"codegenNode": undefined,
15111511
"loc": {
15121512
"end": {
1513-
"column": 19,
1513+
"column": 18,
15141514
"line": 1,
1515-
"offset": 18,
1515+
"offset": 17,
15161516
},
15171517
"source": "<template><div id",
15181518
"start": {
@@ -1562,9 +1562,9 @@ exports[`compiler: parse > Errors > EOF_IN_TAG > <template><div id="abc 1`] = `
15621562
"codegenNode": undefined,
15631563
"loc": {
15641564
"end": {
1565-
"column": 24,
1565+
"column": 23,
15661566
"line": 1,
1567-
"offset": 23,
1567+
"offset": 22,
15681568
},
15691569
"source": "<template><div id="abc",
15701570
"start": {
@@ -1614,9 +1614,9 @@ exports[`compiler: parse > Errors > EOF_IN_TAG > <template><div id="abc" 1`] = `
16141614
"codegenNode": undefined,
16151615
"loc": {
16161616
"end": {
1617-
"column": 25,
1617+
"column": 24,
16181618
"line": 1,
1619-
"offset": 24,
1619+
"offset": 23,
16201620
},
16211621
"source": "<template><div id="abc"",
16221622
"start": {
@@ -1684,9 +1684,9 @@ exports[`compiler: parse > Errors > EOF_IN_TAG > <template><div id="abc"/ 1`] =
16841684
"codegenNode": undefined,
16851685
"loc": {
16861686
"end": {
1687-
"column": 26,
1687+
"column": 25,
16881688
"line": 1,
1689-
"offset": 25,
1689+
"offset": 24,
16901690
},
16911691
"source": "<template><div id="abc"/",
16921692
"start": {
@@ -1736,9 +1736,9 @@ exports[`compiler: parse > Errors > EOF_IN_TAG > <template><div id='abc 1`] = `
17361736
"codegenNode": undefined,
17371737
"loc": {
17381738
"end": {
1739-
"column": 24,
1739+
"column": 23,
17401740
"line": 1,
1741-
"offset": 23,
1741+
"offset": 22,
17421742
},
17431743
"source": "<template><div id='abc",
17441744
"start": {
@@ -1788,9 +1788,9 @@ exports[`compiler: parse > Errors > EOF_IN_TAG > <template><div id='abc' 1`] = `
17881788
"codegenNode": undefined,
17891789
"loc": {
17901790
"end": {
1791-
"column": 25,
1791+
"column": 24,
17921792
"line": 1,
1793-
"offset": 24,
1793+
"offset": 23,
17941794
},
17951795
"source": "<template><div id='abc'",
17961796
"start": {
@@ -1858,9 +1858,9 @@ exports[`compiler: parse > Errors > EOF_IN_TAG > <template><div id='abc'/ 1`] =
18581858
"codegenNode": undefined,
18591859
"loc": {
18601860
"end": {
1861-
"column": 26,
1861+
"column": 25,
18621862
"line": 1,
1863-
"offset": 25,
1863+
"offset": 24,
18641864
},
18651865
"source": "<template><div id='abc'/",
18661866
"start": {
@@ -1928,9 +1928,9 @@ exports[`compiler: parse > Errors > EOF_IN_TAG > <template><div id=abc / 1`] = `
19281928
"codegenNode": undefined,
19291929
"loc": {
19301930
"end": {
1931-
"column": 25,
1931+
"column": 24,
19321932
"line": 1,
1933-
"offset": 24,
1933+
"offset": 23,
19341934
},
19351935
"source": "<template><div id=abc /",
19361936
"start": {
@@ -1980,9 +1980,9 @@ exports[`compiler: parse > Errors > EOF_IN_TAG > <template><div id=abc 1`] = `
19801980
"codegenNode": undefined,
19811981
"loc": {
19821982
"end": {
1983-
"column": 23,
1983+
"column": 22,
19841984
"line": 1,
1985-
"offset": 22,
1985+
"offset": 21,
19861986
},
19871987
"source": "<template><div id=abc",
19881988
"start": {

packages/compiler-core/__tests__/parse.spec.ts

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -984,6 +984,89 @@ describe('compiler: parse', () => {
984984
})
985985
})
986986

987+
test('attribute value with >', () => {
988+
const ast = baseParse(
989+
'<script setup lang="ts" generic="T extends Record<string,string>"></script>',
990+
{ parseMode: 'sfc' }
991+
)
992+
const element = ast.children[0] as ElementNode
993+
expect(element).toMatchObject({
994+
type: NodeTypes.ELEMENT,
995+
ns: Namespaces.HTML,
996+
tag: 'script',
997+
tagType: ElementTypes.ELEMENT,
998+
codegenNode: undefined,
999+
children: [],
1000+
innerLoc: {
1001+
start: { column: 67, line: 1, offset: 66 },
1002+
end: { column: 67, line: 1, offset: 66 }
1003+
},
1004+
props: [
1005+
{
1006+
loc: {
1007+
source: 'setup',
1008+
end: { column: 14, line: 1, offset: 13 },
1009+
start: { column: 9, line: 1, offset: 8 }
1010+
},
1011+
name: 'setup',
1012+
nameLoc: {
1013+
source: 'setup',
1014+
end: { column: 14, line: 1, offset: 13 },
1015+
start: { column: 9, line: 1, offset: 8 }
1016+
},
1017+
type: NodeTypes.ATTRIBUTE,
1018+
value: undefined
1019+
},
1020+
{
1021+
loc: {
1022+
source: 'lang="ts"',
1023+
end: { column: 24, line: 1, offset: 23 },
1024+
start: { column: 15, line: 1, offset: 14 }
1025+
},
1026+
name: 'lang',
1027+
nameLoc: {
1028+
source: 'lang',
1029+
end: { column: 19, line: 1, offset: 18 },
1030+
start: { column: 15, line: 1, offset: 14 }
1031+
},
1032+
type: NodeTypes.ATTRIBUTE,
1033+
value: {
1034+
content: 'ts',
1035+
loc: {
1036+
source: '"ts"',
1037+
end: { column: 24, line: 1, offset: 23 },
1038+
start: { column: 20, line: 1, offset: 19 }
1039+
},
1040+
type: NodeTypes.TEXT
1041+
}
1042+
},
1043+
{
1044+
loc: {
1045+
source: 'generic="T extends Record<string,string>"',
1046+
end: { column: 66, line: 1, offset: 65 },
1047+
start: { column: 25, line: 1, offset: 24 }
1048+
},
1049+
name: 'generic',
1050+
nameLoc: {
1051+
source: 'generic',
1052+
end: { column: 32, line: 1, offset: 31 },
1053+
start: { column: 25, line: 1, offset: 24 }
1054+
},
1055+
type: NodeTypes.ATTRIBUTE,
1056+
value: {
1057+
content: 'T extends Record<string,string>',
1058+
loc: {
1059+
source: '"T extends Record<string,string>"',
1060+
end: { column: 66, line: 1, offset: 65 },
1061+
start: { column: 33, line: 1, offset: 32 }
1062+
},
1063+
type: NodeTypes.TEXT
1064+
}
1065+
}
1066+
]
1067+
})
1068+
})
1069+
9871070
test('multiple attributes', () => {
9881071
const ast = baseParse('<div id=a class="c" inert style=\'\'></div>')
9891072
const element = ast.children[0] as ElementNode

0 commit comments

Comments
 (0)