From 3561be272acc880e44243be13d060ef8ac391872 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Thu, 25 Jul 2024 14:28:17 -0400 Subject: [PATCH] simplify --- .../3-transform/server/transform-server.js | 2 - .../server/visitors/LetDirective.js | 42 ------------------- .../server/visitors/SlotElement.js | 8 ---- .../server/visitors/SvelteFragment.js | 19 +-------- .../server/visitors/shared/element.js | 8 +--- 5 files changed, 3 insertions(+), 76 deletions(-) delete mode 100644 packages/svelte/src/compiler/phases/3-transform/server/visitors/LetDirective.js diff --git a/packages/svelte/src/compiler/phases/3-transform/server/transform-server.js b/packages/svelte/src/compiler/phases/3-transform/server/transform-server.js index f18df26eb4..af625475f5 100644 --- a/packages/svelte/src/compiler/phases/3-transform/server/transform-server.js +++ b/packages/svelte/src/compiler/phases/3-transform/server/transform-server.js @@ -23,7 +23,6 @@ import { Identifier } from './visitors/Identifier.js'; import { IfBlock } from './visitors/IfBlock.js'; import { KeyBlock } from './visitors/KeyBlock.js'; import { LabeledStatementLegacy } from './visitors/LabeledStatement.js'; -import { LetDirective } from './visitors/LetDirective.js'; import { MemberExpressionRunes } from './visitors/MemberExpression.js'; import { PropertyDefinitionRunes } from './visitors/PropertyDefinition.js'; import { RegularElement } from './visitors/RegularElement.js'; @@ -79,7 +78,6 @@ const template_visitors = { HtmlTag, IfBlock, KeyBlock, - LetDirective, RegularElement, RenderTag, SlotElement, diff --git a/packages/svelte/src/compiler/phases/3-transform/server/visitors/LetDirective.js b/packages/svelte/src/compiler/phases/3-transform/server/visitors/LetDirective.js deleted file mode 100644 index 50868ab18b..0000000000 --- a/packages/svelte/src/compiler/phases/3-transform/server/visitors/LetDirective.js +++ /dev/null @@ -1,42 +0,0 @@ -/** @import { LetDirective } from '#compiler' */ -/** @import { ComponentContext } from '../types.js' */ -import * as b from '../../../../utils/builders.js'; - -/** - * @param {LetDirective} node - * @param {ComponentContext} context - */ -export function LetDirective(node, context) { - return b.empty; - - if (node.expression === null || node.expression.type === 'Identifier') { - const name = node.expression === null ? node.name : node.expression.name; - return b.const(name, b.member(b.id('$$slotProps'), b.id(node.name))); - } - - const name = context.state.scope.generate(node.name); - const bindings = context.state.scope.get_bindings(node); - - for (const binding of bindings) { - context.state.getters[binding.node.name] = b.member(b.id(name), b.id(binding.node.name)); - } - - return b.const( - name, - b.call( - b.thunk( - b.block([ - b.let( - node.expression.type === 'ObjectExpression' - ? // @ts-expect-error types don't match, but it can't contain spread elements and the structure is otherwise fine - b.object_pattern(node.expression.properties) - : // @ts-expect-error types don't match, but it can't contain spread elements and the structure is otherwise fine - b.array_pattern(node.expression.elements), - b.member(b.id('$$slotProps'), b.id(node.name)) - ), - b.return(b.object(bindings.map((binding) => b.init(binding.node.name, binding.node)))) - ]) - ) - ) - ); -} diff --git a/packages/svelte/src/compiler/phases/3-transform/server/visitors/SlotElement.js b/packages/svelte/src/compiler/phases/3-transform/server/visitors/SlotElement.js index d226e7bd27..49ba29a0ad 100644 --- a/packages/svelte/src/compiler/phases/3-transform/server/visitors/SlotElement.js +++ b/packages/svelte/src/compiler/phases/3-transform/server/visitors/SlotElement.js @@ -15,9 +15,6 @@ export function SlotElement(node, context) { /** @type {Expression[]} */ const spreads = []; - /** @type {ExpressionStatement[]} */ - const lets = []; - /** @type {Expression} */ let expression = b.call('$.default_slot', b.id('$$props')); @@ -36,14 +33,9 @@ export function SlotElement(node, context) { props.push(b.init(attribute.name, value)); } } - } else if (attribute.type === 'LetDirective') { - lets.push(/** @type {ExpressionStatement} */ (context.visit(attribute))); } } - // Let bindings first, they can be used on attributes - context.state.init.push(...lets); - const props_expression = spreads.length === 0 ? b.object(props) diff --git a/packages/svelte/src/compiler/phases/3-transform/server/visitors/SvelteFragment.js b/packages/svelte/src/compiler/phases/3-transform/server/visitors/SvelteFragment.js index 310cc567a9..1b73ae7cfc 100644 --- a/packages/svelte/src/compiler/phases/3-transform/server/visitors/SvelteFragment.js +++ b/packages/svelte/src/compiler/phases/3-transform/server/visitors/SvelteFragment.js @@ -1,4 +1,4 @@ -/** @import { BlockStatement, ExpressionStatement } from 'estree' */ +/** @import { BlockStatement } from 'estree' */ /** @import { SvelteFragment } from '#compiler' */ /** @import { ComponentContext } from '../types' */ @@ -7,20 +7,5 @@ * @param {ComponentContext} context */ export function SvelteFragment(node, context) { - const child_state = { - ...context.state, - getters: { ...context.state.getters } - }; - - for (const attribute of node.attributes) { - if (attribute.type === 'LetDirective') { - context.state.template.push( - /** @type {ExpressionStatement} */ (context.visit(attribute, child_state)) - ); - } - } - - const block = /** @type {BlockStatement} */ (context.visit(node.fragment, child_state)); - - context.state.template.push(block); + context.state.template.push(/** @type {BlockStatement} */ (context.visit(node.fragment))); } diff --git a/packages/svelte/src/compiler/phases/3-transform/server/visitors/shared/element.js b/packages/svelte/src/compiler/phases/3-transform/server/visitors/shared/element.js index 923cc5d512..fbfa4497b0 100644 --- a/packages/svelte/src/compiler/phases/3-transform/server/visitors/shared/element.js +++ b/packages/svelte/src/compiler/phases/3-transform/server/visitors/shared/element.js @@ -38,9 +38,6 @@ export function serialize_element_attributes(node, context) { /** @type {StyleDirective[]} */ const style_directives = []; - /** @type {ExpressionStatement[]} */ - const lets = []; - /** @type {Expression | null} */ let content = null; @@ -185,7 +182,7 @@ export function serialize_element_attributes(node, context) { } else if (attribute.type === 'StyleDirective') { style_directives.push(attribute); } else if (attribute.type === 'LetDirective') { - lets.push(/** @type {ExpressionStatement} */ (context.visit(attribute))); + // do nothing, these are handled inside `serialize_inline_component` } else { context.visit(attribute); } @@ -212,9 +209,6 @@ export function serialize_element_attributes(node, context) { } } - // Let bindings first, they can be used on attributes - context.state.init.push(...lets); - if (has_spread) { serialize_element_spread_attributes( node,