Skip to content

Add AST property and improve AST type #115

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Nov 30, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
154 changes: 128 additions & 26 deletions src/ast.ts
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,7 @@ export interface SvelteHTMLElement extends BaseSvelteElement {
| SvelteProgram
| SvelteElement
| SvelteIfBlock
| SvelteElseBlock
| SvelteElseBlockAlone
| SvelteEachBlock
| SvelteAwaitPendingBlock
| SvelteAwaitThenBlock
Expand All @@ -144,7 +144,7 @@ export interface SvelteComponentElement extends BaseSvelteElement {
| SvelteProgram
| SvelteElement
| SvelteIfBlock
| SvelteElseBlock
| SvelteElseBlockAlone
| SvelteEachBlock
| SvelteAwaitPendingBlock
| SvelteAwaitThenBlock
Expand All @@ -163,7 +163,7 @@ export interface SvelteSpecialElement extends BaseSvelteElement {
| SvelteProgram
| SvelteElement
| SvelteIfBlock
| SvelteElseBlock
| SvelteElseBlockAlone
| SvelteEachBlock
| SvelteAwaitPendingBlock
| SvelteAwaitThenBlock
Expand Down Expand Up @@ -215,7 +215,7 @@ type Child =
| SvelteText
| SvelteMustacheTag
| SvelteDebugTag
| SvelteIfBlock
| SvelteIfBlockAlone
| SvelteEachBlock
| SvelteAwaitBlock
| SvelteKeyBlock
Expand All @@ -230,7 +230,7 @@ export interface SvelteText extends BaseNode {
| SvelteElement
| SvelteStyleElement
| SvelteIfBlock
| SvelteElseBlock
| SvelteElseBlockAlone
| SvelteEachBlock
| SvelteAwaitPendingBlock
| SvelteAwaitThenBlock
Expand All @@ -244,32 +244,51 @@ export interface SvelteLiteral extends BaseNode {
parent: SvelteAttribute
}

/** Node of mustache tag. e.g. `{...}`, `{@html ...}`. Like JSXExpressionContainer */
export type SvelteMustacheTag = SvelteMustacheTagText | SvelteMustacheTagRaw
interface BaseSvelteMustacheTag extends BaseNode {
type: "SvelteMustacheTag"
kind: "text" | "raw"
expression: ESTree.Expression
parent:
| SvelteProgram
| SvelteElement
| SvelteIfBlock
| SvelteElseBlock
| SvelteElseBlockAlone
| SvelteEachBlock
| SvelteAwaitPendingBlock
| SvelteAwaitThenBlock
| SvelteAwaitCatchBlock
| SvelteKeyBlock
| SvelteAttribute
}
/** Node of mustache tag. e.g. `{...}`, `{@html ...}`. Like JSXExpressionContainer */
export interface SvelteMustacheTag extends BaseSvelteMustacheTag {
type: "SvelteMustacheTag"
kind: "text" | "raw"
expression: ESTree.Expression
/** Node of mustache tag. e.g. `{...}``. Like JSXExpressionContainer */
export interface SvelteMustacheTagText extends BaseSvelteMustacheTag {
kind: "text"
}
/** Node of mustache tag. e.g. `{@html ...}`. Like JSXExpressionContainer */
export interface SvelteMustacheTagRaw extends BaseSvelteMustacheTag {
kind: "raw"
}
/** Node of debug mustache tag. e.g. `{@debug}` */
export interface SvelteDebugTag extends BaseSvelteMustacheTag {
export interface SvelteDebugTag extends BaseNode {
type: "SvelteDebugTag"
identifiers: ESTree.Identifier[]
parent:
| SvelteProgram
| SvelteElement
| SvelteIfBlock
| SvelteElseBlockAlone
| SvelteEachBlock
| SvelteAwaitPendingBlock
| SvelteAwaitThenBlock
| SvelteAwaitCatchBlock
| SvelteKeyBlock
| SvelteAttribute
}
/** Node of if block. e.g. `{#if}` */
export interface SvelteIfBlock extends BaseNode {
export type SvelteIfBlock = SvelteIfBlockAlone | SvelteIfBlockElseIf
interface BaseSvelteIfBlock extends BaseNode {
type: "SvelteIfBlock"
elseif: boolean
expression: ESTree.Expression
Expand All @@ -286,12 +305,35 @@ export interface SvelteIfBlock extends BaseNode {
| SvelteAwaitCatchBlock
| SvelteKeyBlock
}
/** Node of if block. e.g. `{#if}` */
export interface SvelteIfBlockAlone extends BaseSvelteIfBlock {
elseif: false
parent: Exclude<BaseSvelteIfBlock["parent"], SvelteElseBlockElseIf>
}
/** Node of if block. e.g. `{:else #if}` */
export interface SvelteIfBlockElseIf extends BaseSvelteIfBlock {
elseif: true
parent: SvelteElseBlockElseIf
}

/** Node of else block. e.g. `{:else}` */
export interface SvelteElseBlock extends BaseNode {
export type SvelteElseBlock = SvelteElseBlockAlone | SvelteElseBlockElseIf
interface BaseSvelteElseBlock extends BaseNode {
type: "SvelteElseBlock"
children: Child[]
elseif: boolean
children: (Child | SvelteIfBlockElseIf)[]
parent: SvelteIfBlock | SvelteEachBlock
}
/** Node of else block. e.g. `{:else}` */
export interface SvelteElseBlockAlone extends BaseSvelteElseBlock {
elseif: false
children: Child[]
}
/** Node of else block. e.g. `{:else if ...}` */
export interface SvelteElseBlockElseIf extends BaseSvelteElseBlock {
elseif: true
children: [SvelteIfBlockElseIf]
}
/** Node of each block. e.g. `{#each}` */
export interface SvelteEachBlock extends BaseNode {
type: "SvelteEachBlock"
Expand All @@ -300,56 +342,116 @@ export interface SvelteEachBlock extends BaseNode {
index: ESTree.Identifier | null
key: ESTree.Expression | null
children: Child[]
else: SvelteElseBlock | null
else: SvelteElseBlockAlone | null
parent:
| SvelteProgram
| SvelteElement
| SvelteIfBlock
| SvelteElseBlock
| SvelteElseBlockAlone
| SvelteEachBlock
| SvelteAwaitPendingBlock
| SvelteAwaitThenBlock
| SvelteAwaitCatchBlock
| SvelteKeyBlock
}
/** Node of await block. e.g. `{#await}` */
export interface SvelteAwaitBlock extends BaseNode {
/** Node of await block. e.g. `{#await}`, `{#await ... then ... }`, `{#await ... catch ... }` */
export type SvelteAwaitBlock =
| SvelteAwaitBlockAwaitPending
| SvelteAwaitBlockAwaitThen
| SvelteAwaitBlockAwaitCatch
interface BaseSvelteAwaitBlock extends BaseNode {
type: "SvelteAwaitBlock"
expression: ESTree.Expression
kind: "await" | "await-then" | "await-catch"
pending: SvelteAwaitPendingBlock | null
then: SvelteAwaitThenBlock | null
catch: SvelteAwaitCatchBlock | null
parent:
| SvelteProgram
| SvelteElement
| SvelteIfBlock
| SvelteElseBlock
| SvelteElseBlockAlone
| SvelteEachBlock
| SvelteAwaitPendingBlock
| SvelteAwaitThenBlock
| SvelteAwaitCatchBlock
| SvelteKeyBlock
}
/** Node of await block. e.g. `{#await}` */
export interface SvelteAwaitBlockAwaitPending extends BaseSvelteAwaitBlock {
kind: "await"
pending: SvelteAwaitPendingBlock
then: SvelteAwaitThenBlockAlone | null
catch: SvelteAwaitCatchBlockAlone | null
}
/** Node of await block. e.g. `{#await ... then ... }` */
export interface SvelteAwaitBlockAwaitThen extends BaseSvelteAwaitBlock {
kind: "await-then"
pending: null
then: SvelteAwaitThenBlockAwaitThen
catch: SvelteAwaitCatchBlockAlone | null
}
/** Node of await block. e.g. `{#await ... catch ... }` */
export interface SvelteAwaitBlockAwaitCatch extends BaseSvelteAwaitBlock {
kind: "await-catch"
pending: null
then: null
catch: SvelteAwaitCatchBlockAwaitCatch
}

/** Node of await pending block. e.g. `{#await expr} ... {:then}` */
export interface SvelteAwaitPendingBlock extends BaseNode {
type: "SvelteAwaitPendingBlock"
children: Child[]
parent: SvelteAwaitBlock
}
/** Node of await then block. e.g. `{:then}` */
export interface SvelteAwaitThenBlock extends BaseNode {
/** Node of await then block. e.g. `{:then}`, `{#await ... then ...}` */
export type SvelteAwaitThenBlock =
| SvelteAwaitThenBlockAlone
| SvelteAwaitThenBlockAwaitThen
interface BaseSvelteAwaitThenBlock extends BaseNode {
type: "SvelteAwaitThenBlock"
awaitThen: boolean
value: ESTree.Pattern | null
children: Child[]
parent: SvelteAwaitBlock
}
/** Node of await catch block. e.g. `{:catch}` */
export interface SvelteAwaitCatchBlock extends BaseNode {
/** Node of await then block. e.g. `{:then}` */
export interface SvelteAwaitThenBlockAlone extends BaseSvelteAwaitThenBlock {
awaitThen: false
parent: SvelteAwaitBlockAwaitPending
}
/** Node of await then block. e.g. `{#await ... then ...}` */
export interface SvelteAwaitThenBlockAwaitThen
extends BaseSvelteAwaitThenBlock {
awaitThen: true
parent: SvelteAwaitBlockAwaitThen
}

/** Node of await catch block. e.g. `{:catch}`, `{#await ... catch ... }` */
export type SvelteAwaitCatchBlock =
| SvelteAwaitCatchBlockAlone
| SvelteAwaitCatchBlockAwaitCatch
interface BaseSvelteAwaitCatchBlock extends BaseNode {
type: "SvelteAwaitCatchBlock"
awaitCatch: boolean
error: ESTree.Pattern | null
children: Child[]
parent: SvelteAwaitBlock
}
/** Node of await catch block. e.g. `{:catch}` */
export interface SvelteAwaitCatchBlockAlone extends BaseSvelteAwaitCatchBlock {
awaitCatch: false
parent: SvelteAwaitBlockAwaitPending | SvelteAwaitBlockAwaitThen
}
/** Node of await catch block. e.g. `{#await ... catch ... }` */
export interface SvelteAwaitCatchBlockAwaitCatch
extends BaseSvelteAwaitCatchBlock {
awaitCatch: true
error: ESTree.Pattern | null
children: Child[]
parent: SvelteAwaitBlockAwaitCatch
}
/** Node of key block. e.g. `{#key}` */
export interface SvelteKeyBlock extends BaseNode {
type: "SvelteKeyBlock"
Expand All @@ -359,7 +461,7 @@ export interface SvelteKeyBlock extends BaseNode {
| SvelteProgram
| SvelteElement
| SvelteIfBlock
| SvelteElseBlock
| SvelteElseBlockAlone
| SvelteEachBlock
| SvelteAwaitPendingBlock
| SvelteAwaitThenBlock
Expand All @@ -374,7 +476,7 @@ export interface SvelteHTMLComment extends BaseNode {
| SvelteProgram
| SvelteElement
| SvelteIfBlock
| SvelteElseBlock
| SvelteElseBlockAlone
| SvelteEachBlock
| SvelteAwaitPendingBlock
| SvelteAwaitThenBlock
Expand Down
Loading