diff --git a/CHANGELOG.md b/CHANGELOG.md
index c6075af..dca41bd 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,9 @@
# prettier-plugin-svelte changelog
+## 3.3.3 (unreleased)
+
+- (fix) Svelte 5: ensure bind get/set is broken up correctly when too long
+
## 3.3.2
- (fix) Svelte 5: handle type annotations on Svelte control flow blocks
diff --git a/src/embed.ts b/src/embed.ts
index de49469..8301b16 100644
--- a/src/embed.ts
+++ b/src/embed.ts
@@ -128,9 +128,11 @@ export function embed(path: FastPath, _options: Options) {
printJS(parent, 'expression', {});
break;
case 'ConstTag':
- case 'Binding':
printJS(parent, 'expression', { removeParentheses: true });
break;
+ case 'Binding':
+ printJS(parent, 'expression', { removeParentheses: true, surroundWithSoftline: true });
+ break;
case 'RenderTag':
if (node === parent.expression) {
// TODO: remove this if block at some point, snippet API changed in .next-..
@@ -196,6 +198,9 @@ export function embed(path: FastPath, _options: Options) {
throw new Error('Prettier AST changed, asFunction logic needs to change');
}
}
+ if (node.surroundWithSoftline) {
+ docs = group(indent([softline, group(docs), dedent(softline)]));
+ }
return docs;
} catch (e) {
return getText(node, options, true);
@@ -409,6 +414,7 @@ function printJS(
forceSingleQuote?: boolean;
forceSingleLine?: boolean;
removeParentheses?: boolean;
+ surroundWithSoftline?: boolean;
},
) {
const part = node[name] as BaseNode | undefined;
@@ -419,4 +425,5 @@ function printJS(
part.forceSingleQuote = options.forceSingleQuote;
part.forceSingleLine = options.forceSingleLine;
part.removeParentheses = options.removeParentheses;
+ part.surroundWithSoftline = options.surroundWithSoftline;
}
diff --git a/src/print/nodes.ts b/src/print/nodes.ts
index c14c96b..6988c04 100644
--- a/src/print/nodes.ts
+++ b/src/print/nodes.ts
@@ -11,6 +11,8 @@ export interface BaseNode {
forceSingleLine?: boolean;
/** Whether or not to remove outer `()` when printing as JS */
removeParentheses?: boolean;
+ /** Whether or not to surround the result with a group and softline so that an exceeding print with keeps the output on the same line, if possible */
+ surroundWithSoftline?: boolean;
}
export interface FragmentNode extends BaseNode {
diff --git a/test/printer/samples/binding-get-set.html.skip b/test/printer/samples/binding-get-set.html.skip
index 1b070b8..10bd690 100644
--- a/test/printer/samples/binding-get-set.html.skip
+++ b/test/printer/samples/binding-get-set.html.skip
@@ -1,3 +1,20 @@
value, (v) => (value = v)} />
+
+
+
+
+
+ getter_setter_each_need_own_line,
+ (v) => (getter_setter_each_need_own_line = v)
+ }
+/>
diff --git a/test/printer/samples/sort-order-none3.only.html b/test/printer/samples/sort-order-none3.html
similarity index 100%
rename from test/printer/samples/sort-order-none3.only.html
rename to test/printer/samples/sort-order-none3.html