Skip to content

Commit 5d6023e

Browse files
committed
flush comments inside sequences
1 parent 201753a commit 5d6023e

File tree

2 files changed

+43
-30
lines changed

2 files changed

+43
-30
lines changed

src/languages/ts.js

Lines changed: 42 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -160,11 +160,11 @@ export default (options = {}) => {
160160

161161
/**
162162
* @param {Context} context
163-
* @param {TSESTree.Node} node
164163
* @param {TSESTree.Node[]} nodes
164+
* @param {{ line: number, column: number }} until
165165
* @param {boolean} pad
166166
*/
167-
function sequence(context, node, nodes, pad, separator = ',') {
167+
function sequence(context, nodes, until, pad, separator = ',') {
168168
let multiline = false;
169169
let length = -1;
170170

@@ -181,7 +181,7 @@ export default (options = {}) => {
181181
child_context.write(separator);
182182
}
183183

184-
const next = i === nodes.length - 1 ? node.loc.end : nodes[i + 1]?.loc.start || null;
184+
const next = i === nodes.length - 1 ? until : nodes[i + 1]?.loc.start || null;
185185
if (child && flush_trailing_comments(child_context, child.loc.end, next)) {
186186
multiline = true;
187187
}
@@ -226,6 +226,8 @@ export default (options = {}) => {
226226
prev = child;
227227
}
228228

229+
flush_comments_until(context, until);
230+
229231
if (multiline) {
230232
context.dedent();
231233
context.newline();
@@ -278,7 +280,7 @@ export default (options = {}) => {
278280
*/
279281
'ArrayExpression|ArrayPattern': (node, context) => {
280282
context.write('[');
281-
sequence(context, node, /** @type {TSESTree.Node[]} */ (node.elements), false);
283+
sequence(context, /** @type {TSESTree.Node[]} */ (node.elements), node.loc.end, false);
282284
context.write(']');
283285
},
284286

@@ -457,7 +459,7 @@ export default (options = {}) => {
457459

458460
if (node.implements) {
459461
context.write('implements ');
460-
sequence(context, node, node.implements, false);
462+
sequence(context, node.implements, node.body.loc.start, false);
461463
}
462464

463465
context.visit(node.body);
@@ -498,7 +500,7 @@ export default (options = {}) => {
498500
}
499501

500502
context.write('(');
501-
sequence(context, node, node.params, false);
503+
sequence(context, node.params, (node.returnType ?? node.body).loc.start, false);
502504
context.write(')');
503505

504506
if (node.returnType) context.visit(node.returnType);
@@ -544,7 +546,7 @@ export default (options = {}) => {
544546
if (node.async) context.write('async ');
545547

546548
context.write('(');
547-
sequence(context, node, node.params, false);
549+
sequence(context, node.params, node.body.loc.start, false);
548550
context.write(') => ');
549551

550552
if (
@@ -717,7 +719,7 @@ export default (options = {}) => {
717719
}
718720

719721
context.write('{');
720-
sequence(context, node, node.specifiers, true);
722+
sequence(context, node.specifiers, node.source?.loc.start ?? node.loc.end, true);
721723
context.write('}');
722724

723725
if (node.source) {
@@ -843,7 +845,7 @@ export default (options = {}) => {
843845

844846
if (named_specifiers.length > 0) {
845847
context.write('{');
846-
sequence(context, node, named_specifiers, true);
848+
sequence(context, named_specifiers, node.source.loc.start, true);
847849
context.write('}');
848850
}
849851

@@ -966,7 +968,12 @@ export default (options = {}) => {
966968
if (node.computed) context.write(']');
967969

968970
context.write('(');
969-
sequence(context, node, node.value.params, false);
971+
sequence(
972+
context,
973+
node.value.params,
974+
(node.value.returnType ?? node.value.body)?.loc.start ?? node.loc.end,
975+
false
976+
);
970977
context.write(')');
971978

972979
if (node.value.returnType) context.visit(node.value.returnType);
@@ -980,13 +987,13 @@ export default (options = {}) => {
980987

981988
ObjectExpression(node, context) {
982989
context.write('{');
983-
sequence(context, node, node.properties, true);
990+
sequence(context, node.properties, node.loc.end, true);
984991
context.write('}');
985992
},
986993

987994
ObjectPattern(node, context) {
988995
context.write('{');
989-
sequence(context, node, node.properties, true);
996+
sequence(context, node.properties, node.loc.end, true);
990997
context.write('}');
991998

992999
if (node.typeAnnotation) context.visit(node.typeAnnotation);
@@ -1030,7 +1037,12 @@ export default (options = {}) => {
10301037
context.visit(node.key);
10311038
if (node.computed) context.write(']');
10321039
context.write('(');
1033-
sequence(context, node, node.value.params, false);
1040+
sequence(
1041+
context,
1042+
node.value.params,
1043+
(node.value.returnType ?? node.value.body).loc.start,
1044+
false
1045+
);
10341046
context.write(')');
10351047

10361048
if (node.value.returnType) context.visit(node.value.returnType);
@@ -1100,7 +1112,7 @@ export default (options = {}) => {
11001112

11011113
SequenceExpression(node, context) {
11021114
context.write('(');
1103-
sequence(context, node, node.expressions, false);
1115+
sequence(context, node.expressions, node.loc.end, false);
11041116
context.write(')');
11051117
},
11061118

@@ -1335,7 +1347,7 @@ export default (options = {}) => {
13351347

13361348
TSTypeLiteral(node, context) {
13371349
context.write('{ ');
1338-
sequence(context, node, node.members, false, ';');
1350+
sequence(context, node.members, node.loc.end, false, ';');
13391351
context.write(' }');
13401352
},
13411353

@@ -1402,10 +1414,10 @@ export default (options = {}) => {
14021414
TSFunctionType(node, context) {
14031415
if (node.typeParameters) context.visit(node.typeParameters);
14041416

1405-
// @ts-expect-error `acorn-typescript` and `@typescript-eslint/types` have slightly different type definitions
1406-
const parameters = node.parameters;
14071417
context.write('(');
1408-
sequence(context, node, parameters, false);
1418+
1419+
// @ts-expect-error `acorn-typescript` and `@typescript-eslint/types` have slightly different type definitions
1420+
sequence(context, node.parameters, node.typeAnnotation.typeAnnotation.loc.start, false);
14091421

14101422
context.write(') => ');
14111423

@@ -1414,9 +1426,10 @@ export default (options = {}) => {
14141426
},
14151427

14161428
TSIndexSignature(node, context) {
1417-
const indexParameters = node.parameters;
14181429
context.write('[');
1419-
sequence(context, node, indexParameters, false);
1430+
1431+
// @ts-expect-error `acorn-typescript` and `@typescript-eslint/types` have slightly different type definitions
1432+
sequence(context, node.parameters, node.typeAnnotation?.loc.start, false);
14201433
context.write(']');
14211434

14221435
// @ts-expect-error `acorn-typescript` and `@typescript-eslint/types` have slightly different type definitions
@@ -1426,10 +1439,10 @@ export default (options = {}) => {
14261439
TSMethodSignature(node, context) {
14271440
context.visit(node.key);
14281441

1429-
// @ts-expect-error `acorn-typescript` and `@typescript-eslint/types` have slightly different type definitions
1430-
const parametersSignature = node.parameters;
14311442
context.write('(');
1432-
sequence(context, node, parametersSignature, false);
1443+
1444+
// @ts-expect-error `acorn-typescript` and `@typescript-eslint/types` have slightly different type definitions
1445+
sequence(context, node.parameters, node.typeAnnotation.loc.start, false);
14331446
context.write(')');
14341447

14351448
// @ts-expect-error `acorn-typescript` and `@typescript-eslint/types` have slightly different type definitions
@@ -1438,7 +1451,7 @@ export default (options = {}) => {
14381451

14391452
TSTupleType(node, context) {
14401453
context.write('[');
1441-
sequence(context, node, node.elementTypes, false);
1454+
sequence(context, node.elementTypes, node.loc.end, false);
14421455
context.write(']');
14431456
},
14441457

@@ -1449,11 +1462,11 @@ export default (options = {}) => {
14491462
},
14501463

14511464
TSUnionType(node, context) {
1452-
sequence(context, node, node.types, false, ' |');
1465+
sequence(context, node.types, node.loc.end, false, ' |');
14531466
},
14541467

14551468
TSIntersectionType(node, context) {
1456-
sequence(context, node, node.types, false, ' &');
1469+
sequence(context, node.types, node.loc.end, false, ' &');
14571470
},
14581471

14591472
TSLiteralType(node, context) {
@@ -1511,7 +1524,7 @@ export default (options = {}) => {
15111524
context.write(' {');
15121525
context.indent();
15131526
context.newline();
1514-
sequence(context, node, node.members, false);
1527+
sequence(context, node.members, node.loc.end, false);
15151528
context.dedent();
15161529
context.newline();
15171530
context.write('}');
@@ -1543,7 +1556,7 @@ export default (options = {}) => {
15431556
},
15441557

15451558
TSInterfaceBody(node, context) {
1546-
sequence(context, node, node.body, true, ';');
1559+
sequence(context, node.body, node.loc.end, true, ';');
15471560
},
15481561

15491562
TSInterfaceDeclaration(node, context) {
@@ -1552,7 +1565,7 @@ export default (options = {}) => {
15521565
if (node.typeParameters) context.visit(node.typeParameters);
15531566
if (node.extends) {
15541567
context.write(' extends ');
1555-
sequence(context, node, node.extends, false);
1568+
sequence(context, node.extends, node.body.loc.start, false);
15561569
}
15571570
context.write(' {');
15581571
context.visit(node.body);

test/samples/large-file/expected.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3271,7 +3271,7 @@
32713271
},
32723272

32733273
// Keep pipe for back-compat
3274-
pipe() /* fnDone, fnFail, fnProgress */ {
3274+
pipe(/* fnDone, fnFail, fnProgress */ ) {
32753275
var fns = arguments;
32763276

32773277
return jQuery.Deferred(function (newDefer) {

0 commit comments

Comments
 (0)