Don't force array/object with short block comment to break (#18617)
This commit is contained in:
1 parent
3b9ecca4d9
commit
78ff25b5cf
10 files changed
+145
-54
No files matched your search
@@ -0,0 +1,20 @@
|
||||
#### Don't force empty array and object with short comments to break (#18617 by @fisker)
|
||||
|
||||
<!-- prettier-ignore -->
|
||||
```jsx
|
||||
// Input
|
||||
const array = [/* comment */]
|
||||
const object = {/* comment */}
|
||||
|
||||
// Prettier stable
|
||||
const array = [
|
||||
/* comment */
|
||||
];
|
||||
const object = {
|
||||
/* comment */
|
||||
};
|
||||
|
||||
// Prettier main
|
||||
const array = [/* comment */];
|
||||
const object = {/* comment */};
|
||||
```
|
||||
@@ -28,16 +28,20 @@ import { printTypeAnnotationProperty } from "./type-annotation.js";
|
||||
|
||||
/** @import {Doc} from "../../document/index.js" */
|
||||
|
||||
function printEmptyArrayElements(path, options, openBracket, closeBracket) {
|
||||
function printEmptyArrayElements(path, options) {
|
||||
const { node } = path;
|
||||
if (!hasComment(node, CommentCheckFlags.Dangling)) {
|
||||
return [openBracket, closeBracket];
|
||||
}
|
||||
|
||||
return group([
|
||||
openBracket,
|
||||
printDanglingComments(path, options, { indent: true }),
|
||||
softline,
|
||||
closeBracket,
|
||||
"[",
|
||||
hasComment(node, CommentCheckFlags.Dangling)
|
||||
? [
|
||||
indent([softline, printDanglingComments(path, options)]),
|
||||
hasComment(node, CommentCheckFlags.Dangling | CommentCheckFlags.Line)
|
||||
? hardline
|
||||
: softline,
|
||||
]
|
||||
: [],
|
||||
"]",
|
||||
]);
|
||||
}
|
||||
|
||||
@@ -52,14 +56,10 @@ function printArray(path, options, print) {
|
||||
/** @type{Doc[]} */
|
||||
const parts = [];
|
||||
|
||||
const openBracket = "[";
|
||||
const closeBracket = "]";
|
||||
const elementsProperty = isTupleType(node) ? "elementTypes" : "elements";
|
||||
const elements = node[elementsProperty];
|
||||
if (elements.length === 0 && !node.inexact) {
|
||||
parts.push(
|
||||
printEmptyArrayElements(path, options, openBracket, closeBracket),
|
||||
);
|
||||
parts.push(printEmptyArrayElements(path, options));
|
||||
} else {
|
||||
const lastElem = elements.at(-1);
|
||||
const canHaveTrailingComma =
|
||||
@@ -116,7 +116,7 @@ function printArray(path, options, print) {
|
||||
parts.push(
|
||||
group(
|
||||
[
|
||||
openBracket,
|
||||
"[",
|
||||
indent([
|
||||
softline,
|
||||
shouldUseConciseFormatting
|
||||
@@ -134,7 +134,7 @@ function printArray(path, options, print) {
|
||||
printDanglingComments(path, options),
|
||||
]),
|
||||
softline,
|
||||
closeBracket,
|
||||
"]",
|
||||
],
|
||||
{ shouldBreak, id: groupId },
|
||||
),
|
||||
|
||||
@@ -134,14 +134,19 @@ function printObject(path, options, print) {
|
||||
|
||||
let content;
|
||||
if (parts.length === 0) {
|
||||
if (!hasComment(node, CommentCheckFlags.Dangling)) {
|
||||
return ["{}", printTypeAnnotationProperty(path, print)];
|
||||
}
|
||||
|
||||
content = group([
|
||||
"{",
|
||||
printDanglingComments(path, options, { indent: true }),
|
||||
softline,
|
||||
hasComment(node, CommentCheckFlags.Dangling)
|
||||
? [
|
||||
indent([softline, printDanglingComments(path, options)]),
|
||||
hasComment(
|
||||
node,
|
||||
CommentCheckFlags.Dangling | CommentCheckFlags.Line,
|
||||
)
|
||||
? hardline
|
||||
: softline,
|
||||
]
|
||||
: [],
|
||||
"}",
|
||||
printOptionalToken(path),
|
||||
printTypeAnnotationProperty(path, print),
|
||||
|
||||
@@ -27,6 +27,7 @@ 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",
|
||||
|
||||
@@ -148,9 +148,7 @@ enum E2 of number {
|
||||
// D = 100
|
||||
}
|
||||
|
||||
enum E3 {
|
||||
/*Q*/
|
||||
}
|
||||
enum E3 {/*Q*/}
|
||||
|
||||
enum E4 of string {
|
||||
/*Q*/ Foo = "foo",
|
||||
|
||||
@@ -1580,15 +1580,11 @@ Thing(/* dangling */);
|
||||
export /* dangling */{};
|
||||
|
||||
=====================================output=====================================
|
||||
var a = {
|
||||
/* dangling */
|
||||
}
|
||||
var a = {/* dangling */}
|
||||
var b = {
|
||||
// dangling
|
||||
}
|
||||
var b = [
|
||||
/* dangling */
|
||||
]
|
||||
var b = [/* dangling */]
|
||||
function d() {
|
||||
/* dangling */
|
||||
}
|
||||
@@ -1618,15 +1614,11 @@ Thing(/* dangling */);
|
||||
export /* dangling */{};
|
||||
|
||||
=====================================output=====================================
|
||||
var a = {
|
||||
/* dangling */
|
||||
};
|
||||
var a = {/* dangling */};
|
||||
var b = {
|
||||
// dangling
|
||||
};
|
||||
var b = [
|
||||
/* dangling */
|
||||
];
|
||||
var b = [/* dangling */];
|
||||
function d() {
|
||||
/* dangling */
|
||||
}
|
||||
|
||||
@@ -0,0 +1,63 @@
|
||||
// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing
|
||||
|
||||
exports[`dangling-comment-in-list.js format 1`] = `
|
||||
====================================options=====================================
|
||||
parsers: ["babel", "flow", "typescript"]
|
||||
printWidth: 80
|
||||
| printWidth
|
||||
=====================================input======================================
|
||||
array = [/* array */]
|
||||
object = {/* object */}
|
||||
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 */)
|
||||
fn = function(
|
||||
/* function parameter */) {}
|
||||
newFoo = new Foo
|
||||
(/* new argument */)
|
||||
|
||||
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 */)
|
||||
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 */)
|
||||
|
||||
=====================================output=====================================
|
||||
array = [/* array */];
|
||||
object = {/* object */};
|
||||
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 */
|
||||
fn = function () /* function parameter */ {};
|
||||
newFoo = new Foo(/* new argument */);
|
||||
|
||||
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 */);
|
||||
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 */);
|
||||
|
||||
================================================================================
|
||||
`;
|
||||
@@ -0,0 +1,23 @@
|
||||
array = [/* array */]
|
||||
object = {/* object */}
|
||||
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 */)
|
||||
fn = function(
|
||||
/* function parameter */) {}
|
||||
newFoo = new Foo
|
||||
(/* new argument */)
|
||||
|
||||
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 */)
|
||||
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 */)
|
||||
@@ -0,0 +1 @@
|
||||
runFormatTest(import.meta, ["babel", "flow", "typescript"]);
|
||||
@@ -36,9 +36,7 @@ type Foo6 = [
|
||||
|
||||
|
||||
=====================================output=====================================
|
||||
type Foo1 = [
|
||||
/* comment */
|
||||
];
|
||||
type Foo1 = [/* comment */];
|
||||
|
||||
type Foo2 = [
|
||||
// comment
|
||||
@@ -54,9 +52,7 @@ type Foo4 = [
|
||||
// comment2
|
||||
];
|
||||
|
||||
type Foo5 = [
|
||||
/* comment1 */
|
||||
];
|
||||
type Foo5 = [/* comment1 */];
|
||||
|
||||
type Foo6 = [
|
||||
/* comment1 */
|
||||
@@ -102,9 +98,7 @@ type Foo6 = [
|
||||
|
||||
|
||||
=====================================output=====================================
|
||||
type Foo1 = [
|
||||
/* comment */
|
||||
];
|
||||
type Foo1 = [/* comment */];
|
||||
|
||||
type Foo2 = [
|
||||
// comment
|
||||
@@ -120,9 +114,7 @@ type Foo4 = [
|
||||
// comment2
|
||||
];
|
||||
|
||||
type Foo5 = [
|
||||
/* comment1 */
|
||||
];
|
||||
type Foo5 = [/* comment1 */];
|
||||
|
||||
type Foo6 = [
|
||||
/* comment1 */
|
||||
@@ -168,9 +160,7 @@ type Foo6 = [
|
||||
|
||||
|
||||
=====================================output=====================================
|
||||
type Foo1 = [
|
||||
/* comment */
|
||||
];
|
||||
type Foo1 = [/* comment */];
|
||||
|
||||
type Foo2 = [
|
||||
// comment
|
||||
@@ -186,9 +176,7 @@ type Foo4 = [
|
||||
// comment2
|
||||
];
|
||||
|
||||
type Foo5 = [
|
||||
/* comment1 */
|
||||
];
|
||||
type Foo5 = [/* comment1 */];
|
||||
|
||||
type Foo6 = [
|
||||
/* comment1 */
|
||||
|
||||
Reference in new issue
Block a user