Skip to content

Commit 903f9bf

Browse files
authored
Add AST property and improve AST type (#115)
* Add AST property and improve AST type * update
1 parent 3362107 commit 903f9bf

Some content is hidden

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

47 files changed

+336
-78
lines changed

src/ast.ts

+128-26
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ export interface SvelteHTMLElement extends BaseSvelteElement {
125125
| SvelteProgram
126126
| SvelteElement
127127
| SvelteIfBlock
128-
| SvelteElseBlock
128+
| SvelteElseBlockAlone
129129
| SvelteEachBlock
130130
| SvelteAwaitPendingBlock
131131
| SvelteAwaitThenBlock
@@ -144,7 +144,7 @@ export interface SvelteComponentElement extends BaseSvelteElement {
144144
| SvelteProgram
145145
| SvelteElement
146146
| SvelteIfBlock
147-
| SvelteElseBlock
147+
| SvelteElseBlockAlone
148148
| SvelteEachBlock
149149
| SvelteAwaitPendingBlock
150150
| SvelteAwaitThenBlock
@@ -163,7 +163,7 @@ export interface SvelteSpecialElement extends BaseSvelteElement {
163163
| SvelteProgram
164164
| SvelteElement
165165
| SvelteIfBlock
166-
| SvelteElseBlock
166+
| SvelteElseBlockAlone
167167
| SvelteEachBlock
168168
| SvelteAwaitPendingBlock
169169
| SvelteAwaitThenBlock
@@ -215,7 +215,7 @@ type Child =
215215
| SvelteText
216216
| SvelteMustacheTag
217217
| SvelteDebugTag
218-
| SvelteIfBlock
218+
| SvelteIfBlockAlone
219219
| SvelteEachBlock
220220
| SvelteAwaitBlock
221221
| SvelteKeyBlock
@@ -230,7 +230,7 @@ export interface SvelteText extends BaseNode {
230230
| SvelteElement
231231
| SvelteStyleElement
232232
| SvelteIfBlock
233-
| SvelteElseBlock
233+
| SvelteElseBlockAlone
234234
| SvelteEachBlock
235235
| SvelteAwaitPendingBlock
236236
| SvelteAwaitThenBlock
@@ -244,32 +244,51 @@ export interface SvelteLiteral extends BaseNode {
244244
parent: SvelteAttribute
245245
}
246246

247+
/** Node of mustache tag. e.g. `{...}`, `{@html ...}`. Like JSXExpressionContainer */
248+
export type SvelteMustacheTag = SvelteMustacheTagText | SvelteMustacheTagRaw
247249
interface BaseSvelteMustacheTag extends BaseNode {
250+
type: "SvelteMustacheTag"
251+
kind: "text" | "raw"
252+
expression: ESTree.Expression
248253
parent:
249254
| SvelteProgram
250255
| SvelteElement
251256
| SvelteIfBlock
252-
| SvelteElseBlock
257+
| SvelteElseBlockAlone
253258
| SvelteEachBlock
254259
| SvelteAwaitPendingBlock
255260
| SvelteAwaitThenBlock
256261
| SvelteAwaitCatchBlock
257262
| SvelteKeyBlock
258263
| SvelteAttribute
259264
}
260-
/** Node of mustache tag. e.g. `{...}`, `{@html ...}`. Like JSXExpressionContainer */
261-
export interface SvelteMustacheTag extends BaseSvelteMustacheTag {
262-
type: "SvelteMustacheTag"
263-
kind: "text" | "raw"
264-
expression: ESTree.Expression
265+
/** Node of mustache tag. e.g. `{...}``. Like JSXExpressionContainer */
266+
export interface SvelteMustacheTagText extends BaseSvelteMustacheTag {
267+
kind: "text"
268+
}
269+
/** Node of mustache tag. e.g. `{@html ...}`. Like JSXExpressionContainer */
270+
export interface SvelteMustacheTagRaw extends BaseSvelteMustacheTag {
271+
kind: "raw"
265272
}
266273
/** Node of debug mustache tag. e.g. `{@debug}` */
267-
export interface SvelteDebugTag extends BaseSvelteMustacheTag {
274+
export interface SvelteDebugTag extends BaseNode {
268275
type: "SvelteDebugTag"
269276
identifiers: ESTree.Identifier[]
277+
parent:
278+
| SvelteProgram
279+
| SvelteElement
280+
| SvelteIfBlock
281+
| SvelteElseBlockAlone
282+
| SvelteEachBlock
283+
| SvelteAwaitPendingBlock
284+
| SvelteAwaitThenBlock
285+
| SvelteAwaitCatchBlock
286+
| SvelteKeyBlock
287+
| SvelteAttribute
270288
}
271289
/** Node of if block. e.g. `{#if}` */
272-
export interface SvelteIfBlock extends BaseNode {
290+
export type SvelteIfBlock = SvelteIfBlockAlone | SvelteIfBlockElseIf
291+
interface BaseSvelteIfBlock extends BaseNode {
273292
type: "SvelteIfBlock"
274293
elseif: boolean
275294
expression: ESTree.Expression
@@ -286,12 +305,35 @@ export interface SvelteIfBlock extends BaseNode {
286305
| SvelteAwaitCatchBlock
287306
| SvelteKeyBlock
288307
}
308+
/** Node of if block. e.g. `{#if}` */
309+
export interface SvelteIfBlockAlone extends BaseSvelteIfBlock {
310+
elseif: false
311+
parent: Exclude<BaseSvelteIfBlock["parent"], SvelteElseBlockElseIf>
312+
}
313+
/** Node of if block. e.g. `{:else #if}` */
314+
export interface SvelteIfBlockElseIf extends BaseSvelteIfBlock {
315+
elseif: true
316+
parent: SvelteElseBlockElseIf
317+
}
318+
289319
/** Node of else block. e.g. `{:else}` */
290-
export interface SvelteElseBlock extends BaseNode {
320+
export type SvelteElseBlock = SvelteElseBlockAlone | SvelteElseBlockElseIf
321+
interface BaseSvelteElseBlock extends BaseNode {
291322
type: "SvelteElseBlock"
292-
children: Child[]
323+
elseif: boolean
324+
children: (Child | SvelteIfBlockElseIf)[]
293325
parent: SvelteIfBlock | SvelteEachBlock
294326
}
327+
/** Node of else block. e.g. `{:else}` */
328+
export interface SvelteElseBlockAlone extends BaseSvelteElseBlock {
329+
elseif: false
330+
children: Child[]
331+
}
332+
/** Node of else block. e.g. `{:else if ...}` */
333+
export interface SvelteElseBlockElseIf extends BaseSvelteElseBlock {
334+
elseif: true
335+
children: [SvelteIfBlockElseIf]
336+
}
295337
/** Node of each block. e.g. `{#each}` */
296338
export interface SvelteEachBlock extends BaseNode {
297339
type: "SvelteEachBlock"
@@ -300,56 +342,116 @@ export interface SvelteEachBlock extends BaseNode {
300342
index: ESTree.Identifier | null
301343
key: ESTree.Expression | null
302344
children: Child[]
303-
else: SvelteElseBlock | null
345+
else: SvelteElseBlockAlone | null
304346
parent:
305347
| SvelteProgram
306348
| SvelteElement
307349
| SvelteIfBlock
308-
| SvelteElseBlock
350+
| SvelteElseBlockAlone
309351
| SvelteEachBlock
310352
| SvelteAwaitPendingBlock
311353
| SvelteAwaitThenBlock
312354
| SvelteAwaitCatchBlock
313355
| SvelteKeyBlock
314356
}
315-
/** Node of await block. e.g. `{#await}` */
316-
export interface SvelteAwaitBlock extends BaseNode {
357+
/** Node of await block. e.g. `{#await}`, `{#await ... then ... }`, `{#await ... catch ... }` */
358+
export type SvelteAwaitBlock =
359+
| SvelteAwaitBlockAwaitPending
360+
| SvelteAwaitBlockAwaitThen
361+
| SvelteAwaitBlockAwaitCatch
362+
interface BaseSvelteAwaitBlock extends BaseNode {
317363
type: "SvelteAwaitBlock"
318364
expression: ESTree.Expression
365+
kind: "await" | "await-then" | "await-catch"
319366
pending: SvelteAwaitPendingBlock | null
320367
then: SvelteAwaitThenBlock | null
321368
catch: SvelteAwaitCatchBlock | null
322369
parent:
323370
| SvelteProgram
324371
| SvelteElement
325372
| SvelteIfBlock
326-
| SvelteElseBlock
373+
| SvelteElseBlockAlone
327374
| SvelteEachBlock
328375
| SvelteAwaitPendingBlock
329376
| SvelteAwaitThenBlock
330377
| SvelteAwaitCatchBlock
331378
| SvelteKeyBlock
332379
}
380+
/** Node of await block. e.g. `{#await}` */
381+
export interface SvelteAwaitBlockAwaitPending extends BaseSvelteAwaitBlock {
382+
kind: "await"
383+
pending: SvelteAwaitPendingBlock
384+
then: SvelteAwaitThenBlockAlone | null
385+
catch: SvelteAwaitCatchBlockAlone | null
386+
}
387+
/** Node of await block. e.g. `{#await ... then ... }` */
388+
export interface SvelteAwaitBlockAwaitThen extends BaseSvelteAwaitBlock {
389+
kind: "await-then"
390+
pending: null
391+
then: SvelteAwaitThenBlockAwaitThen
392+
catch: SvelteAwaitCatchBlockAlone | null
393+
}
394+
/** Node of await block. e.g. `{#await ... catch ... }` */
395+
export interface SvelteAwaitBlockAwaitCatch extends BaseSvelteAwaitBlock {
396+
kind: "await-catch"
397+
pending: null
398+
then: null
399+
catch: SvelteAwaitCatchBlockAwaitCatch
400+
}
401+
333402
/** Node of await pending block. e.g. `{#await expr} ... {:then}` */
334403
export interface SvelteAwaitPendingBlock extends BaseNode {
335404
type: "SvelteAwaitPendingBlock"
336405
children: Child[]
337406
parent: SvelteAwaitBlock
338407
}
339-
/** Node of await then block. e.g. `{:then}` */
340-
export interface SvelteAwaitThenBlock extends BaseNode {
408+
/** Node of await then block. e.g. `{:then}`, `{#await ... then ...}` */
409+
export type SvelteAwaitThenBlock =
410+
| SvelteAwaitThenBlockAlone
411+
| SvelteAwaitThenBlockAwaitThen
412+
interface BaseSvelteAwaitThenBlock extends BaseNode {
341413
type: "SvelteAwaitThenBlock"
414+
awaitThen: boolean
342415
value: ESTree.Pattern | null
343416
children: Child[]
344417
parent: SvelteAwaitBlock
345418
}
346-
/** Node of await catch block. e.g. `{:catch}` */
347-
export interface SvelteAwaitCatchBlock extends BaseNode {
419+
/** Node of await then block. e.g. `{:then}` */
420+
export interface SvelteAwaitThenBlockAlone extends BaseSvelteAwaitThenBlock {
421+
awaitThen: false
422+
parent: SvelteAwaitBlockAwaitPending
423+
}
424+
/** Node of await then block. e.g. `{#await ... then ...}` */
425+
export interface SvelteAwaitThenBlockAwaitThen
426+
extends BaseSvelteAwaitThenBlock {
427+
awaitThen: true
428+
parent: SvelteAwaitBlockAwaitThen
429+
}
430+
431+
/** Node of await catch block. e.g. `{:catch}`, `{#await ... catch ... }` */
432+
export type SvelteAwaitCatchBlock =
433+
| SvelteAwaitCatchBlockAlone
434+
| SvelteAwaitCatchBlockAwaitCatch
435+
interface BaseSvelteAwaitCatchBlock extends BaseNode {
348436
type: "SvelteAwaitCatchBlock"
437+
awaitCatch: boolean
349438
error: ESTree.Pattern | null
350439
children: Child[]
351440
parent: SvelteAwaitBlock
352441
}
442+
/** Node of await catch block. e.g. `{:catch}` */
443+
export interface SvelteAwaitCatchBlockAlone extends BaseSvelteAwaitCatchBlock {
444+
awaitCatch: false
445+
parent: SvelteAwaitBlockAwaitPending | SvelteAwaitBlockAwaitThen
446+
}
447+
/** Node of await catch block. e.g. `{#await ... catch ... }` */
448+
export interface SvelteAwaitCatchBlockAwaitCatch
449+
extends BaseSvelteAwaitCatchBlock {
450+
awaitCatch: true
451+
error: ESTree.Pattern | null
452+
children: Child[]
453+
parent: SvelteAwaitBlockAwaitCatch
454+
}
353455
/** Node of key block. e.g. `{#key}` */
354456
export interface SvelteKeyBlock extends BaseNode {
355457
type: "SvelteKeyBlock"
@@ -359,7 +461,7 @@ export interface SvelteKeyBlock extends BaseNode {
359461
| SvelteProgram
360462
| SvelteElement
361463
| SvelteIfBlock
362-
| SvelteElseBlock
464+
| SvelteElseBlockAlone
363465
| SvelteEachBlock
364466
| SvelteAwaitPendingBlock
365467
| SvelteAwaitThenBlock
@@ -374,7 +476,7 @@ export interface SvelteHTMLComment extends BaseNode {
374476
| SvelteProgram
375477
| SvelteElement
376478
| SvelteIfBlock
377-
| SvelteElseBlock
479+
| SvelteElseBlockAlone
378480
| SvelteEachBlock
379481
| SvelteAwaitPendingBlock
380482
| SvelteAwaitThenBlock

0 commit comments

Comments
 (0)