From b27677d103e9cd574a9f49f4e48501d9ee0ed668 Mon Sep 17 00:00:00 2001 From: shaodahong Date: Tue, 9 Jun 2020 23:06:31 +0800 Subject: [PATCH 1/5] fix trailingComments contain innerComments --- packages/babel-parser/src/parser/comments.js | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/packages/babel-parser/src/parser/comments.js b/packages/babel-parser/src/parser/comments.js index bf936d2dce10..4deaa8113a72 100644 --- a/packages/babel-parser/src/parser/comments.js +++ b/packages/babel-parser/src/parser/comments.js @@ -264,7 +264,17 @@ export default class CommentsParser extends BaseParser { ) { node.innerComments = trailingComments; } else { - node.trailingComments = trailingComments; + // TrailingComments maybe contain innerComments + const findIndex = trailingComments.findIndex( + comment => comment.end >= node.end, + ); + + if (findIndex !== -1 && findIndex !== 0) { + node.innerComments = trailingComments.slice(0, findIndex); + node.trailingComments = trailingComments.slice(findIndex); + } else { + node.trailingComments = trailingComments; + } } } From 104cb81007830d4d6a9abe1e2167651e6d24f731 Mon Sep 17 00:00:00 2001 From: shaodahong Date: Tue, 9 Jun 2020 23:06:57 +0800 Subject: [PATCH 2/5] add test file --- .../comments/regression/11469/input.js | 7 ++ .../comments/regression/11469/output.json | 77 +++++++++++++++++++ 2 files changed, 84 insertions(+) create mode 100644 packages/babel-parser/test/fixtures/comments/regression/11469/input.js create mode 100644 packages/babel-parser/test/fixtures/comments/regression/11469/output.json diff --git a/packages/babel-parser/test/fixtures/comments/regression/11469/input.js b/packages/babel-parser/test/fixtures/comments/regression/11469/input.js new file mode 100644 index 000000000000..fe81aa8d481e --- /dev/null +++ b/packages/babel-parser/test/fixtures/comments/regression/11469/input.js @@ -0,0 +1,7 @@ +class A { + test() { + // this.member = 'value'; + } + + /* Trailing comment */ +} diff --git a/packages/babel-parser/test/fixtures/comments/regression/11469/output.json b/packages/babel-parser/test/fixtures/comments/regression/11469/output.json new file mode 100644 index 000000000000..a44446676761 --- /dev/null +++ b/packages/babel-parser/test/fixtures/comments/regression/11469/output.json @@ -0,0 +1,77 @@ +{ + "type": "File", + "start":0,"end":82,"loc":{"start":{"line":1,"column":0},"end":{"line":7,"column":1}}, + "program": { + "type": "Program", + "start":0,"end":82,"loc":{"start":{"line":1,"column":0},"end":{"line":7,"column":1}}, + "sourceType": "script", + "interpreter": null, + "body": [ + { + "type": "ClassDeclaration", + "start":0,"end":82,"loc":{"start":{"line":1,"column":0},"end":{"line":7,"column":1}}, + "id": { + "type": "Identifier", + "start":6,"end":7,"loc":{"start":{"line":1,"column":6},"end":{"line":1,"column":7},"identifierName":"A"}, + "name": "A" + }, + "superClass": null, + "body": { + "type": "ClassBody", + "start":8,"end":82,"loc":{"start":{"line":1,"column":8},"end":{"line":7,"column":1}}, + "body": [ + { + "type": "ClassMethod", + "start":12,"end":54,"loc":{"start":{"line":2,"column":2},"end":{"line":4,"column":3}}, + "static": false, + "key": { + "type": "Identifier", + "start":12,"end":16,"loc":{"start":{"line":2,"column":2},"end":{"line":2,"column":6},"identifierName":"test"}, + "name": "test" + }, + "computed": false, + "kind": "method", + "id": null, + "generator": false, + "async": false, + "params": [], + "body": { + "type": "BlockStatement", + "start":19,"end":54,"loc":{"start":{"line":2,"column":9},"end":{"line":4,"column":3}}, + "body": [], + "directives": [], + "innerComments": [ + { + "type": "CommentLine", + "value": " this.member = 'value';", + "start":25,"end":50,"loc":{"start":{"line":3,"column":4},"end":{"line":3,"column":29}} + } + ] + }, + "trailingComments": [ + { + "type": "CommentBlock", + "value": " Trailing comment ", + "start":58,"end":80,"loc":{"start":{"line":6,"column":2},"end":{"line":6,"column":24}} + } + ] + } + ] + } + } + ], + "directives": [] + }, + "comments": [ + { + "type": "CommentLine", + "value": " this.member = 'value';", + "start":25,"end":50,"loc":{"start":{"line":3,"column":4},"end":{"line":3,"column":29}} + }, + { + "type": "CommentBlock", + "value": " Trailing comment ", + "start":58,"end":80,"loc":{"start":{"line":6,"column":2},"end":{"line":6,"column":24}} + } + ] +} \ No newline at end of file From d4406638ca3c7f8f7ac013f8cd4757579462ab87 Mon Sep 17 00:00:00 2001 From: shaodahong Date: Wed, 10 Jun 2020 13:19:01 +0800 Subject: [PATCH 3/5] fix test fail and add more test --- packages/babel-parser/src/parser/comments.js | 16 ++- .../comments/regression/11469/input.js | 11 ++ .../comments/regression/11469/output.json | 108 +++++++++++++++++- .../output.js | 6 +- 4 files changed, 132 insertions(+), 9 deletions(-) diff --git a/packages/babel-parser/src/parser/comments.js b/packages/babel-parser/src/parser/comments.js index 4deaa8113a72..a04acc84d595 100644 --- a/packages/babel-parser/src/parser/comments.js +++ b/packages/babel-parser/src/parser/comments.js @@ -265,13 +265,21 @@ export default class CommentsParser extends BaseParser { node.innerComments = trailingComments; } else { // TrailingComments maybe contain innerComments - const findIndex = trailingComments.findIndex( + const firstTrailingCommentIndex = trailingComments.findIndex( comment => comment.end >= node.end, ); - if (findIndex !== -1 && findIndex !== 0) { - node.innerComments = trailingComments.slice(0, findIndex); - node.trailingComments = trailingComments.slice(findIndex); + if ( + firstTrailingCommentIndex !== -1 && + firstTrailingCommentIndex !== 0 + ) { + node.innerComments = trailingComments.slice( + 0, + firstTrailingCommentIndex, + ); + node.trailingComments = trailingComments.slice( + firstTrailingCommentIndex, + ); } else { node.trailingComments = trailingComments; } diff --git a/packages/babel-parser/test/fixtures/comments/regression/11469/input.js b/packages/babel-parser/test/fixtures/comments/regression/11469/input.js index fe81aa8d481e..6e4c1723b779 100644 --- a/packages/babel-parser/test/fixtures/comments/regression/11469/input.js +++ b/packages/babel-parser/test/fixtures/comments/regression/11469/input.js @@ -5,3 +5,14 @@ class A { /* Trailing comment */ } + +class A { + test() { + // this.member = 'value'; + } +} + +class A { + test() {} + // this.member = 'value'; +} diff --git a/packages/babel-parser/test/fixtures/comments/regression/11469/output.json b/packages/babel-parser/test/fixtures/comments/regression/11469/output.json index a44446676761..2323d29f2d9a 100644 --- a/packages/babel-parser/test/fixtures/comments/regression/11469/output.json +++ b/packages/babel-parser/test/fixtures/comments/regression/11469/output.json @@ -1,9 +1,13 @@ { "type": "File", - "start":0,"end":82,"loc":{"start":{"line":1,"column":0},"end":{"line":7,"column":1}}, + "start":0,"end":193,"loc":{"start":{"line":1,"column":0},"end":{"line":18,"column":1}}, + "errors": [ + "SyntaxError: Identifier 'A' has already been declared (9:6)", + "SyntaxError: Identifier 'A' has already been declared (15:6)" + ], "program": { "type": "Program", - "start":0,"end":82,"loc":{"start":{"line":1,"column":0},"end":{"line":7,"column":1}}, + "start":0,"end":193,"loc":{"start":{"line":1,"column":0},"end":{"line":18,"column":1}}, "sourceType": "script", "interpreter": null, "body": [ @@ -58,6 +62,96 @@ } ] } + }, + { + "type": "ClassDeclaration", + "start":84,"end":140,"loc":{"start":{"line":9,"column":0},"end":{"line":13,"column":1}}, + "id": { + "type": "Identifier", + "start":90,"end":91,"loc":{"start":{"line":9,"column":6},"end":{"line":9,"column":7},"identifierName":"A"}, + "name": "A" + }, + "superClass": null, + "body": { + "type": "ClassBody", + "start":92,"end":140,"loc":{"start":{"line":9,"column":8},"end":{"line":13,"column":1}}, + "body": [ + { + "type": "ClassMethod", + "start":96,"end":138,"loc":{"start":{"line":10,"column":2},"end":{"line":12,"column":3}}, + "static": false, + "key": { + "type": "Identifier", + "start":96,"end":100,"loc":{"start":{"line":10,"column":2},"end":{"line":10,"column":6},"identifierName":"test"}, + "name": "test" + }, + "computed": false, + "kind": "method", + "id": null, + "generator": false, + "async": false, + "params": [], + "body": { + "type": "BlockStatement", + "start":103,"end":138,"loc":{"start":{"line":10,"column":9},"end":{"line":12,"column":3}}, + "body": [], + "directives": [], + "innerComments": [ + { + "type": "CommentLine", + "value": " this.member = 'value';", + "start":109,"end":134,"loc":{"start":{"line":11,"column":4},"end":{"line":11,"column":29}} + } + ] + } + } + ] + } + }, + { + "type": "ClassDeclaration", + "start":142,"end":193,"loc":{"start":{"line":15,"column":0},"end":{"line":18,"column":1}}, + "id": { + "type": "Identifier", + "start":148,"end":149,"loc":{"start":{"line":15,"column":6},"end":{"line":15,"column":7},"identifierName":"A"}, + "name": "A" + }, + "superClass": null, + "body": { + "type": "ClassBody", + "start":150,"end":193,"loc":{"start":{"line":15,"column":8},"end":{"line":18,"column":1}}, + "body": [ + { + "type": "ClassMethod", + "start":154,"end":163,"loc":{"start":{"line":16,"column":2},"end":{"line":16,"column":11}}, + "static": false, + "key": { + "type": "Identifier", + "start":154,"end":158,"loc":{"start":{"line":16,"column":2},"end":{"line":16,"column":6},"identifierName":"test"}, + "name": "test" + }, + "computed": false, + "kind": "method", + "id": null, + "generator": false, + "async": false, + "params": [], + "body": { + "type": "BlockStatement", + "start":161,"end":163,"loc":{"start":{"line":16,"column":9},"end":{"line":16,"column":11}}, + "body": [], + "directives": [] + }, + "trailingComments": [ + { + "type": "CommentLine", + "value": " this.member = 'value';", + "start":166,"end":191,"loc":{"start":{"line":17,"column":2},"end":{"line":17,"column":27}} + } + ] + } + ] + } } ], "directives": [] @@ -72,6 +166,16 @@ "type": "CommentBlock", "value": " Trailing comment ", "start":58,"end":80,"loc":{"start":{"line":6,"column":2},"end":{"line":6,"column":24}} + }, + { + "type": "CommentLine", + "value": " this.member = 'value';", + "start":109,"end":134,"loc":{"start":{"line":11,"column":4},"end":{"line":11,"column":29}} + }, + { + "type": "CommentLine", + "value": " this.member = 'value';", + "start":166,"end":191,"loc":{"start":{"line":17,"column":2},"end":{"line":17,"column":27}} } ] } \ No newline at end of file diff --git a/packages/babel-plugin-transform-flow-comments/test/fixtures/flow-comments/class-type-parameter-extends-type-parameter/output.js b/packages/babel-plugin-transform-flow-comments/test/fixtures/flow-comments/class-type-parameter-extends-type-parameter/output.js index 45e9c5e696fa..13fdfbcd9ab7 100644 --- a/packages/babel-plugin-transform-flow-comments/test/fixtures/flow-comments/class-type-parameter-extends-type-parameter/output.js +++ b/packages/babel-plugin-transform-flow-comments/test/fixtures/flow-comments/class-type-parameter-extends-type-parameter/output.js @@ -24,7 +24,7 @@ Bar /*:: */ /*g*/ -{} -/*h*/ - +{ + /*h*/ +} /*i*/ From 8267257a0576508ebe2251159dbfd36115f245fc Mon Sep 17 00:00:00 2001 From: shaodahong Date: Thu, 11 Jun 2020 10:03:16 +0800 Subject: [PATCH 4/5] improve review change --- packages/babel-parser/src/parser/comments.js | 5 +---- .../test/fixtures/comments/regression/11469/input.js | 4 ++-- .../fixtures/comments/regression/11469/output.json | 12 ++++-------- 3 files changed, 7 insertions(+), 14 deletions(-) diff --git a/packages/babel-parser/src/parser/comments.js b/packages/babel-parser/src/parser/comments.js index a04acc84d595..c990c9e0e8a9 100644 --- a/packages/babel-parser/src/parser/comments.js +++ b/packages/babel-parser/src/parser/comments.js @@ -269,10 +269,7 @@ export default class CommentsParser extends BaseParser { comment => comment.end >= node.end, ); - if ( - firstTrailingCommentIndex !== -1 && - firstTrailingCommentIndex !== 0 - ) { + if (firstTrailingCommentIndex > 0) { node.innerComments = trailingComments.slice( 0, firstTrailingCommentIndex, diff --git a/packages/babel-parser/test/fixtures/comments/regression/11469/input.js b/packages/babel-parser/test/fixtures/comments/regression/11469/input.js index 6e4c1723b779..242927b03af0 100644 --- a/packages/babel-parser/test/fixtures/comments/regression/11469/input.js +++ b/packages/babel-parser/test/fixtures/comments/regression/11469/input.js @@ -6,13 +6,13 @@ class A { /* Trailing comment */ } -class A { +class B { test() { // this.member = 'value'; } } -class A { +class C { test() {} // this.member = 'value'; } diff --git a/packages/babel-parser/test/fixtures/comments/regression/11469/output.json b/packages/babel-parser/test/fixtures/comments/regression/11469/output.json index 2323d29f2d9a..bc3d0bec24bd 100644 --- a/packages/babel-parser/test/fixtures/comments/regression/11469/output.json +++ b/packages/babel-parser/test/fixtures/comments/regression/11469/output.json @@ -1,10 +1,6 @@ { "type": "File", "start":0,"end":193,"loc":{"start":{"line":1,"column":0},"end":{"line":18,"column":1}}, - "errors": [ - "SyntaxError: Identifier 'A' has already been declared (9:6)", - "SyntaxError: Identifier 'A' has already been declared (15:6)" - ], "program": { "type": "Program", "start":0,"end":193,"loc":{"start":{"line":1,"column":0},"end":{"line":18,"column":1}}, @@ -68,8 +64,8 @@ "start":84,"end":140,"loc":{"start":{"line":9,"column":0},"end":{"line":13,"column":1}}, "id": { "type": "Identifier", - "start":90,"end":91,"loc":{"start":{"line":9,"column":6},"end":{"line":9,"column":7},"identifierName":"A"}, - "name": "A" + "start":90,"end":91,"loc":{"start":{"line":9,"column":6},"end":{"line":9,"column":7},"identifierName":"B"}, + "name": "B" }, "superClass": null, "body": { @@ -113,8 +109,8 @@ "start":142,"end":193,"loc":{"start":{"line":15,"column":0},"end":{"line":18,"column":1}}, "id": { "type": "Identifier", - "start":148,"end":149,"loc":{"start":{"line":15,"column":6},"end":{"line":15,"column":7},"identifierName":"A"}, - "name": "A" + "start":148,"end":149,"loc":{"start":{"line":15,"column":6},"end":{"line":15,"column":7},"identifierName":"C"}, + "name": "C" }, "superClass": null, "body": { From 579394c0e31a0e93207198cdcddc33cbc549ac6f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Ribaudo?= Date: Fri, 12 Jun 2020 23:43:01 +0200 Subject: [PATCH 5/5] [skip ci] --- .../test/fixtures/comments/regression/11469/output.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/babel-parser/test/fixtures/comments/regression/11469/output.json b/packages/babel-parser/test/fixtures/comments/regression/11469/output.json index bc3d0bec24bd..c926a81919a8 100644 --- a/packages/babel-parser/test/fixtures/comments/regression/11469/output.json +++ b/packages/babel-parser/test/fixtures/comments/regression/11469/output.json @@ -174,4 +174,4 @@ "start":166,"end":191,"loc":{"start":{"line":17,"column":2},"end":{"line":17,"column":27}} } ] -} \ No newline at end of file +}