|
1 | 1 | import { util, type AstPath, type Doc } from "prettier"; |
2 | 2 | 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"; |
4 | 11 | import parser from "./parser.ts"; |
5 | 12 | import printer from "./printer.ts"; |
6 | 13 | import { |
@@ -188,21 +195,22 @@ function handleLabeledStatementComments(commentNode: CommentNode) { |
188 | 195 | } |
189 | 196 |
|
190 | 197 | function handleMemberChainComments(commentNode: CommentNode) { |
191 | | - const { enclosingNode, precedingNode, followingNode } = commentNode; |
| 198 | + const { enclosingNode, followingNode, precedingNode } = commentNode; |
192 | 199 | if ( |
193 | 200 | (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 |
198 | 205 | ) { |
199 | 206 | util.addLeadingComment(enclosingNode, commentNode); |
200 | 207 | return true; |
201 | 208 | } else if ( |
202 | 209 | followingNode && |
203 | 210 | isMember(followingNode) && |
204 | | - precedingNode !== enclosingNode && |
205 | | - !isPrettierIgnore(commentNode) |
| 211 | + (!precedingNode || |
| 212 | + (precedingNode !== getMemberObject(followingNode) && |
| 213 | + precedingNode.end.row < commentNode.start.row)) |
206 | 214 | ) { |
207 | 215 | util.addDanglingComment(followingNode, commentNode, undefined); |
208 | 216 | return true; |
@@ -291,6 +299,14 @@ function isMember(node: SyntaxNode) { |
291 | 299 | ); |
292 | 300 | } |
293 | 301 |
|
| 302 | +function getMemberObject( |
| 303 | + node: ArrayAccessNode | FieldAccessNode | MethodInvocationNode |
| 304 | +) { |
| 305 | + return node.type === SyntaxType.ArrayAccess |
| 306 | + ? node.arrayNode |
| 307 | + : node.objectNode; |
| 308 | +} |
| 309 | + |
294 | 310 | const binaryOperators = new Set([ |
295 | 311 | "<<", |
296 | 312 | ">>", |
|
0 commit comments