`SpreadAttribute`, directive shorthands

print
ComputerGuy 3 months ago
parent 1e7b439533
commit afd3cb4b91

@ -1,5 +1,4 @@
/** @import { AST } from '#compiler'; */ /** @import { AST } from '#compiler'; */
/** @import { _CSS } from '../types/css.js'; */
/** @import { Visitors } from 'esrap' */ /** @import { Visitors } from 'esrap' */
import * as esrap from 'esrap'; import * as esrap from 'esrap';
import ts from 'esrap/languages/ts'; import ts from 'esrap/languages/ts';
@ -17,7 +16,7 @@ export function print(ast) {
}); });
} }
/** @type {Visitors<AST.SvelteNode | _CSS.Node, any>} */ /** @type {Visitors<AST.SvelteNode | AST.CSS.Node, any>} */
const visitors = { const visitors = {
Root(node, context) { Root(node, context) {
if (node.options) { if (node.options) {
@ -207,7 +206,10 @@ const visitors = {
ClassDirective(node, context) { ClassDirective(node, context) {
context.write(`class:${node.name}`); context.write(`class:${node.name}`);
if (node.expression !== null) { if (
node.expression !== null &&
!(node.expression.type === 'Identifier' && node.expression.name === node.name)
) {
context.write('={'); context.write('={');
context.visit(node.expression); context.visit(node.expression);
context.write('}'); context.write('}');
@ -299,7 +301,10 @@ const visitors = {
LetDirective(node, context) { LetDirective(node, context) {
context.write(`let:${node.name}`); context.write(`let:${node.name}`);
if (node.expression !== null) { if (
node.expression !== null &&
!(node.expression.type === 'Identifier' && node.expression.name === node.name)
) {
context.write('={'); context.write('={');
context.visit(node.expression); context.visit(node.expression);
context.write('}'); context.write('}');
@ -315,7 +320,10 @@ const visitors = {
for (const modifier of node.modifiers) { for (const modifier of node.modifiers) {
context.write(`|${modifier}`); context.write(`|${modifier}`);
} }
if (node.expression !== null) { if (
node.expression !== null &&
!(node.expression.type === 'Identifier' && node.expression.name === node.name)
) {
context.write('={'); context.write('={');
context.visit(node.expression); context.visit(node.expression);
context.write('}'); context.write('}');
@ -443,12 +451,21 @@ const visitors = {
context.write('{/snippet}'); context.write('{/snippet}');
}, },
SpreadAttribute(node, context) {
context.write('{...');
context.visit(node.expression);
context.write('}');
},
StyleDirective(node, context) { StyleDirective(node, context) {
context.write(`style:${node.name}`); context.write(`style:${node.name}`);
for (const modifier of node.modifiers) { for (const modifier of node.modifiers) {
context.write(`|${modifier}`); context.write(`|${modifier}`);
} }
if (node.expression !== null) { if (
node.expression !== null &&
!(node.expression.type === 'Identifier' && node.expression.name === node.name)
) {
context.write('={'); context.write('={');
context.visit(node.expression); context.visit(node.expression);
context.write('}'); context.write('}');
@ -498,7 +515,10 @@ const visitors = {
for (const modifier of node.modifiers) { for (const modifier of node.modifiers) {
context.write(`|${modifier}`); context.write(`|${modifier}`);
} }
if (node.expression !== null) { if (
node.expression !== null &&
!(node.expression.type === 'Identifier' && node.expression.name === node.name)
) {
context.write('={'); context.write('={');
context.visit(node.expression); context.visit(node.expression);
context.write('}'); context.write('}');
@ -511,7 +531,10 @@ const visitors = {
UseDirective(node, context) { UseDirective(node, context) {
context.write(`use:${node.name}`); context.write(`use:${node.name}`);
if (node.expression !== null) { if (
node.expression !== null &&
!(node.expression.type === 'Identifier' && node.expression.name === node.name)
) {
context.write('={'); context.write('={');
context.visit(node.expression); context.visit(node.expression);
context.write('}'); context.write('}');

Loading…
Cancel
Save