diff --git a/packages/prettier-plugin-java/.gitignore b/packages/prettier-plugin-java/.gitignore index c1ee4a8d..20b1e5fa 100644 --- a/packages/prettier-plugin-java/.gitignore +++ b/packages/prettier-plugin-java/.gitignore @@ -2,4 +2,3 @@ test-samples/**/* scripts/single-printer-run samples/**/* !test-samples/.eslintrc.json -!samples/.eslintrc.json diff --git a/packages/prettier-plugin-java/samples/.eslintrc.json b/packages/prettier-plugin-java/samples/.eslintrc.json deleted file mode 100644 index c987ae81..00000000 --- a/packages/prettier-plugin-java/samples/.eslintrc.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "root": true -} diff --git a/packages/prettier-plugin-java/src/printers/classes.js b/packages/prettier-plugin-java/src/printers/classes.js index 68dda485..d5ab13c0 100644 --- a/packages/prettier-plugin-java/src/printers/classes.js +++ b/packages/prettier-plugin-java/src/printers/classes.js @@ -18,9 +18,10 @@ const { concat, join, group, - fill, indent, - getImageWithComments + getImageWithComments, + getLeadingComments, + getTrailingComments } = require("./prettier-builder"); class ClassesPrettierVisitor { @@ -583,9 +584,7 @@ class ClassesPrettierVisitor { enumBody(ctx) { const enumConstantList = this.visit(ctx.enumConstantList); - const enumBodyDeclarations = ctx.enumBodyDeclarations - ? this.visit(ctx.enumBodyDeclarations) - : ";"; + const enumBodyDeclarations = this.visit(ctx.enumBodyDeclarations); const optionnalComma = ctx.Comma ? ctx.Comma.map(elt => concat([elt, " "])) @@ -606,12 +605,7 @@ class ClassesPrettierVisitor { const enumConstants = this.mapVisit(ctx.enumConstant); const commas = ctx.Comma ? ctx.Comma.map(elt => concat([elt, line])) : []; - const enumConstantsWithSeparators = [enumConstants[0]]; - for (let i = 1; i < enumConstants.length; i++) { - enumConstantsWithSeparators.push(commas[i - 1], enumConstants[i]); - } - - return fill(reject(enumConstantsWithSeparators)); + return group(rejectAndJoinSeps(commas, enumConstants)); } enumConstant(ctx) { @@ -642,7 +636,6 @@ class ClassesPrettierVisitor { } enumBodyDeclarations(ctx) { - let content = ""; if (ctx.classBodyDeclaration !== undefined) { const classBodyDeclaration = this.mapVisit(ctx.classBodyDeclaration); @@ -650,9 +643,17 @@ class ClassesPrettierVisitor { ctx.classBodyDeclaration ); - content = rejectAndJoinSeps(separators, classBodyDeclaration); + return rejectAndJoin(line, [ + ctx.Semicolon[0], + rejectAndJoinSeps(separators, classBodyDeclaration) + ]); } - return rejectAndJoin(line, [ctx.Semicolon[0], content]); + + return concat([ + getLeadingComments(ctx.Semicolon[0]), + "", + getTrailingComments(ctx.Semicolon[0]) + ]); } isClassDeclaration(ctx) { diff --git a/packages/prettier-plugin-java/src/printers/prettier-builder.js b/packages/prettier-plugin-java/src/printers/prettier-builder.js index 97baec11..1c4c5560 100644 --- a/packages/prettier-plugin-java/src/printers/prettier-builder.js +++ b/packages/prettier-plugin-java/src/printers/prettier-builder.js @@ -4,6 +4,14 @@ const prettier = require("prettier").doc.builders; const hardLineWithoutBreakParent = { type: "line", hard: true }; function getImageWithComments(token) { + return concat([ + getLeadingComments(token), + token.image, + getTrailingComments(token) + ]); +} + +function getLeadingComments(token) { const arr = []; if (Object.prototype.hasOwnProperty.call(token, "leadingComments")) { token.leadingComments.forEach(element => { @@ -16,7 +24,12 @@ function getImageWithComments(token) { } }); } - arr.push(token.image); + + return concat(arr); +} + +function getTrailingComments(token) { + const arr = []; if (Object.prototype.hasOwnProperty.call(token, "trailingComments")) { if (token.trailingComments[0].startLine !== token.startLine) { arr.push(hardLineWithoutBreakParent); @@ -44,6 +57,7 @@ function getImageWithComments(token) { arr.pop(); } } + return concat(arr); } @@ -125,5 +139,7 @@ module.exports = { indent, dedent, getImageWithComments, + getLeadingComments, + getTrailingComments, hardLineWithoutBreakParent }; diff --git a/packages/prettier-plugin-java/src/printers/printer-utils.js b/packages/prettier-plugin-java/src/printers/printer-utils.js index 44e2456f..e59ea350 100644 --- a/packages/prettier-plugin-java/src/printers/printer-utils.js +++ b/packages/prettier-plugin-java/src/printers/printer-utils.js @@ -524,7 +524,11 @@ function getCSTNodeStartEndToken(ctx) { } function isStatementEmptyStatement(statement) { - return statement.type === "concat" && statement.parts[0] === ";"; + return ( + statement.type === "concat" && + statement.parts[0] === "" && + statement.parts[1] === ";" + ); } module.exports = { diff --git a/packages/prettier-plugin-java/test/unit-test/comments/comments-blocks-and-statements/_output.java b/packages/prettier-plugin-java/test/unit-test/comments/comments-blocks-and-statements/_output.java index 5fdf7584..9e03bb10 100644 --- a/packages/prettier-plugin-java/test/unit-test/comments/comments-blocks-and-statements/_output.java +++ b/packages/prettier-plugin-java/test/unit-test/comments/comments-blocks-and-statements/_output.java @@ -81,5 +81,5 @@ private synchronized void myFunction(int arg1, int arg2/*overloading*/) { //Additionnal enumeration enum Cards { //The Heart and the Spade - HEART/*the heart*/, SPADES/*and the spade*/; + HEART/*the heart*/, SPADES/*and the spade*/ } diff --git a/packages/prettier-plugin-java/test/unit-test/enum/_input.java b/packages/prettier-plugin-java/test/unit-test/enum/_input.java index edf095b8..711d701c 100644 --- a/packages/prettier-plugin-java/test/unit-test/enum/_input.java +++ b/packages/prettier-plugin-java/test/unit-test/enum/_input.java @@ -1,9 +1,29 @@ -public enum Enum { +public enum EnumWhichNotBreak { + + SOME_ENUM, ANOTHER_ENUM, LAST_ENUM + +} + +public enum EnumWhichNotBreakWithExtraSemicolon { SOME_ENUM, ANOTHER_ENUM, LAST_ENUM; } +public enum EnumWhichBreak { + + ONE_VALUE, TWO_VALUE, THREE_VALUE, FOUR_VALUE, FIVE_VALUE, SIX_VALUE, SEVEN_VALUE, EIGTH_VALUE, NINE_VALUE, + TEN_VALUE + +} + +public enum EnumWhichBreakWithExtraSemicolon { + + ONE_VALUE, TWO_VALUE, THREE_VALUE, FOUR_VALUE, FIVE_VALUE, SIX_VALUE, SEVEN_VALUE, EIGTH_VALUE, NINE_VALUE, + TEN_VALUE; + +} + public enum Enum { THIS_IS_GOOD("abc"), THIS_IS_FINE("abc"); diff --git a/packages/prettier-plugin-java/test/unit-test/enum/_output.java b/packages/prettier-plugin-java/test/unit-test/enum/_output.java index f86f9a1c..ba58aff2 100644 --- a/packages/prettier-plugin-java/test/unit-test/enum/_output.java +++ b/packages/prettier-plugin-java/test/unit-test/enum/_output.java @@ -1,5 +1,35 @@ -public enum Enum { - SOME_ENUM, ANOTHER_ENUM, LAST_ENUM; +public enum EnumWhichNotBreak { + SOME_ENUM, ANOTHER_ENUM, LAST_ENUM +} + +public enum EnumWhichNotBreakWithExtraSemicolon { + SOME_ENUM, ANOTHER_ENUM, LAST_ENUM +} + +public enum EnumWhichBreak { + ONE_VALUE, + TWO_VALUE, + THREE_VALUE, + FOUR_VALUE, + FIVE_VALUE, + SIX_VALUE, + SEVEN_VALUE, + EIGTH_VALUE, + NINE_VALUE, + TEN_VALUE +} + +public enum EnumWhichBreakWithExtraSemicolon { + ONE_VALUE, + TWO_VALUE, + THREE_VALUE, + FOUR_VALUE, + FIVE_VALUE, + SIX_VALUE, + SEVEN_VALUE, + EIGTH_VALUE, + NINE_VALUE, + TEN_VALUE } public enum Enum { @@ -20,6 +50,6 @@ public String toString() { class CLassWithEnum { public static enum VALID_THINGS { - FIRST, SECOND; + FIRST, SECOND } }