File tree 5 files changed +285
-0
lines changed
tests/fixtures/parser/ast
5 files changed +285
-0
lines changed Original file line number Diff line number Diff line change
1
+ ---
2
+ " svelte-eslint-parser " : patch
3
+ ---
4
+
5
+ fix: prevent errors when ` <script> ` tags are used inside ` {@html} `
Original file line number Diff line number Diff line change @@ -383,6 +383,14 @@ type SelfClosingBlock = {
383
383
startTagRange : [ number , number ] ;
384
384
} ;
385
385
386
+ function isValidStartTagOpenIndex (
387
+ code : string ,
388
+ startTagOpenIndex : number ,
389
+ ) : boolean {
390
+ const prev = code . slice ( 0 , startTagOpenIndex ) ;
391
+ return / > \s * $ | ^ \s * $ / m. test ( prev ) ;
392
+ }
393
+
386
394
/** Extract <script> blocks */
387
395
function * extractBlocks ( code : string ) : IterableIterator < Block > {
388
396
const startTagOpenRe = / < ! - - [ \s \S ] * ?- - > | < ( s c r i p t | s t y l e | t e m p l a t e ) ( [ \s > ] ) / giu;
@@ -396,6 +404,10 @@ function* extractBlocks(code: string): IterableIterator<Block> {
396
404
continue ;
397
405
}
398
406
const startTagStart = startTagOpenMatch . index ;
407
+ if ( ! isValidStartTagOpenIndex ( code , startTagStart ) ) {
408
+ continue ;
409
+ }
410
+
399
411
let startTagEnd = startTagOpenRe . lastIndex ;
400
412
401
413
const lowerTag = tag . toLowerCase ( ) as "script" | "style" | "template" ;
Original file line number Diff line number Diff line change
1
+ {@html ` <script>var x = ${50 }</script> ` }
Original file line number Diff line number Diff line change
1
+ {
2
+ "type" : " Program" ,
3
+ "body" : [
4
+ {
5
+ "type" : " SvelteMustacheTag" ,
6
+ "kind" : " raw" ,
7
+ "expression" : {
8
+ "type" : " TemplateLiteral" ,
9
+ "expressions" : [
10
+ {
11
+ "type" : " Literal" ,
12
+ "raw" : " 50" ,
13
+ "value" : 50 ,
14
+ "range" : [
15
+ 26 ,
16
+ 28
17
+ ],
18
+ "loc" : {
19
+ "start" : {
20
+ "line" : 1 ,
21
+ "column" : 26
22
+ },
23
+ "end" : {
24
+ "line" : 1 ,
25
+ "column" : 28
26
+ }
27
+ }
28
+ }
29
+ ],
30
+ "quasis" : [
31
+ {
32
+ "type" : " TemplateElement" ,
33
+ "tail" : false ,
34
+ "value" : {
35
+ "cooked" : " <script>var x = " ,
36
+ "raw" : " <script>var x = "
37
+ },
38
+ "range" : [
39
+ 7 ,
40
+ 26
41
+ ],
42
+ "loc" : {
43
+ "start" : {
44
+ "line" : 1 ,
45
+ "column" : 7
46
+ },
47
+ "end" : {
48
+ "line" : 1 ,
49
+ "column" : 26
50
+ }
51
+ }
52
+ },
53
+ {
54
+ "type" : " TemplateElement" ,
55
+ "tail" : true ,
56
+ "value" : {
57
+ "cooked" : " </script>" ,
58
+ "raw" : " </script>"
59
+ },
60
+ "range" : [
61
+ 28 ,
62
+ 39
63
+ ],
64
+ "loc" : {
65
+ "start" : {
66
+ "line" : 1 ,
67
+ "column" : 28
68
+ },
69
+ "end" : {
70
+ "line" : 1 ,
71
+ "column" : 39
72
+ }
73
+ }
74
+ }
75
+ ],
76
+ "range" : [
77
+ 7 ,
78
+ 39
79
+ ],
80
+ "loc" : {
81
+ "start" : {
82
+ "line" : 1 ,
83
+ "column" : 7
84
+ },
85
+ "end" : {
86
+ "line" : 1 ,
87
+ "column" : 39
88
+ }
89
+ }
90
+ },
91
+ "range" : [
92
+ 0 ,
93
+ 40
94
+ ],
95
+ "loc" : {
96
+ "start" : {
97
+ "line" : 1 ,
98
+ "column" : 0
99
+ },
100
+ "end" : {
101
+ "line" : 1 ,
102
+ "column" : 40
103
+ }
104
+ }
105
+ }
106
+ ],
107
+ "sourceType" : " module" ,
108
+ "comments" : [],
109
+ "tokens" : [
110
+ {
111
+ "type" : " Punctuator" ,
112
+ "value" : " {" ,
113
+ "range" : [
114
+ 0 ,
115
+ 1
116
+ ],
117
+ "loc" : {
118
+ "start" : {
119
+ "line" : 1 ,
120
+ "column" : 0
121
+ },
122
+ "end" : {
123
+ "line" : 1 ,
124
+ "column" : 1
125
+ }
126
+ }
127
+ },
128
+ {
129
+ "type" : " MustacheKeyword" ,
130
+ "value" : " @html" ,
131
+ "range" : [
132
+ 1 ,
133
+ 6
134
+ ],
135
+ "loc" : {
136
+ "start" : {
137
+ "line" : 1 ,
138
+ "column" : 1
139
+ },
140
+ "end" : {
141
+ "line" : 1 ,
142
+ "column" : 6
143
+ }
144
+ }
145
+ },
146
+ {
147
+ "type" : " Template" ,
148
+ "value" : " `<script>var x = ${" ,
149
+ "range" : [
150
+ 7 ,
151
+ 26
152
+ ],
153
+ "loc" : {
154
+ "start" : {
155
+ "line" : 1 ,
156
+ "column" : 7
157
+ },
158
+ "end" : {
159
+ "line" : 1 ,
160
+ "column" : 26
161
+ }
162
+ }
163
+ },
164
+ {
165
+ "type" : " Numeric" ,
166
+ "value" : " 50" ,
167
+ "range" : [
168
+ 26 ,
169
+ 28
170
+ ],
171
+ "loc" : {
172
+ "start" : {
173
+ "line" : 1 ,
174
+ "column" : 26
175
+ },
176
+ "end" : {
177
+ "line" : 1 ,
178
+ "column" : 28
179
+ }
180
+ }
181
+ },
182
+ {
183
+ "type" : " Template" ,
184
+ "value" : " }</script>`" ,
185
+ "range" : [
186
+ 28 ,
187
+ 39
188
+ ],
189
+ "loc" : {
190
+ "start" : {
191
+ "line" : 1 ,
192
+ "column" : 28
193
+ },
194
+ "end" : {
195
+ "line" : 1 ,
196
+ "column" : 39
197
+ }
198
+ }
199
+ },
200
+ {
201
+ "type" : " Punctuator" ,
202
+ "value" : " }" ,
203
+ "range" : [
204
+ 39 ,
205
+ 40
206
+ ],
207
+ "loc" : {
208
+ "start" : {
209
+ "line" : 1 ,
210
+ "column" : 39
211
+ },
212
+ "end" : {
213
+ "line" : 1 ,
214
+ "column" : 40
215
+ }
216
+ }
217
+ }
218
+ ],
219
+ "range" : [
220
+ 0 ,
221
+ 41
222
+ ],
223
+ "loc" : {
224
+ "start" : {
225
+ "line" : 1 ,
226
+ "column" : 0
227
+ },
228
+ "end" : {
229
+ "line" : 2 ,
230
+ "column" : 0
231
+ }
232
+ }
233
+ }
Original file line number Diff line number Diff line change
1
+ {
2
+ "type" : " global" ,
3
+ "variables" : [
4
+ {
5
+ "name" : " $$slots" ,
6
+ "identifiers" : [],
7
+ "defs" : [],
8
+ "references" : []
9
+ },
10
+ {
11
+ "name" : " $$props" ,
12
+ "identifiers" : [],
13
+ "defs" : [],
14
+ "references" : []
15
+ },
16
+ {
17
+ "name" : " $$restProps" ,
18
+ "identifiers" : [],
19
+ "defs" : [],
20
+ "references" : []
21
+ }
22
+ ],
23
+ "references" : [],
24
+ "childScopes" : [
25
+ {
26
+ "type" : " module" ,
27
+ "variables" : [],
28
+ "references" : [],
29
+ "childScopes" : [],
30
+ "through" : []
31
+ }
32
+ ],
33
+ "through" : []
34
+ }
You can’t perform that action at this time.
0 commit comments