Fix different precedence binary expression when inlining (#2827)

master
Lucas Duailibe 2017-09-20 12:07:51 -03:00 committed by Simon Lydell
parent 2be986d0d7
commit 9b0d6b8de0
5 changed files with 198 additions and 2 deletions

View File

@ -355,11 +355,12 @@ function genericPrintNoParens(path, options, print, args) {
parent.type === "ObjectProperty" ||
parent.type === "Property";
const logicalSubExpression = n.left.type === "LogicalExpression";
const samePrecedenceSubExpression =
isBinaryish(n.left) && util.shouldFlatten(n.operator, n.left.operator);
if (
shouldNotIdent ||
(shouldInlineLogicalExpression(n) && !logicalSubExpression) ||
(shouldInlineLogicalExpression(n) && !samePrecedenceSubExpression) ||
(!shouldInlineLogicalExpression(n) && shouldIdentIfInlining)
) {
return group(concat(parts));

View File

@ -145,6 +145,37 @@ if (
`;
exports[`inline-jsx.js 1`] = `
const user = renderedUser || <div><User name={this.state.user.name} age={this.state.user.age} /></div>;
const user = renderedUser || shouldRenderUser && <div><User name={this.state.user.name} age={this.state.user.age} /></div>;
const avatar = hasAvatar && <Gravatar user={author} size={size} />;
const avatar = (hasAvatar || showPlaceholder) && <Gravatar user={author} size={size} />;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
const user = renderedUser || (
<div>
<User name={this.state.user.name} age={this.state.user.age} />
</div>
);
const user =
renderedUser ||
(shouldRenderUser && (
<div>
<User name={this.state.user.name} age={this.state.user.age} />
</div>
));
const avatar = hasAvatar && <Gravatar user={author} size={size} />;
const avatar = (hasAvatar || showPlaceholder) && (
<Gravatar user={author} size={size} />
);
`;
exports[`inline-object-array.js 1`] = `
prevState = prevState || {
catalogs: [],
@ -163,6 +194,23 @@ prevState = prevState ||
selectedCatalog: null,
};
prevState = prevState ||
defaultState && {
catalogs: [],
loadState: LOADED,
opened: false,
searchQuery: '',
selectedCatalog: null,
};
prevState = prevState || useDefault && defaultState || {
catalogs: [],
loadState: LOADED,
opened: false,
searchQuery: '',
selectedCatalog: null,
};
this.steps = steps || [
{
name: 'mock-module',
@ -170,6 +218,20 @@ this.steps = steps || [
},
];
this.steps = steps || checkStep && [
{
name: 'mock-module',
path: '/nux/mock-module',
},
];
this.steps = steps && checkStep || [
{
name: 'mock-module',
path: '/nux/mock-module',
},
];
const create = () => {
const result = doSomething();
return (
@ -182,12 +244,26 @@ const create = () => {
);
}
const create = () => {
const result = doSomething();
return (
shouldReturn && result.ok && result || {
status: "ok",
createdAt: result.createdAt,
updatedAt: result.updatedAt
}
);
}
const obj = {
state: shouldHaveState &&
stateIsOK && {
loadState: LOADED,
opened: false
},
loadNext: stateIsOK && hasNext || {
skipNext: true
},
loaded: true
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@ -208,6 +284,25 @@ prevState = prevState ||
selectedCatalog: null
};
prevState =
prevState ||
(defaultState && {
catalogs: [],
loadState: LOADED,
opened: false,
searchQuery: "",
selectedCatalog: null
});
prevState = prevState ||
(useDefault && defaultState) || {
catalogs: [],
loadState: LOADED,
opened: false,
searchQuery: "",
selectedCatalog: null
};
this.steps = steps || [
{
name: "mock-module",
@ -215,6 +310,22 @@ this.steps = steps || [
}
];
this.steps =
steps ||
(checkStep && [
{
name: "mock-module",
path: "/nux/mock-module"
}
]);
this.steps = (steps && checkStep) || [
{
name: "mock-module",
path: "/nux/mock-module"
}
];
const create = () => {
const result = doSomething();
return (
@ -227,12 +338,26 @@ const create = () => {
);
};
const create = () => {
const result = doSomething();
return (
(shouldReturn && result.ok && result) || {
status: "ok",
createdAt: result.createdAt,
updatedAt: result.updatedAt
}
);
};
const obj = {
state: shouldHaveState &&
stateIsOK && {
loadState: LOADED,
opened: false
},
loadNext: (stateIsOK && hasNext) || {
skipNext: true
},
loaded: true
};
@ -267,6 +392,11 @@ exports[`jsx_parent.js 1`] = `
{!isJellyfishEnabled &&
diffUpdateMessageInput != null && <div><span>Text</span></div>}
</div>;
<div>
{!isJellyfishEnabled &&
diffUpdateMessageInput != null && child || <div><span>Text</span></div>}
</div>;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<div
src={
@ -301,6 +431,14 @@ exports[`jsx_parent.js 1`] = `
)}
</div>;
<div>
{(!isJellyfishEnabled && diffUpdateMessageInput != null && child) || (
<div>
<span>Text</span>
</div>
)}
</div>;
`;
exports[`math.js 1`] = `

View File

@ -0,0 +1,7 @@
const user = renderedUser || <div><User name={this.state.user.name} age={this.state.user.age} /></div>;
const user = renderedUser || shouldRenderUser && <div><User name={this.state.user.name} age={this.state.user.age} /></div>;
const avatar = hasAvatar && <Gravatar user={author} size={size} />;
const avatar = (hasAvatar || showPlaceholder) && <Gravatar user={author} size={size} />;

View File

@ -15,6 +15,23 @@ prevState = prevState ||
selectedCatalog: null,
};
prevState = prevState ||
defaultState && {
catalogs: [],
loadState: LOADED,
opened: false,
searchQuery: '',
selectedCatalog: null,
};
prevState = prevState || useDefault && defaultState || {
catalogs: [],
loadState: LOADED,
opened: false,
searchQuery: '',
selectedCatalog: null,
};
this.steps = steps || [
{
name: 'mock-module',
@ -22,6 +39,20 @@ this.steps = steps || [
},
];
this.steps = steps || checkStep && [
{
name: 'mock-module',
path: '/nux/mock-module',
},
];
this.steps = steps && checkStep || [
{
name: 'mock-module',
path: '/nux/mock-module',
},
];
const create = () => {
const result = doSomething();
return (
@ -34,11 +65,25 @@ const create = () => {
);
}
const create = () => {
const result = doSomething();
return (
shouldReturn && result.ok && result || {
status: "ok",
createdAt: result.createdAt,
updatedAt: result.updatedAt
}
);
}
const obj = {
state: shouldHaveState &&
stateIsOK && {
loadState: LOADED,
opened: false
},
loadNext: stateIsOK && hasNext || {
skipNext: true
},
loaded: true
}

View File

@ -26,3 +26,8 @@
{!isJellyfishEnabled &&
diffUpdateMessageInput != null && <div><span>Text</span></div>}
</div>;
<div>
{!isJellyfishEnabled &&
diffUpdateMessageInput != null && child || <div><span>Text</span></div>}
</div>;