Skip to content

Commit c09957a

Browse files
fix: handle comments with static invocations
1 parent 3fdaa64 commit c09957a

3 files changed

Lines changed: 93 additions & 2 deletions

File tree

packages/prettier-plugin-java/src/printers/expressions.ts

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ import { builders, utils } from "prettier/doc";
6363
import { BaseCstPrettierPrinter } from "../base-cst-printer.js";
6464
import { isAnnotationCstNode } from "../types/utils.js";
6565
import { printArgumentListWithBraces } from "../utils/index.js";
66+
import { hasLeadingComments } from "./comments/comments-utils.js";
6667
import { printTokenWithComments } from "./comments/format-comments.js";
6768
import {
6869
handleCommentsBinaryExpression,
@@ -366,11 +367,14 @@ export class ExpressionsPrettierVisitor extends BaseCstPrettierPrinter {
366367
.find(methodInvocationSuffix => methodInvocationSuffix);
367368

368369
const hasFqnRefPart = fqnOrRefType?.fqnOrRefTypePartRest !== undefined;
369-
const isCapitalizedIdentifier = !!this.isCapitalizedIdentifier(fqnOrRefType);
370+
const lastFqnRefPartDot = this.lastDot(fqnOrRefType);
371+
const isCapitalizedIdentifier = !!this.isCapitalizedIdentifier(fqnOrRefType)
372+
const isCapitalizedIdentifierWithoutTrailingComment = isCapitalizedIdentifier && (lastFqnRefPartDot === undefined || !hasLeadingComments(lastFqnRefPartDot));
373+
370374
const shouldBreakBeforeFirstMethodInvocation =
371375
countMethodInvocation > 1 &&
372376
hasFqnRefPart &&
373-
!isCapitalizedIdentifier &&
377+
!isCapitalizedIdentifierWithoutTrailingComment &&
374378
firstMethodInvocation !== undefined;
375379

376380
const shouldBreakBeforeMethodInvocations =
@@ -918,4 +922,13 @@ export class ExpressionsPrettierVisitor extends BaseCstPrettierPrinter {
918922
/^\p{Uppercase_Letter}/u.test(nextToLastIdentifier)
919923
);
920924
}
925+
926+
private lastDot(fqnOrRefType: FqnOrRefTypeCtx | undefined) {
927+
if (fqnOrRefType === undefined || fqnOrRefType.Dot === undefined) {
928+
return undefined;
929+
}
930+
931+
const lastDot = fqnOrRefType.Dot[fqnOrRefType.Dot.length - 1];
932+
return lastDot;
933+
}
921934
}

packages/prettier-plugin-java/test/unit-test/member_chain/_input.java

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,42 @@ public void doSomething() {
44
return new Object().something().more();
55
}
66

7+
public void doSomethingNewWithComment() {
8+
return new Object()
9+
// comment
10+
.something().more();
11+
}
12+
13+
public void doSomethingWithComment() {
14+
return Object
15+
// comment
16+
.something().more();
17+
}
18+
19+
public void doSomethingWithComment() {
20+
return object
21+
// comment
22+
.something().more();
23+
}
24+
25+
public void doSomethingNewWithComment() {
26+
return new Object()
27+
/* comment */
28+
.something().more();
29+
}
30+
31+
public void doSomethingWithComment() {
32+
return Object
33+
/* comment */
34+
.something().more();
35+
}
36+
37+
public void doSomethingWithComment() {
38+
return object
39+
/* comment */
40+
.something().more();
41+
}
42+
743
public void doSomethingLongNew() {
844
return something().more().and().that().as().well().but().not().something().something();
945
}

packages/prettier-plugin-java/test/unit-test/member_chain/_output.java

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,48 @@ public void doSomething() {
44
return new Object().something().more();
55
}
66

7+
public void doSomethingNewWithComment() {
8+
return new Object()
9+
// comment
10+
.something()
11+
.more();
12+
}
13+
14+
public void doSomethingWithComment() {
15+
return Object
16+
// comment
17+
.something()
18+
.more();
19+
}
20+
21+
public void doSomethingWithComment() {
22+
return object
23+
// comment
24+
.something()
25+
.more();
26+
}
27+
28+
public void doSomethingNewWithComment() {
29+
return new Object()
30+
/* comment */
31+
.something()
32+
.more();
33+
}
34+
35+
public void doSomethingWithComment() {
36+
return Object
37+
/* comment */
38+
.something()
39+
.more();
40+
}
41+
42+
public void doSomethingWithComment() {
43+
return object
44+
/* comment */
45+
.something()
46+
.more();
47+
}
48+
749
public void doSomethingLongNew() {
850
return something()
951
.more()

0 commit comments

Comments
 (0)