Skip to content

Commit ccd0fdd

Browse files
committed
fix: prevent argument list comments from moving to next argument
1 parent 78a6fd9 commit ccd0fdd

3 files changed

Lines changed: 68 additions & 5 deletions

File tree

src/comments.ts

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,13 @@
11
import { util, type AstPath, type Doc } from "prettier";
22
import { builders } from "prettier/doc";
3-
import { SyntaxType, type CommentNode, type SyntaxNode } from "./node-types.ts";
3+
import {
4+
SyntaxType,
5+
type ArrayAccessNode,
6+
type CommentNode,
7+
type FieldAccessNode,
8+
type MethodInvocationNode,
9+
type SyntaxNode
10+
} from "./node-types.ts";
411
import parser from "./parser.ts";
512
import printer from "./printer.ts";
613
import {
@@ -190,18 +197,20 @@ function handleLabeledStatementComments(commentNode: CommentNode) {
190197
function handleMemberChainComments(commentNode: CommentNode) {
191198
const { enclosingNode, precedingNode, followingNode } = commentNode;
192199
if (
200+
precedingNode &&
193201
(enclosingNode?.type === SyntaxType.FieldAccess ||
194202
(enclosingNode?.type === SyntaxType.MethodInvocation &&
195-
precedingNode?.end.row !== commentNode.start.row)) &&
196-
(followingNode?.type === SyntaxType.Identifier ||
197-
followingNode?.type === SyntaxType.TypeArguments)
203+
precedingNode.end.row < commentNode.start.row)) &&
204+
precedingNode === enclosingNode.objectNode
198205
) {
199206
util.addLeadingComment(enclosingNode, commentNode);
200207
return true;
201208
} else if (
202209
followingNode &&
203210
isMember(followingNode) &&
204-
precedingNode !== enclosingNode &&
211+
(!precedingNode ||
212+
(precedingNode !== getMemberObject(followingNode) &&
213+
precedingNode.end.row < commentNode.start.row)) &&
205214
!isPrettierIgnore(commentNode)
206215
) {
207216
util.addDanglingComment(followingNode, commentNode, undefined);
@@ -291,6 +300,14 @@ function isMember(node: SyntaxNode) {
291300
);
292301
}
293302

303+
function getMemberObject(
304+
node: ArrayAccessNode | FieldAccessNode | MethodInvocationNode
305+
) {
306+
return node.type === SyntaxType.ArrayAccess
307+
? node.arrayNode
308+
: node.objectNode;
309+
}
310+
294311
const binaryOperators = new Set([
295312
"<<",
296313
">>",

test/unit-test/member_chain/_input.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,5 +175,28 @@ void argumentComment() {
175175
a(
176176
b.c() // comment
177177
);
178+
179+
a(
180+
b, // comment
181+
c.d
182+
);
183+
184+
a(
185+
b, // comment
186+
c.d[0]
187+
);
188+
189+
a(
190+
b, // comment
191+
c.d()
192+
);
193+
}
194+
195+
void prettierIgnore() {
196+
a ->
197+
// prettier-ignore
198+
b
199+
.c().d()
200+
.e().f();
178201
}
179202
}

test/unit-test/member_chain/_output.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -230,5 +230,28 @@ void argumentComment() {
230230
a(
231231
b.c() // comment
232232
);
233+
234+
a(
235+
b, // comment
236+
c.d
237+
);
238+
239+
a(
240+
b, // comment
241+
c.d[0]
242+
);
243+
244+
a(
245+
b, // comment
246+
c.d()
247+
);
248+
}
249+
250+
void prettierIgnore() {
251+
a ->
252+
// prettier-ignore
253+
b
254+
.c().d()
255+
.e().f();
233256
}
234257
}

0 commit comments

Comments
 (0)