Skip to content

Commit a11a634

Browse files
authored
Merge pull request #144 from ony3000/support-prettier-plugin-svelte-v4
Support prettier-plugin-svelte v4
2 parents 4804ddf + 50e96a4 commit a11a634

2 files changed

Lines changed: 35 additions & 11 deletions

File tree

src/core-parts/finder.ts

Lines changed: 34 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -853,20 +853,30 @@ function handleSvelteAttribute(ctx: CaseHandlerContext) {
853853
ctx.node,
854854
z.object({
855855
name: z.string(),
856-
value: z.array(
856+
value: z.union([
857+
z.array(
858+
z.object({
859+
type: z.string(),
860+
start: z.number(),
861+
end: z.number(),
862+
}),
863+
),
857864
z.object({
858865
type: z.string(),
859866
start: z.number(),
860867
end: z.number(),
861868
}),
862-
),
869+
]),
863870
}),
864871
) &&
865872
ctx.supportedAttributes.includes(ctx.node.name)
866873
) {
867874
ctx.keywordStartingNodes.push(ctx.currentASTNode);
868875

869-
const hasExpression = ctx.node.value.some((childNode) => childNode.type === 'MustacheTag');
876+
const childNodes = Array.isArray(ctx.node.value) ? ctx.node.value : [ctx.node.value];
877+
const hasExpression = childNodes.some(
878+
(childNode) => childNode.type === 'MustacheTag' || childNode.type === 'ExpressionTag',
879+
);
870880

871881
if (hasExpression) {
872882
let minRangeStart = Infinity;
@@ -1842,6 +1852,7 @@ const parserCaseHandlers: ParserCaseHandlers = {
18421852
Line: handleTypeScriptBlock,
18431853
Attribute: handleSvelteAttribute,
18441854
Comment: handleSvelteComment,
1855+
ExpressionTag: handleSvelteMustacheTag,
18451856
MustacheTag: handleSvelteMustacheTag,
18461857
RefinedScript: handleSvelteRefinedScript,
18471858
Text: handleSvelteText,
@@ -1944,15 +1955,18 @@ export function findTargetClassNameNodesBasedOnJavaScript(
19441955
recursiveProps = ['arguments'];
19451956
break;
19461957
}
1958+
case 'Fragment':
1959+
case 'JSXFragment': {
1960+
recursiveProps = ['children', 'nodes'];
1961+
break;
1962+
}
19471963
case 'CatchBlock':
19481964
case 'ElseBlock':
1949-
case 'Fragment':
1950-
case 'JSXFragment':
19511965
case 'KeyBlock':
19521966
case 'PendingBlock':
19531967
case 'SnippetBlock':
19541968
case 'ThenBlock': {
1955-
recursiveProps = ['children'];
1969+
recursiveProps = ['children', 'body', 'fragment'];
19561970
break;
19571971
}
19581972
case 'ChainExpression':
@@ -1966,9 +1980,14 @@ export function findTargetClassNameNodesBasedOnJavaScript(
19661980
recursiveProps = ['consequent', 'alternate'];
19671981
break;
19681982
}
1983+
case 'Component':
19691984
case 'Element':
1970-
case 'InlineComponent': {
1971-
recursiveProps = ['attributes', 'children'];
1985+
case 'InlineComponent':
1986+
case 'RegularElement':
1987+
case 'SvelteComponent':
1988+
case 'SvelteElement':
1989+
case 'SvelteFragment': {
1990+
recursiveProps = ['attributes', 'children', 'fragment'];
19721991
break;
19731992
}
19741993
case 'ExportDefaultDeclaration':
@@ -1980,9 +1999,12 @@ export function findTargetClassNameNodesBasedOnJavaScript(
19801999
recursiveProps = ['program'];
19812000
break;
19822001
}
1983-
case 'EachBlock':
2002+
case 'EachBlock': {
2003+
recursiveProps = ['children', 'else', 'body', 'fallback', 'context'];
2004+
break;
2005+
}
19842006
case 'IfBlock': {
1985-
recursiveProps = ['children', 'else'];
2007+
recursiveProps = ['children', 'else', 'consequent', 'alternate', 'test'];
19862008
break;
19872009
}
19882010
case 'JSXElement': {
@@ -1997,6 +2019,7 @@ export function findTargetClassNameNodesBasedOnJavaScript(
19972019
recursiveProps = ['leadingComments'];
19982020
break;
19992021
}
2022+
case 'ExpressionTag':
20002023
case 'MustacheTag': {
20012024
recursiveProps = ['expression'];
20022025
break;
@@ -2019,7 +2042,7 @@ export function findTargetClassNameNodesBasedOnJavaScript(
20192042
break;
20202043
}
20212044
case 'Root': {
2022-
recursiveProps = ['html', 'instance'];
2045+
recursiveProps = ['html', 'instance', 'module', 'fragment'];
20232046
break;
20242047
}
20252048
case 'Script': {

src/core-parts/parser.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@ function refineSvelteAst(preprocessedText: string, ast: AST) {
103103
}
104104

105105
recursion(ast.html);
106+
recursion(ast.fragment);
106107

107108
ast.instance = {
108109
type: 'RefinedScript',

0 commit comments

Comments
 (0)