Break after equal on assignment if rhs is await/yield expression (#15204)

* add as-is test

* break after equal on assignment if rhs is wait

Discussion: #15196

* rename test file

* add as-is test

* treat YieldExpression

* add tests

* add changelog

* fix a bug

* add test for delegated yield
This commit is contained in:
Seiya authored and GitHub committed 2023-08-06 13:02:40 +09:00
1 parent 892a1cfba6
commit bf0b3040be
4 files changed
+147 -1

No files matched your search

+16
View File
@@ -0,0 +1,16 @@
#### Break after `=` of assignment if RHS is poorly breakable AwaitExpression or YieldExpression (#15204 by @seiyab)
<!-- prettier-ignore -->
```js
// Input
const { section, rubric, authors, tags } = await utils.upsertCommonData(mainData);
// Prettier stable
const { section, rubric, authors, tags } = await utils.upsertCommonData(
mainData,
);
// Prettier main
const { section, rubric, authors, tags } =
await utils.upsertCommonData(mainData);
```
+5 -1
View File
@@ -205,7 +205,11 @@ function shouldBreakAfterOperator(path, options, print, hasShortKey) {
let node = rightNode;
const propertiesForPath = [];
for (;;) {
if (node.type === "UnaryExpression") {
if (
node.type === "UnaryExpression" ||
node.type === "AwaitExpression" ||
(node.type === "YieldExpression" && node.argument !== null)
) {
node = node.argument;
propertiesForPath.push("argument");
} else if (node.type === "TSNonNullExpression") {
@@ -278,6 +278,104 @@ printWidth: 80
================================================================================
`;
exports[`discussion-15196.js format 1`] = `
====================================options=====================================
parsers: ["babel", "flow", "typescript"]
printWidth: 80
| printWidth
=====================================input======================================
async function f() {
const { section, rubric, authors, tags } = await utils.upsertCommonData(mainData);
const loooooooooooooooooooooooooong1 = await looooooooooooooong.looooooooooooooong.loooooong;
const loooooooooooooooooooooooooong2 = await looooooooooooooong.looooooooooooooong.loooooong();
const loooooooooooooooooooooooooong3 = await looooooooooooooooooooooooooooooooooooooooooooog();
const loooooooooooooooooooooooooong4 = !await looooooooooooooong.looooooooooooooong.loooooong;
const loooooooooooooooooooooooooong5 = void !!await looooooooooooooong.looooooooooooooong.loooooong;
const longlonglonglonglonglonglong1 = await new Promise((resolve, reject) => { setTimeout(() => { resolve('foo'); }, 300); })
const longlonglonglonglonglonglong2 = await { then(onFulfilled, onRejected) { onFulfilled(1234567890) } };
}
function* g() {
const { section, rubric, authors, tags } = yield utils.upsertCommonData(mainData);
const loooooooooooooooooooooooooong1 = yield looooooooooooooong.looooooooooooooong.loooooong;
const loooooooooooooooooooooooooong2 = yield looooooooooooooong.looooooooooooooong.loooooong();
const loooooooooooooooooooooooooong3 = yield looooooooooooooooooooooooooooooooooooooooooooog();
const loooooooooooooooooooooooooong4 = !(yield looooooooooooooong.looooooooooooooong.loooooong);
const loooooooooooooooooooooooooong5 = void !!(yield looooooooooooooong.looooooooooooooong.loooooong);
const loooooooooooooooooooooooooong6 = yield* looooooooooooooong.looooooooooooooong.loooooong;
const longlonglonglonglonglonglong1 = yield qwertyuiop(asdfghjkl, zxcvbnm, qwertyuiop, asdfghjkl);
const longlonglonglonglonglonglong2 = yield { qwertyuiop: 1234567890, asdfghjkl: 1234567890, zxcvbnm: 123456789 };
const x = yield;
}
=====================================output=====================================
async function f() {
const { section, rubric, authors, tags } =
await utils.upsertCommonData(mainData);
const loooooooooooooooooooooooooong1 =
await looooooooooooooong.looooooooooooooong.loooooong;
const loooooooooooooooooooooooooong2 =
await looooooooooooooong.looooooooooooooong.loooooong();
const loooooooooooooooooooooooooong3 =
await looooooooooooooooooooooooooooooooooooooooooooog();
const loooooooooooooooooooooooooong4 =
!(await looooooooooooooong.looooooooooooooong.loooooong);
const loooooooooooooooooooooooooong5 =
void !!(await looooooooooooooong.looooooooooooooong.loooooong);
const longlonglonglonglonglonglong1 = await new Promise((resolve, reject) => {
setTimeout(() => {
resolve("foo");
}, 300);
});
const longlonglonglonglonglonglong2 = await {
then(onFulfilled, onRejected) {
onFulfilled(1234567890);
},
};
}
function* g() {
const { section, rubric, authors, tags } =
yield utils.upsertCommonData(mainData);
const loooooooooooooooooooooooooong1 =
yield looooooooooooooong.looooooooooooooong.loooooong;
const loooooooooooooooooooooooooong2 =
yield looooooooooooooong.looooooooooooooong.loooooong();
const loooooooooooooooooooooooooong3 =
yield looooooooooooooooooooooooooooooooooooooooooooog();
const loooooooooooooooooooooooooong4 =
!(yield looooooooooooooong.looooooooooooooong.loooooong);
const loooooooooooooooooooooooooong5 =
void !!(yield looooooooooooooong.looooooooooooooong.loooooong);
const loooooooooooooooooooooooooong6 =
yield* looooooooooooooong.looooooooooooooong.loooooong;
const longlonglonglonglonglonglong1 = yield qwertyuiop(
asdfghjkl,
zxcvbnm,
qwertyuiop,
asdfghjkl,
);
const longlonglonglonglonglonglong2 = yield {
qwertyuiop: 1234567890,
asdfghjkl: 1234567890,
zxcvbnm: 123456789,
};
const x = yield;
}
================================================================================
`;
exports[`issue-1419.js format 1`] = `
====================================options=====================================
parsers: ["babel", "flow", "typescript"]
@@ -0,0 +1,28 @@
async function f() {
const { section, rubric, authors, tags } = await utils.upsertCommonData(mainData);
const loooooooooooooooooooooooooong1 = await looooooooooooooong.looooooooooooooong.loooooong;
const loooooooooooooooooooooooooong2 = await looooooooooooooong.looooooooooooooong.loooooong();
const loooooooooooooooooooooooooong3 = await looooooooooooooooooooooooooooooooooooooooooooog();
const loooooooooooooooooooooooooong4 = !await looooooooooooooong.looooooooooooooong.loooooong;
const loooooooooooooooooooooooooong5 = void !!await looooooooooooooong.looooooooooooooong.loooooong;
const longlonglonglonglonglonglong1 = await new Promise((resolve, reject) => { setTimeout(() => { resolve('foo'); }, 300); })
const longlonglonglonglonglonglong2 = await { then(onFulfilled, onRejected) { onFulfilled(1234567890) } };
}
function* g() {
const { section, rubric, authors, tags } = yield utils.upsertCommonData(mainData);
const loooooooooooooooooooooooooong1 = yield looooooooooooooong.looooooooooooooong.loooooong;
const loooooooooooooooooooooooooong2 = yield looooooooooooooong.looooooooooooooong.loooooong();
const loooooooooooooooooooooooooong3 = yield looooooooooooooooooooooooooooooooooooooooooooog();
const loooooooooooooooooooooooooong4 = !(yield looooooooooooooong.looooooooooooooong.loooooong);
const loooooooooooooooooooooooooong5 = void !!(yield looooooooooooooong.looooooooooooooong.loooooong);
const loooooooooooooooooooooooooong6 = yield* looooooooooooooong.looooooooooooooong.loooooong;
const longlonglonglonglonglonglong1 = yield qwertyuiop(asdfghjkl, zxcvbnm, qwertyuiop, asdfghjkl);
const longlonglonglonglonglonglong2 = yield { qwertyuiop: 1234567890, asdfghjkl: 1234567890, zxcvbnm: 123456789 };
const x = yield;
}