diff --git a/.changeset/happy-countries-dance.md b/.changeset/happy-countries-dance.md new file mode 100644 index 0000000000..641cf21fd8 --- /dev/null +++ b/.changeset/happy-countries-dance.md @@ -0,0 +1,5 @@ +--- +'svelte': patch +--- + +chore: remove some todos diff --git a/packages/svelte/src/compiler/legacy.js b/packages/svelte/src/compiler/legacy.js index 85345bca4a..817ade97f7 100644 --- a/packages/svelte/src/compiler/legacy.js +++ b/packages/svelte/src/compiler/legacy.js @@ -190,7 +190,7 @@ export function convert(source, ast) { ClassDirective(node) { return { ...node, type: 'Class' }; }, - Comment(node) { + TemplateComment(node) { return { ...node, ignores: extract_svelte_ignore(node.start, node.data, false) diff --git a/packages/svelte/src/compiler/migrate/index.js b/packages/svelte/src/compiler/migrate/index.js index 6b2e6cda70..eeda67f29c 100644 --- a/packages/svelte/src/compiler/migrate/index.js +++ b/packages/svelte/src/compiler/migrate/index.js @@ -1362,7 +1362,7 @@ const template = { ); } }, - Comment(node, { state }) { + TemplateComment(node, { state }) { const migrated = migrate_svelte_ignore(node.data); if (migrated !== node.data) { state.str.overwrite(node.start + ''.length, migrated); @@ -1707,14 +1707,14 @@ function extract_type_and_comment(declarator, state, path) { } // Ensure modifiers are applied in the same order as Svelte 4 -const modifier_order = [ +const modifier_order = /** @type {const} */ ([ 'preventDefault', 'stopPropagation', 'stopImmediatePropagation', 'self', 'trusted', 'once' -]; +]); /** * @param {AST.RegularElement | AST.SvelteElement | AST.SvelteWindow | AST.SvelteDocument | AST.SvelteBody} element diff --git a/packages/svelte/src/compiler/phases/1-parse/index.js b/packages/svelte/src/compiler/phases/1-parse/index.js index 77cc2bf3fa..a7482b2caf 100644 --- a/packages/svelte/src/compiler/phases/1-parse/index.js +++ b/packages/svelte/src/compiler/phases/1-parse/index.js @@ -1,5 +1,4 @@ /** @import { AST } from '#compiler' */ -/** @import { Comment } from 'estree' */ // @ts-expect-error acorn type definitions are borked in the release we use import { isIdentifierStart, isIdentifierChar } from 'acorn'; import fragment from './state/fragment.js'; diff --git a/packages/svelte/src/compiler/phases/1-parse/state/element.js b/packages/svelte/src/compiler/phases/1-parse/state/element.js index 87332f647d..97c0da7e79 100644 --- a/packages/svelte/src/compiler/phases/1-parse/state/element.js +++ b/packages/svelte/src/compiler/phases/1-parse/state/element.js @@ -59,7 +59,7 @@ export default function element(parser) { parser.eat('-->', true); parser.append({ - type: 'Comment', + type: 'TemplateComment', start, end: parser.index, data @@ -302,7 +302,7 @@ export default function element(parser) { if (is_top_level_script_or_style) { parser.eat('>', true); - /** @type {AST.Comment | null} */ + /** @type {AST.TemplateComment | null} */ let prev_comment = null; for (let i = current.fragment.nodes.length - 1; i >= 0; i--) { const node = current.fragment.nodes[i]; @@ -311,7 +311,7 @@ export default function element(parser) { break; } - if (node.type === 'Comment') { + if (node.type === 'TemplateComment') { prev_comment = node; break; } else if (node.type !== 'Text' || node.data.trim()) { diff --git a/packages/svelte/src/compiler/phases/2-analyze/index.js b/packages/svelte/src/compiler/phases/2-analyze/index.js index cd44fd998a..58ba7aed93 100644 --- a/packages/svelte/src/compiler/phases/2-analyze/index.js +++ b/packages/svelte/src/compiler/phases/2-analyze/index.js @@ -89,13 +89,13 @@ const visitors = { /** @type {string[]} */ const ignores = []; - if (parent?.type === 'Fragment' && node.type !== 'Comment' && node.type !== 'Text') { + if (parent?.type === 'Fragment' && node.type !== 'TemplateComment' && node.type !== 'Text') { const idx = parent.nodes.indexOf(/** @type {any} */ (node)); for (let i = idx - 1; i >= 0; i--) { const prev = parent.nodes[i]; - if (prev.type === 'Comment') { + if (prev.type === 'TemplateComment') { ignores.push( ...extract_svelte_ignore( prev.start + 4 /* '` : escape_html(node.data); + node.type === 'TemplateComment' ? `` : escape_html(node.data); } else { const evaluated = state.scope.evaluate(node.expression); @@ -68,7 +68,7 @@ export function process_children(nodes, { visit, state }) { for (let i = 0; i < nodes.length; i += 1) { const node = nodes[i]; - if (node.type === 'Text' || node.type === 'Comment' || node.type === 'ExpressionTag') { + if (node.type === 'Text' || node.type === 'TemplateComment' || node.type === 'ExpressionTag') { sequence.push(node); } else { if (sequence.length > 0) { diff --git a/packages/svelte/src/compiler/phases/3-transform/utils.js b/packages/svelte/src/compiler/phases/3-transform/utils.js index 1445ce3aa6..29f8c08473 100644 --- a/packages/svelte/src/compiler/phases/3-transform/utils.js +++ b/packages/svelte/src/compiler/phases/3-transform/utils.js @@ -165,7 +165,7 @@ export function clean_nodes( const regular = []; for (const node of nodes) { - if (node.type === 'Comment' && !preserve_comments) { + if (node.type === 'TemplateComment' && !preserve_comments) { continue; } @@ -285,7 +285,7 @@ export function clean_nodes( // and would still call node.replaceWith() on the script tag, it would be a no-op because the script tag has no parent. if (trimmed.length === 1 && first.type === 'RegularElement' && first.name === 'script') { trimmed.push({ - type: 'Comment', + type: 'TemplateComment', data: '', start: -1, end: -1 diff --git a/packages/svelte/src/compiler/types/css.d.ts b/packages/svelte/src/compiler/types/css.d.ts index 154a06ffb1..da15731f4a 100644 --- a/packages/svelte/src/compiler/types/css.d.ts +++ b/packages/svelte/src/compiler/types/css.d.ts @@ -15,7 +15,7 @@ export namespace _CSS { end: number; styles: string; /** Possible comment atop the style tag */ - comment: AST.Comment | null; + comment: AST.TemplateComment | null; }; } diff --git a/packages/svelte/src/compiler/types/legacy-nodes.d.ts b/packages/svelte/src/compiler/types/legacy-nodes.d.ts index 389fc92332..6db84840b6 100644 --- a/packages/svelte/src/compiler/types/legacy-nodes.d.ts +++ b/packages/svelte/src/compiler/types/legacy-nodes.d.ts @@ -210,7 +210,7 @@ export interface LegacyWindow extends BaseElement { } export interface LegacyComment extends BaseNode { - type: 'Comment'; + type: 'TemplateComment'; /** the contents of the comment */ data: string; /** any svelte-ignore directives — would result in ['a', 'b', 'c'] */ diff --git a/packages/svelte/src/compiler/types/template.d.ts b/packages/svelte/src/compiler/types/template.d.ts index de06a41469..47c0fba195 100644 --- a/packages/svelte/src/compiler/types/template.d.ts +++ b/packages/svelte/src/compiler/types/template.d.ts @@ -43,7 +43,7 @@ export namespace AST { export interface Fragment { type: 'Fragment'; - nodes: Array; + nodes: Array; /** @internal */ metadata: { /** @@ -144,9 +144,8 @@ export namespace AST { } /** An HTML comment */ - // TODO rename to disambiguate - export interface Comment extends BaseNode { - type: 'Comment'; + export interface TemplateComment extends BaseNode { + type: 'TemplateComment'; /** the contents of the comment */ data: string; } @@ -247,7 +246,17 @@ export namespace AST { name: string; /** The 'y' in `on:x={y}` */ expression: null | Expression; - modifiers: string[]; // TODO specify + modifiers: Array< + | 'capture' + | 'nonpassive' + | 'once' + | 'passive' + | 'preventDefault' + | 'self' + | 'stopImmediatePropagation' + | 'stopPropagation' + | 'trusted' + >; /** @internal */ metadata: { expression: ExpressionMetadata; @@ -604,7 +613,7 @@ export namespace AST { | AST.SpreadAttribute | Directive | AST.AttachTag - | AST.Comment + | AST.TemplateComment | Block; export type SvelteNode = Node | TemplateNode | AST.Fragment | _CSS.Node | Script; diff --git a/packages/svelte/tests/parser-legacy/samples/comment-with-ignores/output.json b/packages/svelte/tests/parser-legacy/samples/comment-with-ignores/output.json index cf2dc9f752..8b067e5e13 100644 --- a/packages/svelte/tests/parser-legacy/samples/comment-with-ignores/output.json +++ b/packages/svelte/tests/parser-legacy/samples/comment-with-ignores/output.json @@ -5,7 +5,7 @@ "end": 31, "children": [ { - "type": "Comment", + "type": "TemplateComment", "start": 0, "end": 31, "data": " svelte-ignore foo, bar ", diff --git a/packages/svelte/tests/parser-legacy/samples/comment/output.json b/packages/svelte/tests/parser-legacy/samples/comment/output.json index 6017db404c..ce455d5441 100644 --- a/packages/svelte/tests/parser-legacy/samples/comment/output.json +++ b/packages/svelte/tests/parser-legacy/samples/comment/output.json @@ -5,7 +5,7 @@ "end": 18, "children": [ { - "type": "Comment", + "type": "TemplateComment", "start": 0, "end": 18, "data": " a comment ", diff --git a/packages/svelte/tests/parser-legacy/samples/dynamic-element-string/output.json b/packages/svelte/tests/parser-legacy/samples/dynamic-element-string/output.json index 9ba15d6044..9167aba265 100644 --- a/packages/svelte/tests/parser-legacy/samples/dynamic-element-string/output.json +++ b/packages/svelte/tests/parser-legacy/samples/dynamic-element-string/output.json @@ -21,7 +21,7 @@ "data": "\n" }, { - "type": "Comment", + "type": "TemplateComment", "start": 45, "end": 69, "data": " prettier-ignore ", @@ -83,7 +83,7 @@ "data": "\n" }, { - "type": "Comment", + "type": "TemplateComment", "start": 162, "end": 186, "data": " prettier-ignore ", diff --git a/packages/svelte/tests/parser-modern/samples/comment-before-script/output.json b/packages/svelte/tests/parser-modern/samples/comment-before-script/output.json index 1aca0ce036..c897a268ab 100644 --- a/packages/svelte/tests/parser-modern/samples/comment-before-script/output.json +++ b/packages/svelte/tests/parser-modern/samples/comment-before-script/output.json @@ -8,7 +8,7 @@ "type": "Fragment", "nodes": [ { - "type": "Comment", + "type": "TemplateComment", "start": 0, "end": 27, "data": "should not error out" diff --git a/packages/svelte/types/index.d.ts b/packages/svelte/types/index.d.ts index 9ea45af7e6..5a606f8147 100644 --- a/packages/svelte/types/index.d.ts +++ b/packages/svelte/types/index.d.ts @@ -1145,7 +1145,7 @@ declare module 'svelte/compiler' { export interface Fragment { type: 'Fragment'; - nodes: Array; + nodes: Array; } export interface Root extends BaseNode { @@ -1220,9 +1220,8 @@ declare module 'svelte/compiler' { } /** An HTML comment */ - // TODO rename to disambiguate - export interface Comment extends BaseNode { - type: 'Comment'; + export interface TemplateComment extends BaseNode { + type: 'TemplateComment'; /** the contents of the comment */ data: string; } @@ -1296,7 +1295,17 @@ declare module 'svelte/compiler' { name: string; /** The 'y' in `on:x={y}` */ expression: null | Expression; - modifiers: string[]; + modifiers: Array< + | 'capture' + | 'nonpassive' + | 'once' + | 'passive' + | 'preventDefault' + | 'self' + | 'stopImmediatePropagation' + | 'stopPropagation' + | 'trusted' + >; } /** A `style:` directive */ @@ -1544,7 +1553,7 @@ declare module 'svelte/compiler' { | AST.SpreadAttribute | Directive | AST.AttachTag - | AST.Comment + | AST.TemplateComment | Block; export type SvelteNode = Node | TemplateNode | AST.Fragment | _CSS.Node | Script; @@ -1599,7 +1608,7 @@ declare module 'svelte/compiler' { end: number; styles: string; /** Possible comment atop the style tag */ - comment: AST.Comment | null; + comment: AST.TemplateComment | null; }; }