Remove indention in logical expression in Boolean() type coercion (#18087)

Co-authored-by: fisker <lionkay@gmail.com>
This commit is contained in:
Konv Suuandfisker authored and GitHub committed 2025-10-24 21:42:46 +08:00
1 parent 12607085aa
commit c93e014c28
5 files changed
+504 -1

No files matched your search

+42
View File
@@ -0,0 +1,42 @@
#### Remove indention in logical expression in `Boolean()` call (#18087 by @kovsu)
Reduce diff when changing a condition to an opposite value, or change between `!!` and `Boolean()`.
<!-- prettier-ignore -->
```js
// Input
const foo = Boolean(
a_long_long_condition ||
a_long_long_long_condition ||
a_long_long_long_condition
);
const bar = !!(
a_long_long_condition ||
a_long_long_long_condition ||
a_long_long_long_condition
);
// Prettier stable
const foo = Boolean(
a_long_long_condition ||
a_long_long_long_condition ||
a_long_long_long_condition,
);
const bar = !!(
a_long_long_condition ||
a_long_long_long_condition ||
a_long_long_long_condition
);
// Prettier main
const foo = Boolean(
a_long_long_condition ||
a_long_long_long_condition ||
a_long_long_long_condition
);
const bar = !!(
a_long_long_condition ||
a_long_long_long_condition ||
a_long_long_long_condition
);
```
+25 -1
View File
@@ -110,7 +110,8 @@ function printBinaryishExpression(path, options, print) {
grandparent.type !== "ReturnStatement" &&
grandparent.type !== "ThrowStatement" &&
!isCallExpression(grandparent)) ||
parent.type === "TemplateLiteral";
parent.type === "TemplateLiteral" ||
isBooleanTypeCoercion(path);
const shouldIndentIfInlining =
parent.type === "AssignmentExpression" ||
@@ -391,4 +392,27 @@ function isVueFilterSequenceExpression(path, options) {
);
}
/**
@returns {boolean}
*/
function isBooleanTypeCoercion(path) {
if (path.key !== "arguments") {
return false;
}
const { parent } = path;
if (
!(
isCallExpression(parent) &&
!parent.optional &&
parent.arguments.length === 1
)
) {
return false;
}
const { callee } = parent;
return callee.type === "Identifier" && callee.name === "Boolean";
}
export { printBinaryishExpression, shouldInlineLogicalExpression };
@@ -0,0 +1,366 @@
// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing
exports[`boolean.js - {"experimentalOperatorPosition":"start"} format 1`] = `
====================================options=====================================
experimentalOperatorPosition: "start"
parsers: ["babel", "typescript", "flow"]
printWidth: 80
| printWidth
=====================================input======================================
a = Boolean(
a_long_long_long_long_condition || a_long_long_long_long_condition || a_long_long_long_long_condition,
);
a = Boolean(
a_long_long_long_long_condition || a_long_long_long_long_condition || a_long_long_long_long_condition,
)?.toString();
a = new Boolean(
a_long_long_long_long_condition || a_long_long_long_long_condition || a_long_long_long_long_condition,
);
a = !(
a_long_long_long_long_condition || a_long_long_long_long_condition || a_long_long_long_long_condition
);
a = !!(
a_long_long_long_long_condition || a_long_long_long_long_condition || a_long_long_long_long_condition
);
a = Boolean(
a_long_long_long_long_condition || a_long_long_long_long_condition || a_long_long_long_long_condition,
anotherArgument,
);
a = Boolean(
a_long_long_long_long_condition || a_long_long_long_long_condition || a_long_long_long_long_condition,
anotherArgument,
);
a = new Foo(
a_long_long_long_long_condition || a_long_long_long_long_condition || a_long_long_long_long_condition,
anotherArgument,
);
// Different operators
a = Boolean(
a_long_long_long_long_condition && a_long_long_long_long_condition && a_long_long_long_long_condition,
);
a = Boolean(
a_long_long_long_long_condition ?? a_long_long_long_long_condition ?? a_long_long_long_long_condition,
);
a = Boolean(
a_long_long_long_long_condition + a_long_long_long_long_condition + a_long_long_long_long_condition,
);
// Not argument
a = (
a_long_long_long_long_condition || a_long_long_long_long_condition || a_long_long_long_long_condition
)(Boolean);
a = new (
a_long_long_long_long_condition || a_long_long_long_long_condition || a_long_long_long_long_condition
)(Foo);
// Not \`Boolean\`
a = not_Boolean(
a_long_long_long_long_condition || a_long_long_long_long_condition || a_long_long_long_long_condition,
);
// Nested
a = Boolean(
(a_long_long_long_long_condition || a_long_long_long_long_condition || a_long_long_long_long_condition)
&&
(a_long_long_long_long_condition || a_long_long_long_long_condition || a_long_long_long_long_condition)
);
a = Boolean(
(a_long_long_long_long_condition || a_long_long_long_long_condition || a_long_long_long_long_condition)
||
(a_long_long_long_long_condition || a_long_long_long_long_condition || a_long_long_long_long_condition)
);
a = Boolean(Boolean(
a_long_long_long_long_condition || a_long_long_long_long_condition || a_long_long_long_long_condition,
));
=====================================output=====================================
a = Boolean(
a_long_long_long_long_condition
|| a_long_long_long_long_condition
|| a_long_long_long_long_condition,
);
a = Boolean(
a_long_long_long_long_condition
|| a_long_long_long_long_condition
|| a_long_long_long_long_condition,
)?.toString();
a = new Boolean(
a_long_long_long_long_condition
|| a_long_long_long_long_condition
|| a_long_long_long_long_condition,
);
a = !(
a_long_long_long_long_condition
|| a_long_long_long_long_condition
|| a_long_long_long_long_condition
);
a = !!(
a_long_long_long_long_condition
|| a_long_long_long_long_condition
|| a_long_long_long_long_condition
);
a = Boolean(
a_long_long_long_long_condition
|| a_long_long_long_long_condition
|| a_long_long_long_long_condition,
anotherArgument,
);
a = Boolean(
a_long_long_long_long_condition
|| a_long_long_long_long_condition
|| a_long_long_long_long_condition,
anotherArgument,
);
a = new Foo(
a_long_long_long_long_condition
|| a_long_long_long_long_condition
|| a_long_long_long_long_condition,
anotherArgument,
);
// Different operators
a = Boolean(
a_long_long_long_long_condition
&& a_long_long_long_long_condition
&& a_long_long_long_long_condition,
);
a = Boolean(
a_long_long_long_long_condition
?? a_long_long_long_long_condition
?? a_long_long_long_long_condition,
);
a = Boolean(
a_long_long_long_long_condition
+ a_long_long_long_long_condition
+ a_long_long_long_long_condition,
);
// Not argument
a = (
a_long_long_long_long_condition
|| a_long_long_long_long_condition
|| a_long_long_long_long_condition
)(Boolean);
a = new (a_long_long_long_long_condition
|| a_long_long_long_long_condition
|| a_long_long_long_long_condition)(Foo);
// Not \`Boolean\`
a = not_Boolean(
a_long_long_long_long_condition
|| a_long_long_long_long_condition
|| a_long_long_long_long_condition,
);
// Nested
a = Boolean(
(a_long_long_long_long_condition
|| a_long_long_long_long_condition
|| a_long_long_long_long_condition)
&& (a_long_long_long_long_condition
|| a_long_long_long_long_condition
|| a_long_long_long_long_condition),
);
a = Boolean(
a_long_long_long_long_condition
|| a_long_long_long_long_condition
|| a_long_long_long_long_condition
|| a_long_long_long_long_condition
|| a_long_long_long_long_condition
|| a_long_long_long_long_condition,
);
a = Boolean(
Boolean(
a_long_long_long_long_condition
|| a_long_long_long_long_condition
|| a_long_long_long_long_condition,
),
);
================================================================================
`;
exports[`boolean.js format 1`] = `
====================================options=====================================
parsers: ["babel", "typescript", "flow"]
printWidth: 80
| printWidth
=====================================input======================================
a = Boolean(
a_long_long_long_long_condition || a_long_long_long_long_condition || a_long_long_long_long_condition,
);
a = Boolean(
a_long_long_long_long_condition || a_long_long_long_long_condition || a_long_long_long_long_condition,
)?.toString();
a = new Boolean(
a_long_long_long_long_condition || a_long_long_long_long_condition || a_long_long_long_long_condition,
);
a = !(
a_long_long_long_long_condition || a_long_long_long_long_condition || a_long_long_long_long_condition
);
a = !!(
a_long_long_long_long_condition || a_long_long_long_long_condition || a_long_long_long_long_condition
);
a = Boolean(
a_long_long_long_long_condition || a_long_long_long_long_condition || a_long_long_long_long_condition,
anotherArgument,
);
a = Boolean(
a_long_long_long_long_condition || a_long_long_long_long_condition || a_long_long_long_long_condition,
anotherArgument,
);
a = new Foo(
a_long_long_long_long_condition || a_long_long_long_long_condition || a_long_long_long_long_condition,
anotherArgument,
);
// Different operators
a = Boolean(
a_long_long_long_long_condition && a_long_long_long_long_condition && a_long_long_long_long_condition,
);
a = Boolean(
a_long_long_long_long_condition ?? a_long_long_long_long_condition ?? a_long_long_long_long_condition,
);
a = Boolean(
a_long_long_long_long_condition + a_long_long_long_long_condition + a_long_long_long_long_condition,
);
// Not argument
a = (
a_long_long_long_long_condition || a_long_long_long_long_condition || a_long_long_long_long_condition
)(Boolean);
a = new (
a_long_long_long_long_condition || a_long_long_long_long_condition || a_long_long_long_long_condition
)(Foo);
// Not \`Boolean\`
a = not_Boolean(
a_long_long_long_long_condition || a_long_long_long_long_condition || a_long_long_long_long_condition,
);
// Nested
a = Boolean(
(a_long_long_long_long_condition || a_long_long_long_long_condition || a_long_long_long_long_condition)
&&
(a_long_long_long_long_condition || a_long_long_long_long_condition || a_long_long_long_long_condition)
);
a = Boolean(
(a_long_long_long_long_condition || a_long_long_long_long_condition || a_long_long_long_long_condition)
||
(a_long_long_long_long_condition || a_long_long_long_long_condition || a_long_long_long_long_condition)
);
a = Boolean(Boolean(
a_long_long_long_long_condition || a_long_long_long_long_condition || a_long_long_long_long_condition,
));
=====================================output=====================================
a = Boolean(
a_long_long_long_long_condition ||
a_long_long_long_long_condition ||
a_long_long_long_long_condition,
);
a = Boolean(
a_long_long_long_long_condition ||
a_long_long_long_long_condition ||
a_long_long_long_long_condition,
)?.toString();
a = new Boolean(
a_long_long_long_long_condition ||
a_long_long_long_long_condition ||
a_long_long_long_long_condition,
);
a = !(
a_long_long_long_long_condition ||
a_long_long_long_long_condition ||
a_long_long_long_long_condition
);
a = !!(
a_long_long_long_long_condition ||
a_long_long_long_long_condition ||
a_long_long_long_long_condition
);
a = Boolean(
a_long_long_long_long_condition ||
a_long_long_long_long_condition ||
a_long_long_long_long_condition,
anotherArgument,
);
a = Boolean(
a_long_long_long_long_condition ||
a_long_long_long_long_condition ||
a_long_long_long_long_condition,
anotherArgument,
);
a = new Foo(
a_long_long_long_long_condition ||
a_long_long_long_long_condition ||
a_long_long_long_long_condition,
anotherArgument,
);
// Different operators
a = Boolean(
a_long_long_long_long_condition &&
a_long_long_long_long_condition &&
a_long_long_long_long_condition,
);
a = Boolean(
a_long_long_long_long_condition ??
a_long_long_long_long_condition ??
a_long_long_long_long_condition,
);
a = Boolean(
a_long_long_long_long_condition +
a_long_long_long_long_condition +
a_long_long_long_long_condition,
);
// Not argument
a = (
a_long_long_long_long_condition ||
a_long_long_long_long_condition ||
a_long_long_long_long_condition
)(Boolean);
a = new (a_long_long_long_long_condition ||
a_long_long_long_long_condition ||
a_long_long_long_long_condition)(Foo);
// Not \`Boolean\`
a = not_Boolean(
a_long_long_long_long_condition ||
a_long_long_long_long_condition ||
a_long_long_long_long_condition,
);
// Nested
a = Boolean(
(a_long_long_long_long_condition ||
a_long_long_long_long_condition ||
a_long_long_long_long_condition) &&
(a_long_long_long_long_condition ||
a_long_long_long_long_condition ||
a_long_long_long_long_condition),
);
a = Boolean(
a_long_long_long_long_condition ||
a_long_long_long_long_condition ||
a_long_long_long_long_condition ||
a_long_long_long_long_condition ||
a_long_long_long_long_condition ||
a_long_long_long_long_condition,
);
a = Boolean(
Boolean(
a_long_long_long_long_condition ||
a_long_long_long_long_condition ||
a_long_long_long_long_condition,
),
);
================================================================================
`;
+67
View File
@@ -0,0 +1,67 @@
a = Boolean(
a_long_long_long_long_condition || a_long_long_long_long_condition || a_long_long_long_long_condition,
);
a = Boolean(
a_long_long_long_long_condition || a_long_long_long_long_condition || a_long_long_long_long_condition,
)?.toString();
a = new Boolean(
a_long_long_long_long_condition || a_long_long_long_long_condition || a_long_long_long_long_condition,
);
a = !(
a_long_long_long_long_condition || a_long_long_long_long_condition || a_long_long_long_long_condition
);
a = !!(
a_long_long_long_long_condition || a_long_long_long_long_condition || a_long_long_long_long_condition
);
a = Boolean(
a_long_long_long_long_condition || a_long_long_long_long_condition || a_long_long_long_long_condition,
anotherArgument,
);
a = Boolean(
a_long_long_long_long_condition || a_long_long_long_long_condition || a_long_long_long_long_condition,
anotherArgument,
);
a = new Foo(
a_long_long_long_long_condition || a_long_long_long_long_condition || a_long_long_long_long_condition,
anotherArgument,
);
// Different operators
a = Boolean(
a_long_long_long_long_condition && a_long_long_long_long_condition && a_long_long_long_long_condition,
);
a = Boolean(
a_long_long_long_long_condition ?? a_long_long_long_long_condition ?? a_long_long_long_long_condition,
);
a = Boolean(
a_long_long_long_long_condition + a_long_long_long_long_condition + a_long_long_long_long_condition,
);
// Not argument
a = (
a_long_long_long_long_condition || a_long_long_long_long_condition || a_long_long_long_long_condition
)(Boolean);
a = new (
a_long_long_long_long_condition || a_long_long_long_long_condition || a_long_long_long_long_condition
)(Foo);
// Not `Boolean`
a = not_Boolean(
a_long_long_long_long_condition || a_long_long_long_long_condition || a_long_long_long_long_condition,
);
// Nested
a = Boolean(
(a_long_long_long_long_condition || a_long_long_long_long_condition || a_long_long_long_long_condition)
&&
(a_long_long_long_long_condition || a_long_long_long_long_condition || a_long_long_long_long_condition)
);
a = Boolean(
(a_long_long_long_long_condition || a_long_long_long_long_condition || a_long_long_long_long_condition)
||
(a_long_long_long_long_condition || a_long_long_long_long_condition || a_long_long_long_long_condition)
);
a = Boolean(Boolean(
a_long_long_long_long_condition || a_long_long_long_long_condition || a_long_long_long_long_condition,
));
@@ -0,0 +1,4 @@
runFormatTest(import.meta, ["babel", "typescript", "flow"]);
runFormatTest(import.meta, ["babel", "typescript", "flow"], {
experimentalOperatorPosition: "start",
});