Skip to content

Commit a50f3d7

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

3 files changed

Lines changed: 54 additions & 8 deletions

File tree

src/comments.ts

Lines changed: 24 additions & 8 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 {
@@ -188,21 +195,22 @@ function handleLabeledStatementComments(commentNode: CommentNode) {
188195
}
189196

190197
function handleMemberChainComments(commentNode: CommentNode) {
191-
const { enclosingNode, precedingNode, followingNode } = commentNode;
198+
const { enclosingNode, followingNode, precedingNode } = commentNode;
192199
if (
193200
(enclosingNode?.type === SyntaxType.FieldAccess ||
194-
(enclosingNode?.type === SyntaxType.MethodInvocation &&
195-
precedingNode?.end.row !== commentNode.start.row)) &&
196-
(followingNode?.type === SyntaxType.Identifier ||
197-
followingNode?.type === SyntaxType.TypeArguments)
201+
enclosingNode?.type === SyntaxType.MethodInvocation) &&
202+
precedingNode &&
203+
precedingNode === enclosingNode.objectNode &&
204+
precedingNode.end.row !== commentNode.start.row
198205
) {
199206
util.addLeadingComment(enclosingNode, commentNode);
200207
return true;
201208
} else if (
202209
followingNode &&
203210
isMember(followingNode) &&
204-
precedingNode !== enclosingNode &&
205-
!isPrettierIgnore(commentNode)
211+
(!precedingNode ||
212+
(precedingNode !== getMemberObject(followingNode) &&
213+
precedingNode.end.row < commentNode.start.row))
206214
) {
207215
util.addDanglingComment(followingNode, commentNode, undefined);
208216
return true;
@@ -291,6 +299,14 @@ function isMember(node: SyntaxNode) {
291299
);
292300
}
293301

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

test/unit-test/member_chain/_input.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,5 +175,20 @@ 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+
);
178193
}
179194
}

test/unit-test/member_chain/_output.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -230,5 +230,20 @@ 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+
);
233248
}
234249
}

0 commit comments

Comments
 (0)