Skip to content

Commit 7325029

Browse files
authored
feat(comments): optimize printing of comments in assignments (#1435)
This removes the special handling we had for "array", "string" and "encapsed" in favor of a more generic way to handle comments inside assignments. With this approach, comments between the assignment operator (equal sign) and the value are preserved as leading comments. Fixes #1425
1 parent a5cc867 commit 7325029

5 files changed

Lines changed: 109 additions & 89 deletions

File tree

src/comments.js

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ function handleEndOfLineComment(comment, text, options) {
153153
handleFunction(text, enclosingNode, followingNode, comment, options) ||
154154
handleEntryComments(enclosingNode, comment) ||
155155
handleCallComments(precedingNode, enclosingNode, comment) ||
156-
handleVariableComments(enclosingNode, followingNode, comment) ||
156+
handleAssignComments(enclosingNode, followingNode, comment) ||
157157
handleInlineComments(
158158
enclosingNode,
159159
precedingNode,
@@ -666,18 +666,17 @@ function handleEntryComments(enclosingNode, comment) {
666666
return false;
667667
}
668668

669-
function handleVariableComments(enclosingNode, followingNode, comment) {
670-
if (
671-
enclosingNode &&
672-
enclosingNode.kind === "assign" &&
673-
followingNode &&
674-
(followingNode.kind === "array" ||
675-
followingNode.kind === "string" ||
676-
followingNode.kind === "encapsed")
677-
) {
678-
addLeadingComment(followingNode, comment);
679-
return true;
669+
function handleAssignComments(enclosingNode, followingNode, comment) {
670+
if (enclosingNode && enclosingNode.kind === "assign" && followingNode) {
671+
const equalSignOffset =
672+
enclosingNode.loc.start.offset + enclosingNode.loc.source.indexOf("=");
673+
674+
if (comment.loc.start.offset > equalSignOffset) {
675+
addLeadingComment(followingNode, comment);
676+
return true;
677+
}
680678
}
679+
681680
return false;
682681
}
683682

tests/comments/__snapshots__/jsfmt.spec.js.snap

Lines changed: 68 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -224,50 +224,50 @@ printWidth: 80
224224
=====================================input======================================
225225
<?php
226226
$var =
227-
// Comment
227+
// Comment 1
228228
'some' . 'long' . 'string';
229229
230230
$var =
231-
// Comment
231+
// Comment 2
232232
233233
'some' . 'long' . 'string';
234234
235235
$var =
236236
237-
// Comment
237+
// Comment 3
238238
239239
'some' . 'long' . 'string';
240240
241241
$var =
242-
/* comment */
242+
/* comment 4 */
243243
'some' . 'long' . 'string';
244244
245245
$var =
246246
/**
247-
* multi-line
247+
* multi-line 5
248248
*/
249249
'some' . 'long' . 'string';
250250
251251
$var =
252-
/* inline */ 'some' . 'long' . 'string' . 'some' . 'long' . 'string' . 'some' . 'long' . 'string' . 'some' . 'long' . 'string';
252+
/* inline 6 */ 'some' . 'long' . 'string' . 'some' . 'long' . 'string' . 'some' . 'long' . 'string' . 'some' . 'long' . 'string';
253253
254-
$var = // Comment
255-
// Comment
254+
$var = // Comment 7
255+
// Comment 8
256256
'some' . 'long' . 'string';
257257
258-
$var = // Comment
258+
$var = // Comment 9
259259
'some' . 'long' . 'string';
260260
261-
$var = /* Comment */
262-
// Comment
261+
$var = /* Comment 10 */
262+
// Comment 11
263263
'some' . 'long' . 'string';
264264
265-
$var = // Comment/
266-
/* Comment */
265+
$var = // Comment 12 /
266+
/* Comment 13 */
267267
'some' . 'long' . 'string';
268268
269-
$var = /* Comment */
270-
/* Comment */'some' .
269+
$var = /* Comment 14 */
270+
/* Comment 15 */'some' .
271271
'long' .
272272
'string';
273273
@@ -292,31 +292,31 @@ $var3;
292292
=====================================output=====================================
293293
<?php
294294
$var =
295-
// Comment
295+
// Comment 1
296296
'some' . 'long' . 'string';
297297
298298
$var =
299-
// Comment
299+
// Comment 2
300300
301301
'some' . 'long' . 'string';
302302
303303
$var =
304-
// Comment
304+
// Comment 3
305305
306306
'some' . 'long' . 'string';
307307
308308
$var =
309-
/* comment */
309+
/* comment 4 */
310310
'some' . 'long' . 'string';
311311
312312
$var =
313313
/**
314-
* multi-line
314+
* multi-line 5
315315
*/
316316
'some' . 'long' . 'string';
317317
318318
$var =
319-
/* inline */ 'some' .
319+
/* inline 6 */ 'some' .
320320
'long' .
321321
'string' .
322322
'some' .
@@ -329,21 +329,28 @@ $var =
329329
'long' .
330330
'string';
331331
332-
$var = // Comment
333-
// Comment
332+
$var =
333+
// Comment 7
334+
// Comment 8
334335
'some' . 'long' . 'string';
335336
336-
$var = 'some' . 'long' . 'string'; // Comment
337+
$var =
338+
// Comment 9
339+
'some' . 'long' . 'string';
337340
338-
$var /* Comment */ =
339-
// Comment
341+
$var =
342+
/* Comment 10 */
343+
// Comment 11
340344
'some' . 'long' . 'string';
341345
342-
$var = // Comment/
343-
/* Comment */
346+
$var =
347+
// Comment 12 /
348+
/* Comment 13 */
344349
'some' . 'long' . 'string';
345350
346-
$var /* Comment */ = /* Comment */ 'some' . 'long' . 'string';
351+
$var =
352+
/* Comment 14 */
353+
/* Comment 15 */ 'some' . 'long' . 'string';
347354
348355
// Comment
349356
$var =
@@ -1145,6 +1152,12 @@ $this
11451152
return $arg;
11461153
});
11471154
1155+
1156+
$foo = /**
1157+
* @param array{a: int, b: string} $bar
1158+
*/
1159+
static fn (array $bar) => $bar;
1160+
11481161
=====================================output=====================================
11491162
<?php
11501163
@@ -1182,6 +1195,12 @@ $this
11821195
return $arg;
11831196
});
11841197
1198+
$foo =
1199+
/**
1200+
* @param array{a: int, b: string} $bar
1201+
*/
1202+
static fn(array $bar) => $bar;
1203+
11851204
================================================================================
11861205
`;
11871206

@@ -7266,45 +7285,45 @@ printWidth: 80
72667285
=====================================input======================================
72677286
<?php
72687287
7269-
$obj = // Comment
7288+
$obj = // Comment 1
72707289
[
72717290
'key' => 'val'
72727291
];
72737292
7274-
$obj // Comment
7293+
$obj // Comment 2
72757294
= [
72767295
'key' => 'val'
72777296
];
72787297
7279-
$obj = [ // Comment
7298+
$obj = [ // Comment 3
72807299
'key' => 'val'
72817300
];
72827301
72837302
$obj = [
7284-
// Comment
7303+
// Comment 4
72857304
'key' => 'val'
72867305
];
72877306
7288-
$obj = // Comment
7307+
$obj = // Comment 5
72897308
[
72907309
'val'
72917310
];
72927311
7293-
$obj // Comment
7312+
$obj // Comment 6
72947313
= [
72957314
'val'
72967315
];
72977316
7298-
$obj = [ // Comment
7317+
$obj = [ // Comment 7
72997318
'val'
73007319
];
73017320
73027321
$obj = [
7303-
// Comment
7322+
// Comment 8
73047323
'val'
73057324
];
73067325
7307-
$obj = // Comment
7326+
$obj = // Comment 9
73087327
'val';
73097328
73107329
$obj = // Comment
@@ -7353,47 +7372,43 @@ $obj = // Comment
73537372
<?php
73547373
73557374
$obj =
7356-
// Comment
7375+
// Comment 1
73577376
[
73587377
'key' => 'val',
73597378
];
73607379
7361-
$obj =
7362-
// Comment
7363-
[
7364-
'key' => 'val',
7365-
];
7380+
$obj = [ // Comment 2
7381+
'key' => 'val',
7382+
];
73667383
73677384
$obj = [
7368-
// Comment
7385+
// Comment 3
73697386
'key' => 'val',
73707387
];
73717388
73727389
$obj = [
7373-
// Comment
7390+
// Comment 4
73747391
'key' => 'val',
73757392
];
73767393
73777394
$obj =
7378-
// Comment
7395+
// Comment 5
73797396
['val'];
73807397
7381-
$obj =
7382-
// Comment
7383-
['val'];
7398+
$obj = ['val']; // Comment 6
73847399
73857400
$obj = [
7386-
// Comment
7401+
// Comment 7
73877402
'val',
73887403
];
73897404
73907405
$obj = [
7391-
// Comment
7406+
// Comment 8
73927407
'val',
73937408
];
73947409
73957410
$obj =
7396-
// Comment
7411+
// Comment 9
73977412
'val';
73987413
73997414
$obj =

tests/comments/assign.php

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,49 +1,49 @@
11
<?php
22
$var =
3-
// Comment
3+
// Comment 1
44
'some' . 'long' . 'string';
55

66
$var =
7-
// Comment
7+
// Comment 2
88

99
'some' . 'long' . 'string';
1010

1111
$var =
1212

13-
// Comment
13+
// Comment 3
1414

1515
'some' . 'long' . 'string';
1616

1717
$var =
18-
/* comment */
18+
/* comment 4 */
1919
'some' . 'long' . 'string';
2020

2121
$var =
2222
/**
23-
* multi-line
23+
* multi-line 5
2424
*/
2525
'some' . 'long' . 'string';
2626

2727
$var =
28-
/* inline */ 'some' . 'long' . 'string' . 'some' . 'long' . 'string' . 'some' . 'long' . 'string' . 'some' . 'long' . 'string';
28+
/* inline 6 */ 'some' . 'long' . 'string' . 'some' . 'long' . 'string' . 'some' . 'long' . 'string' . 'some' . 'long' . 'string';
2929

30-
$var = // Comment
31-
// Comment
30+
$var = // Comment 7
31+
// Comment 8
3232
'some' . 'long' . 'string';
3333

34-
$var = // Comment
34+
$var = // Comment 9
3535
'some' . 'long' . 'string';
3636

37-
$var = /* Comment */
38-
// Comment
37+
$var = /* Comment 10 */
38+
// Comment 11
3939
'some' . 'long' . 'string';
4040

41-
$var = // Comment/
42-
/* Comment */
41+
$var = // Comment 12 /
42+
/* Comment 13 */
4343
'some' . 'long' . 'string';
4444

45-
$var = /* Comment */
46-
/* Comment */'some' .
45+
$var = /* Comment 14 */
46+
/* Comment 15 */'some' .
4747
'long' .
4848
'string';
4949

tests/comments/closure.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,3 +34,9 @@
3434

3535
return $arg;
3636
});
37+
38+
39+
$foo = /**
40+
* @param array{a: int, b: string} $bar
41+
*/
42+
static fn (array $bar) => $bar;

0 commit comments

Comments
 (0)