Improve comment handling around calls without arguments (#18615)
This commit is contained in:
1 parent
78ff25b5cf
commit
7733de931e
12 files changed
+306
-14
No files matched your search
@@ -0,0 +1,53 @@
|
||||
#### Improve comment handling around empty call argument list (#18615 by @fisker)
|
||||
|
||||
<!-- prettier-ignore -->
|
||||
```jsx
|
||||
// Input
|
||||
call
|
||||
// line comment
|
||||
();
|
||||
call(// line comment
|
||||
);
|
||||
call(
|
||||
// line comment
|
||||
);
|
||||
|
||||
call
|
||||
/* block comment */
|
||||
();
|
||||
call(/* block comment */
|
||||
);
|
||||
call(
|
||||
/* block comment */
|
||||
);
|
||||
|
||||
// Prettier stable
|
||||
call();
|
||||
// line comment
|
||||
call(); // line comment
|
||||
call();
|
||||
// line comment
|
||||
|
||||
call();
|
||||
/* block comment */
|
||||
call /* block comment */();
|
||||
call();
|
||||
/* block comment */
|
||||
|
||||
// Prettier main
|
||||
call
|
||||
// line comment
|
||||
();
|
||||
call(
|
||||
// line comment
|
||||
);
|
||||
call(
|
||||
// line comment
|
||||
);
|
||||
|
||||
call
|
||||
/* block comment */
|
||||
();
|
||||
call(/* block comment */);
|
||||
call(/* block comment */);
|
||||
```
|
||||
@@ -0,0 +1,21 @@
|
||||
#### Fix unstable comment in call expression (#18615 by @fisker)
|
||||
|
||||
<!-- prettier-ignore -->
|
||||
```jsx
|
||||
// Input
|
||||
foo =
|
||||
call(
|
||||
/* call argument */);
|
||||
|
||||
// Prettier stable (First format)
|
||||
foo =
|
||||
call();
|
||||
/* call argument */
|
||||
|
||||
// Prettier stable (Second format)
|
||||
foo = call();
|
||||
/* call argument */
|
||||
|
||||
// Prettier main
|
||||
foo = call(/* call argument */);
|
||||
```
|
||||
@@ -0,0 +1,29 @@
|
||||
#### Allow empty call expression argument list with long comments to break (#18615 by @fisker)
|
||||
|
||||
<!-- prettier-ignore -->
|
||||
```jsx
|
||||
// Input
|
||||
call(/* a long long long long long long long long long long long long comment */);
|
||||
array = [/* a long long long long long long long long long long long long comment */];
|
||||
object = {/* a long long long long long long long long long long long long comment */};
|
||||
|
||||
// Prettier stable
|
||||
call(/* a long long long long long long long long long long long long comment */);
|
||||
array = [
|
||||
/* a long long long long long long long long long long long long comment */
|
||||
];
|
||||
object = {
|
||||
/* a long long long long long long long long long long long long comment */
|
||||
};
|
||||
|
||||
// Prettier main
|
||||
call(
|
||||
/* a long long long long long long long long long long long long comment */
|
||||
);
|
||||
array = [
|
||||
/* a long long long long long long long long long long long long comment */
|
||||
];
|
||||
object = {
|
||||
/* a long long long long long long long long long long long long comment */
|
||||
};
|
||||
```
|
||||
@@ -82,6 +82,7 @@ function handleOwnLineComment(context) {
|
||||
handleCommentsInDestructuringPattern,
|
||||
handleTSMappedTypeComments,
|
||||
handleBinaryCastExpressionComment,
|
||||
handleCommentInEmptyParens,
|
||||
].some((fn) => fn(context));
|
||||
}
|
||||
|
||||
@@ -112,6 +113,7 @@ function handleEndOfLineComment(context) {
|
||||
handleCommentAfterArrowExpression,
|
||||
handlePropertySignatureComments,
|
||||
handleBinaryCastExpressionComment,
|
||||
handleCommentInEmptyParens,
|
||||
].some((fn) => fn(context));
|
||||
}
|
||||
|
||||
@@ -635,10 +637,14 @@ function handleCommentInEmptyParens({ comment, enclosingNode, options }) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// This condition should be removed, but excluded for function parameters in #18615 to make PRs smaller
|
||||
const isRemainingComment = comment.placement === "remaining";
|
||||
|
||||
// Only add dangling comments to fix the case when no params are present,
|
||||
// i.e. a function without any argument.
|
||||
if (
|
||||
((isRealFunctionLikeNode(enclosingNode) &&
|
||||
((isRemainingComment &&
|
||||
isRealFunctionLikeNode(enclosingNode) &&
|
||||
getFunctionParameters(enclosingNode).length === 0) ||
|
||||
(isCallLikeExpression(enclosingNode) &&
|
||||
getCallArguments(enclosingNode).length === 0)) &&
|
||||
@@ -649,6 +655,7 @@ function handleCommentInEmptyParens({ comment, enclosingNode, options }) {
|
||||
}
|
||||
|
||||
if (
|
||||
isRemainingComment &&
|
||||
(enclosingNode.type === "MethodDefinition" ||
|
||||
enclosingNode.type === "TSAbstractMethodDefinition") &&
|
||||
getFunctionParameters(enclosingNode.value).length === 0 &&
|
||||
|
||||
@@ -49,8 +49,23 @@ function printCallArguments(path, options, print) {
|
||||
const { node } = path;
|
||||
|
||||
const args = getCallArguments(node);
|
||||
|
||||
if (args.length === 0) {
|
||||
return ["(", printDanglingComments(path, options), ")"];
|
||||
return group([
|
||||
"(",
|
||||
hasComment(node, CommentCheckFlags.Dangling)
|
||||
? [
|
||||
indent([softline, printDanglingComments(path, options)]),
|
||||
hasComment(
|
||||
node,
|
||||
CommentCheckFlags.Dangling | CommentCheckFlags.Line,
|
||||
)
|
||||
? hardline
|
||||
: softline,
|
||||
]
|
||||
: [],
|
||||
")",
|
||||
]);
|
||||
}
|
||||
|
||||
const lastArgIndex = args.length - 1;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { group, join } from "../../document/index.js";
|
||||
import { group, join, lineSuffixBoundary } from "../../document/index.js";
|
||||
import needsParentheses from "../parentheses/needs-parentheses.js";
|
||||
import {
|
||||
getCallArguments,
|
||||
@@ -93,6 +93,7 @@ function printCallExpression(path, options, print) {
|
||||
printCallee(path, print),
|
||||
optional,
|
||||
typeArgumentsDoc,
|
||||
lineSuffixBoundary,
|
||||
printCallArguments(path, options, print),
|
||||
];
|
||||
|
||||
|
||||
@@ -27,7 +27,6 @@ const unstableTests = new Map(
|
||||
"js/comments/return-statement.js",
|
||||
"js/comments/tagged-template-literal.js",
|
||||
"js/for/9812-unstable.js",
|
||||
"js/comments/in-list/dangling-comment-in-list.js",
|
||||
[
|
||||
"js/multiparser-markdown/codeblock.js",
|
||||
(options) => options.proseWrap === "always",
|
||||
|
||||
@@ -1,5 +1,112 @@
|
||||
// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing
|
||||
|
||||
exports[`no-arguments.js format 1`] = `
|
||||
====================================options=====================================
|
||||
parsers: ["babel", "flow", "typescript"]
|
||||
printWidth: 80
|
||||
| printWidth
|
||||
=====================================input======================================
|
||||
call// 101
|
||||
()
|
||||
call
|
||||
// 102
|
||||
()
|
||||
call(// 103
|
||||
)
|
||||
call
|
||||
(// 104
|
||||
)
|
||||
call(
|
||||
// 105
|
||||
)
|
||||
call// 106
|
||||
?.(
|
||||
)
|
||||
call// 107
|
||||
?.(
|
||||
)
|
||||
call?.// 108
|
||||
(
|
||||
)
|
||||
|
||||
call/* 201 */
|
||||
()
|
||||
call
|
||||
/* 202 */
|
||||
()
|
||||
call/* 203 */()
|
||||
call(/* 204 */
|
||||
)
|
||||
call(
|
||||
/* 205 */
|
||||
)
|
||||
call/* 206 */?.
|
||||
()
|
||||
call/* 207 */
|
||||
?.
|
||||
()
|
||||
call
|
||||
/* 208 */?.
|
||||
()
|
||||
|
||||
call/* 209 */
|
||||
?.
|
||||
()
|
||||
call?./* 210 */
|
||||
()
|
||||
call
|
||||
?./* 211 */
|
||||
()
|
||||
call
|
||||
?.
|
||||
/* 212 */
|
||||
()
|
||||
|
||||
=====================================output=====================================
|
||||
call // 101
|
||||
();
|
||||
call
|
||||
// 102
|
||||
();
|
||||
call(
|
||||
// 103
|
||||
);
|
||||
call(
|
||||
// 104
|
||||
);
|
||||
call(
|
||||
// 105
|
||||
);
|
||||
call?. // 106
|
||||
();
|
||||
call?. // 107
|
||||
();
|
||||
call?. // 108
|
||||
();
|
||||
|
||||
call /* 201 */();
|
||||
call
|
||||
/* 202 */
|
||||
();
|
||||
call /* 203 */();
|
||||
call(/* 204 */);
|
||||
call(/* 205 */);
|
||||
call /* 206 */?.();
|
||||
call /* 207 */?.();
|
||||
call?.
|
||||
/* 208 */
|
||||
();
|
||||
|
||||
call /* 209 */?.();
|
||||
call /* 210 */?.();
|
||||
call /* 211 */?.();
|
||||
call?.
|
||||
/* 212 */
|
||||
();
|
||||
|
||||
================================================================================
|
||||
`;
|
||||
|
||||
exports[`special-cases.js format 1`] = `
|
||||
====================================options=====================================
|
||||
parsers: ["babel", "flow", "typescript"]
|
||||
|
||||
@@ -0,0 +1,55 @@
|
||||
call// 101
|
||||
()
|
||||
call
|
||||
// 102
|
||||
()
|
||||
call(// 103
|
||||
)
|
||||
call
|
||||
(// 104
|
||||
)
|
||||
call(
|
||||
// 105
|
||||
)
|
||||
call// 106
|
||||
?.(
|
||||
)
|
||||
call// 107
|
||||
?.(
|
||||
)
|
||||
call?.// 108
|
||||
(
|
||||
)
|
||||
|
||||
call/* 201 */
|
||||
()
|
||||
call
|
||||
/* 202 */
|
||||
()
|
||||
call/* 203 */()
|
||||
call(/* 204 */
|
||||
)
|
||||
call(
|
||||
/* 205 */
|
||||
)
|
||||
call/* 206 */?.
|
||||
()
|
||||
call/* 207 */
|
||||
?.
|
||||
()
|
||||
call
|
||||
/* 208 */?.
|
||||
()
|
||||
|
||||
call/* 209 */
|
||||
?.
|
||||
()
|
||||
call?./* 210 */
|
||||
()
|
||||
call
|
||||
?./* 211 */
|
||||
()
|
||||
call
|
||||
?.
|
||||
/* 212 */
|
||||
()
|
||||
@@ -12,13 +12,13 @@ call = call(/* call argument */)
|
||||
fn = function(/* function parameter */) {}
|
||||
newFoo = new Foo(/* new argument */)
|
||||
|
||||
// TODO[@fisker]: fix the following
|
||||
array = [
|
||||
/* array */]
|
||||
object = {
|
||||
/* object */}
|
||||
call = call(
|
||||
/* call argument */)
|
||||
// TODO[@fisker]: fix this
|
||||
fn = function(
|
||||
/* function parameter */) {}
|
||||
newFoo = new Foo
|
||||
@@ -27,6 +27,7 @@ newFoo = new Foo
|
||||
array = [/* array long long long long long long long long long long long long long long */]
|
||||
object = {/* object long long long long long long long long long long long long long long */}
|
||||
call = call(/* call argument long long long long long long long long long long long long long long */)
|
||||
// TODO[@fisker]: fix this
|
||||
fn = function (/* function long parameter long long long long long long long long long long long long long */) {}
|
||||
newFoo = new Foo(/* new argument long long long long long long long long long long long long long long */)
|
||||
|
||||
@@ -37,12 +38,10 @@ call = call(/* call argument */);
|
||||
fn = function (/* function parameter */) {};
|
||||
newFoo = new Foo(/* new argument */);
|
||||
|
||||
// TODO[@fisker]: fix the following
|
||||
array = [/* array */];
|
||||
object = {/* object */};
|
||||
call =
|
||||
call();
|
||||
/* call argument */
|
||||
call = call(/* call argument */);
|
||||
// TODO[@fisker]: fix this
|
||||
fn = function () /* function parameter */ {};
|
||||
newFoo = new Foo(/* new argument */);
|
||||
|
||||
@@ -53,11 +52,15 @@ object = {
|
||||
/* object long long long long long long long long long long long long long long */
|
||||
};
|
||||
call =
|
||||
call(/* call argument long long long long long long long long long long long long long long */);
|
||||
call(
|
||||
/* call argument long long long long long long long long long long long long long long */
|
||||
);
|
||||
// TODO[@fisker]: fix this
|
||||
fn =
|
||||
function (/* function long parameter long long long long long long long long long long long long long */) {};
|
||||
newFoo =
|
||||
new Foo(/* new argument long long long long long long long long long long long long long long */);
|
||||
newFoo = new Foo(
|
||||
/* new argument long long long long long long long long long long long long long long */
|
||||
);
|
||||
|
||||
================================================================================
|
||||
`;
|
||||
@@ -4,13 +4,13 @@ call = call(/* call argument */)
|
||||
fn = function(/* function parameter */) {}
|
||||
newFoo = new Foo(/* new argument */)
|
||||
|
||||
// TODO[@fisker]: fix the following
|
||||
array = [
|
||||
/* array */]
|
||||
object = {
|
||||
/* object */}
|
||||
call = call(
|
||||
/* call argument */)
|
||||
// TODO[@fisker]: fix this
|
||||
fn = function(
|
||||
/* function parameter */) {}
|
||||
newFoo = new Foo
|
||||
@@ -19,5 +19,6 @@ newFoo = new Foo
|
||||
array = [/* array long long long long long long long long long long long long long long */]
|
||||
object = {/* object long long long long long long long long long long long long long long */}
|
||||
call = call(/* call argument long long long long long long long long long long long long long long */)
|
||||
// TODO[@fisker]: fix this
|
||||
fn = function (/* function long parameter long long long long long long long long long long long long long */) {}
|
||||
newFoo = new Foo(/* new argument long long long long long long long long long long long long long long */)
|
||||
@@ -1364,7 +1364,8 @@ interface Foo {
|
||||
=====================================output=====================================
|
||||
functionName<A /* A comment */>();
|
||||
|
||||
functionName<A>(); // comment
|
||||
functionName<A> // comment
|
||||
();
|
||||
interface Foo {
|
||||
<
|
||||
A, // comment
|
||||
|
||||
Reference in new issue
Block a user