Prevent JSX from breaking a logical expression chain (#5092)
This commit is contained in:
1 parent
bb5a116b4f
commit
ed6a2d9055
3 files changed
+40
-15
No files matched your search
@@ -58,6 +58,8 @@ const {
|
|||||||
printer: { printDocToString }
|
printer: { printDocToString }
|
||||||
} = require("../doc");
|
} = require("../doc");
|
||||||
|
|
||||||
|
let uid = 0;
|
||||||
|
|
||||||
function shouldPrintComma(options, level) {
|
function shouldPrintComma(options, level) {
|
||||||
level = level || "es5";
|
level = level || "es5";
|
||||||
|
|
||||||
@@ -503,16 +505,41 @@ function printPathNoParens(path, options, print, args) {
|
|||||||
return group(concat(parts));
|
return group(concat(parts));
|
||||||
}
|
}
|
||||||
|
|
||||||
const rest = concat(parts.slice(1));
|
if (parts.length === 0) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
return group(
|
// If the right part is a JSX node, we include it in a separate group to
|
||||||
|
// prevent it breaking the whole chain, so we can print the expression like:
|
||||||
|
//
|
||||||
|
// foo && bar && (
|
||||||
|
// <Foo>
|
||||||
|
// <Bar />
|
||||||
|
// </Foo>
|
||||||
|
// )
|
||||||
|
|
||||||
|
const hasJSX = isJSXNode(n.right);
|
||||||
|
const rest = concat(hasJSX ? parts.slice(1, -1) : parts.slice(1));
|
||||||
|
|
||||||
|
const groupId = Symbol("logicalChain-" + ++uid);
|
||||||
|
const chain = group(
|
||||||
concat([
|
concat([
|
||||||
// Don't include the initial expression in the indentation
|
// Don't include the initial expression in the indentation
|
||||||
// level. The first item is guaranteed to be the first
|
// level. The first item is guaranteed to be the first
|
||||||
// left-most expression.
|
// left-most expression.
|
||||||
parts.length > 0 ? parts[0] : "",
|
parts.length > 0 ? parts[0] : "",
|
||||||
indent(rest)
|
indent(rest)
|
||||||
])
|
]),
|
||||||
|
{ id: groupId }
|
||||||
|
);
|
||||||
|
|
||||||
|
if (!hasJSX) {
|
||||||
|
return chain;
|
||||||
|
}
|
||||||
|
|
||||||
|
const jsxPart = getLast(parts);
|
||||||
|
return group(
|
||||||
|
concat([chain, ifBreak(indent(jsxPart), jsxPart, { groupId })])
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
case "AssignmentPattern":
|
case "AssignmentPattern":
|
||||||
|
|||||||
@@ -423,12 +423,11 @@ exports[`jsx_parent.js - flow-verify 1`] = `
|
|||||||
/>;
|
/>;
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
{!isJellyfishEnabled &&
|
{!isJellyfishEnabled && diffUpdateMessageInput != null && (
|
||||||
diffUpdateMessageInput != null && (
|
<div>
|
||||||
<div>
|
<span>Text</span>
|
||||||
<span>Text</span>
|
</div>
|
||||||
</div>
|
)}
|
||||||
)}
|
|
||||||
</div>;
|
</div>;
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
|
|||||||
@@ -823,12 +823,11 @@ exports[`logical-expression.js - flow-verify 1`] = `
|
|||||||
</div>;
|
</div>;
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
{a &&
|
{a && b && (
|
||||||
b && (
|
<span>
|
||||||
<span>
|
make this text just so long enough to break this to the next line
|
||||||
make this text just so long enough to break this to the next line
|
</span>
|
||||||
</span>
|
)}
|
||||||
)}
|
|
||||||
</div>;
|
</div>;
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
|
|||||||
Reference in new issue
Block a user