Skip to content

Commit 3756d3d

Browse files
authored
Change AST (#22)
1 parent 9e83324 commit 3756d3d

File tree

256 files changed

+65460
-37054
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

256 files changed

+65460
-37054
lines changed

src/ast.ts

Lines changed: 45 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,11 @@ export type SvelteNode =
5252
| SvelteScriptElement
5353
| SvelteStyleElement
5454
| SvelteElement
55+
| SvelteStartTag
56+
| SvelteEndTag
5557
| SvelteName
5658
| SvelteText
59+
| SvelteLiteral
5760
| SvelteMustacheTag
5861
| SvelteDebugTag
5962
| SvelteIfBlock
@@ -92,40 +95,28 @@ type BaseSvelteElement = BaseNode
9295
export interface SvelteScriptElement extends BaseSvelteElement {
9396
type: "SvelteScriptElement"
9497
name: SvelteName
95-
attributes: (
96-
| SvelteAttribute
97-
| SvelteShorthandAttribute
98-
| SvelteSpreadAttribute
99-
| SvelteDirective
100-
)[]
98+
startTag: SvelteStartTag
10199
body: ESTree.Program["body"]
100+
endTag: SvelteEndTag | null
102101
parent: SvelteProgram
103102
}
104103
/** Node of `<style>` element. */
105104
export interface SvelteStyleElement extends BaseSvelteElement {
106105
type: "SvelteStyleElement"
107106
name: SvelteName
108-
attributes: (
109-
| SvelteAttribute
110-
| SvelteShorthandAttribute
111-
| SvelteSpreadAttribute
112-
| SvelteDirective
113-
)[]
107+
startTag: SvelteStartTag
114108
children: [SvelteText]
109+
endTag: SvelteEndTag | null
115110
parent: SvelteProgram
116111
}
117112
/** Node of HTML element. */
118113
export interface SvelteHTMLElement extends BaseSvelteElement {
119114
type: "SvelteElement"
120115
kind: "html"
121116
name: SvelteName
122-
attributes: (
123-
| SvelteAttribute
124-
| SvelteShorthandAttribute
125-
| SvelteSpreadAttribute
126-
| SvelteDirective
127-
)[]
117+
startTag: SvelteStartTag
128118
children: Child[]
119+
endTag: SvelteEndTag | null
129120
parent:
130121
| SvelteProgram
131122
| SvelteElement
@@ -142,13 +133,9 @@ export interface SvelteComponentElement extends BaseSvelteElement {
142133
type: "SvelteElement"
143134
kind: "component"
144135
name: ESTree.Identifier | SvelteMemberExpressionName
145-
attributes: (
146-
| SvelteAttribute
147-
| SvelteShorthandAttribute
148-
| SvelteSpreadAttribute
149-
| SvelteDirective
150-
)[]
136+
startTag: SvelteStartTag
151137
children: Child[]
138+
endTag: SvelteEndTag | null
152139
parent:
153140
| SvelteProgram
154141
| SvelteElement
@@ -165,14 +152,9 @@ export interface SvelteSpecialElement extends BaseSvelteElement {
165152
type: "SvelteElement"
166153
kind: "special"
167154
name: SvelteName
168-
attributes: (
169-
| SvelteAttribute
170-
| SvelteShorthandAttribute
171-
| SvelteSpreadAttribute
172-
| SvelteDirective
173-
| SvelteSpecialDirective
174-
)[]
155+
startTag: SvelteStartTag
175156
children: Child[]
157+
endTag: SvelteEndTag | null
176158
parent:
177159
| SvelteProgram
178160
| SvelteElement
@@ -184,6 +166,24 @@ export interface SvelteSpecialElement extends BaseSvelteElement {
184166
| SvelteAwaitCatchBlock
185167
| SvelteKeyBlock
186168
}
169+
/** Node of start tag. */
170+
export interface SvelteStartTag extends BaseNode {
171+
type: "SvelteStartTag"
172+
attributes: (
173+
| SvelteAttribute
174+
| SvelteShorthandAttribute
175+
| SvelteSpreadAttribute
176+
| SvelteDirective
177+
| SvelteSpecialDirective
178+
)[]
179+
selfClosing: boolean
180+
parent: SvelteElement | SvelteScriptElement | SvelteStyleElement
181+
}
182+
/** Node of end tag. */
183+
export interface SvelteEndTag extends BaseNode {
184+
type: "SvelteEndTag"
185+
parent: SvelteElement | SvelteScriptElement | SvelteStyleElement
186+
}
187187

188188
/** Node of names. It is used for element names other than components and normal attribute names. */
189189
export interface SvelteName extends BaseNode {
@@ -216,21 +216,27 @@ type Child =
216216
| SvelteKeyBlock
217217
| SvelteHTMLComment
218218

219-
/** Node of text line HTML text. */
219+
/** Node of text. like HTML text. */
220220
export interface SvelteText extends BaseNode {
221221
type: "SvelteText"
222222
value: string
223223
parent:
224224
| SvelteProgram
225225
| SvelteElement
226+
| SvelteStyleElement
226227
| SvelteIfBlock
227228
| SvelteElseBlock
228229
| SvelteEachBlock
229230
| SvelteAwaitPendingBlock
230231
| SvelteAwaitThenBlock
231232
| SvelteAwaitCatchBlock
232233
| SvelteKeyBlock
233-
| SvelteAttribute
234+
}
235+
/** Node of literal. */
236+
export interface SvelteLiteral extends BaseNode {
237+
type: "SvelteLiteral"
238+
value: string
239+
parent: SvelteAttribute
234240
}
235241

236242
interface BaseSvelteMustacheTag extends BaseNode {
@@ -375,21 +381,21 @@ export interface SvelteAttribute extends BaseNode {
375381
type: "SvelteAttribute"
376382
key: SvelteName
377383
boolean: boolean
378-
value: (SvelteText | (SvelteMustacheTag & { kind: "text" }))[]
379-
parent: SvelteElement | SvelteScriptElement | SvelteStyleElement
384+
value: (SvelteLiteral | (SvelteMustacheTag & { kind: "text" }))[]
385+
parent: SvelteStartTag
380386
}
381387
/** Node of shorthand attribute. e.g. `<img {src}>` */
382388
export interface SvelteShorthandAttribute extends BaseNode {
383389
type: "SvelteShorthandAttribute"
384390
key: ESTree.Identifier
385391
value: ESTree.Identifier
386-
parent: SvelteElement | SvelteScriptElement | SvelteStyleElement
392+
parent: SvelteStartTag
387393
}
388394
/** Node of spread attribute. e.g. `<Info {...pkg}/>`. Like JSXSpreadAttribute */
389395
export interface SvelteSpreadAttribute extends BaseNode {
390396
type: "SvelteSpreadAttribute"
391397
argument: ESTree.Expression
392-
parent: SvelteElement | SvelteScriptElement | SvelteStyleElement
398+
parent: SvelteStartTag
393399
}
394400

395401
/** Node of directive. e.g. `<input bind:value />` */
@@ -406,7 +412,7 @@ interface BaseSvelteDirective extends BaseNode {
406412
type: "SvelteDirective"
407413
name: ESTree.Identifier
408414
modifiers: string[]
409-
parent: SvelteElement | SvelteScriptElement | SvelteStyleElement
415+
parent: SvelteStartTag
410416
}
411417

412418
export interface SvelteActionDirective extends BaseSvelteDirective {
@@ -447,7 +453,7 @@ export interface SvelteSpecialDirective extends BaseNode {
447453
type: "SvelteSpecialDirective"
448454
kind: "this"
449455
expression: ESTree.Expression
450-
parent: SvelteSpecialElement
456+
parent: SvelteStartTag /* & { parent: SvelteSpecialElement } */
451457
}
452458

453459
/** Node of `$` statement. */

src/parser/converts/attr.ts

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,11 @@ import type {
66
SvelteBindingDirective,
77
SvelteClassDirective,
88
SvelteDirective,
9-
SvelteElement,
109
SvelteEventHandlerDirective,
1110
SvelteLetDirective,
12-
SvelteScriptElement,
1311
SvelteSpreadAttribute,
14-
SvelteStyleElement,
1512
SvelteTransitionDirective,
13+
SvelteStartTag,
1614
} from "../../ast"
1715
import type ESTree from "estree"
1816
import type { Context } from "../../context"
@@ -25,13 +23,13 @@ import {
2523
getWithLoc,
2624
} from "./es"
2725
import { convertMustacheTag } from "./mustache"
28-
import { convertText } from "./text"
26+
import { convertTextToLiteral } from "./text"
2927
import { ParseError } from "../../errors"
3028

3129
/** Convert for Attributes */
3230
export function* convertAttributes(
3331
attributes: SvAST.AttributeOrDirective[],
34-
parent: SvelteElement | SvelteScriptElement | SvelteStyleElement,
32+
parent: SvelteStartTag,
3533
ctx: Context,
3634
): IterableIterator<
3735
| SvelteAttribute
@@ -134,7 +132,7 @@ function convertAttribute(
134132
return sAttr
135133
}
136134
if (v.type === "Text") {
137-
attribute.value.push(convertText(v, attribute, ctx))
135+
attribute.value.push(convertTextToLiteral(v, attribute, ctx))
138136
continue
139137
}
140138
if (v.type === "MustacheTag") {

0 commit comments

Comments
 (0)