prettier-plugin-java
Advanced tools
Changelog
v0.7.0
Add support for trailing commas option (#354)
For enumerations:
// Input
public enum Enum {
ONE,
TWO,
THREE
}
// Output
public enum Enum {
ONE,
TWO,
THREE
}
For arrays:
// Input
public class T {
void t() {
int[] ints = { 1, 2, 3 };
int[] ints = {
aVeryLongArrayValue,
anotherVeryLongArrayValue,
andYetAnotherVeryLongArrayValue
};
}
}
// Output
public class T {
void t() {
int[] ints = { 1, 2, 3 };
int[] ints = {
aVeryLongArrayValue,
anotherVeryLongArrayValue,
andYetAnotherVeryLongArrayValue
};
}
}
By default, remove trailing comma in arrays (#354)
// Input
public class T {
void t() {
int[] ints = { 1, 2, 3 };
}
}
// Output
public class T {
void t() {
int[] ints = { 1, 2, 3 };
}
}
Allow blank lines in enumerations' constant list (#350)
// Input
public enum OtherEnum {
ONE,
TWO,
THREE,
FOUR,
/* Five */
FIVE,
/* Six */
SIX
}
// Output
public enum OtherEnum {
ONE,
TWO,
THREE,
FOUR,
/* Five */
FIVE,
/* Six */
SIX
}
Always add a blank line between an enumeration's constants and declarations (#351)
// This input
public enum EnumWithExtraCommaAndEnumBodyDeclarations {
THIS_IS_GOOD("abc"),
THIS_IS_FINE("abc");
public static final String thisWillBeDeleted = "DELETED";
}
// will be formatted to this output
public enum EnumWithExtraCommaAndEnumBodyDeclarations {
THIS_IS_GOOD("abc"),
THIS_IS_FINE("abc");
public static final String thisWillBeDeleted = "DELETED";
}
Fix blank lines with empty statements (#360)
// Input
public class Test {
public TestField testField;
@Override
public void someMethod() {}
}
// Output (v0.6.0)
public class Test {
public TestField testField;
@Override
public void someMethod() {}
}
// Output (v0.7.0)
public class Test {
public TestField testField;
@Override
public void someMethod() {}
}
Fix line wrapping in switch statements (#359)
// Input
public String shouldWrapEvenForSmallSwitchCases() {
switch (answer) { case "YES": return "YES"; default: return "NO"; }
}
// Output (v0.6.0)
public String shouldWrapEvenForSmallSwitchCases() {
switch (answer) { case "YES": return "YES"; default: return "NO"; }
}
// Output (v0.7.0)
public String shouldWrapEvenForSmallSwitchCases() {
switch (answer) {
case "YES":
return "YES";
default:
return "NO";
}
}
Fix stable reformating of comments in binary expression (#353)
// Input
public boolean binaryOperationWithComments() {
boolean a = one || two >> 1 // one
// two
// three
|| // five
// four
three;
boolean b = one || two >> 1 // one
// two
// three
||
three;
boolean c = one || two >> 1 // one
// two
// three
|| three;
return a || b || c;
}
// Output (v0.6.0)
public boolean binaryOperationWithComments() {
boolean a =
one ||
two >> 1 // two // one
// three
|| // five
// four
three;
boolean b =
one ||
two >> 1 // two // one
// three
||
three;
boolean c =
one ||
two >> 1 // two // one
// three
||
three;
return a || b || c;
}
// Output (v0.7.0)
public boolean binaryOperationWithComments() {
boolean a =
one ||
two >> 1 || // one
// five
// two
// three
// four
three;
boolean b =
one ||
two >> 1 || // one
// two
// three
three;
boolean c =
one ||
two >> 1 || // one
// two
// three
three;
return a || b || c;
}
Fix comments indentation when they are at the end of a block: indent the comments based on the block they are in (#345)
// Input
public class T {
int i;
// comment
}
// Output (v0.6.0)
public class T {
int i;
// comment
}
// Output (v0.7.0)
public class T {
int i;
// comment
}
Fix respect of blank lines with comments (#348)
// Input
void t() {
int i;
// comment
int j;
}
// Output (v0.6.0)
void t() {
int i;
// comment
int j;
}
// Output (v0.7.0)
void t() {
int i;
// comment
int j;
}
Changelog
v0.6.0
Support // formater-off
and // formater-on
comments to disable formating on some parts of the code (#323)
// Input
// @formatter:off
public class PrettierIgnoreClass {
public void myMethod(int param1, int param2, int param3, int param4, int param5, int param6, int param7, int param8, int param9, int param10) {
}
}
// @formatter:on
public class PrettierIgnoreClass {
public void myMethod(
int param1,
int param2,
int param3,
int param4,
int param5,
int param6,
int param7,
int param8,
int param9,
int param10
) {}
}
// Output
// @formatter:off
public class PrettierIgnoreClass {
public void myMethod(int param1, int param2, int param3, int param4, int param5, int param6, int param7, int param8, int param9, int param10) {
}
}
// @formatter:on
public class PrettierIgnoreClass {
public void myMethod(
int param1,
int param2,
int param3,
int param4,
int param5,
int param6,
int param7,
int param8,
int param9,
int param10
) {}
}
Print enums' values on their own line (#319)
// Input
public enum Enum {
SOME_ENUM,
ANOTHER_ENUM,
LAST_ENUM
}
// Output
public enum Enum {
SOME_ENUM,
ANOTHER_ENUM,
LAST_ENUM
}
Remove extra comma in enums (#319)
// Input
public enum EnumWithExtraComma {
SOME_ENUM,
ANOTHER_ENUM,
LAST_ENUM
}
// Output
public enum Enum {
SOME_ENUM,
ANOTHER_ENUM,
LAST_ENUM
}
Respect case when sorting imports (#330)
// Input
import java.util.ArrayList;
// Output
import java.util.ArrayList;
import java.util.List;
import java.util.List;
import java.util.Map;
import java.util.Map;
import java.util.concurrent.*;
import java.util.concurrent.*;
import java.util.concurrent.Semaphore;
import java.util.concurrent.Semaphore;
import java.util.functioN.Consumer;
import java.util.functioN.Consumer;
import java.util.function.Consumer;
import java.util.function.Consumer;
import java.util.function.ConsumerTwo;
import java.util.function.ConsumerTwo;
Improve formatting of lambda expressions when they break (#333)
// Input && v0.5.1
public void lambdaWithoutBracesWhichBreak() {
call(x -> foo.isVeryVeryVeryLongConditionTrue() &&
foo.isAnotherVeryVeryLongConditionTrue());
}
// Output
public void lambdaWithoutBracesWhichBreak() {
call(
x ->
foo.isVeryVeryVeryLongConditionTrue() &&
foo.isAnotherVeryVeryLongConditionTrue()
);
}
Don't indent binary operators (#329)
// Input && v0.5.1
@Annotation(
"This operation with two very long string should break" +
"in a very nice way"
)
public void method() {}
// Output
@Annotation(
"This operation with two very long string should break" +
"in a very nice way"
)
public void method() {}
Improve ternary expression line wrapping (#318)
// Input && v0.5.1
return (columnIndex == null) ? ImmutableMap.<R, V>of()
: new Column(columnIndex);
// Output
return (columnIndex == null)
? ImmutableMap.<R, V>of()
: new Column(columnIndex);
Improve formatting of variable initialization with methods (#332)
// Input && v0.5.1
boolean willDrop = predictDropResponse.getSendResult().isIgnorableFailure() || predictDropResponse.getSendResult().isFatalError();
// Output
boolean willDrop =
predictDropResponse.getSendResult().isIgnorableFailure() ||
predictDropResponse.getSendResult().isFatalError();
(left) << right
or (left) < right
). The parser is now able to parse completely the ElasticSearch Repository (#325)Fix stable reformating of variable declaration with comments (#336)
// Input && v0.5.1
Map<String, String> map =
// there is a random comment on this line up here
// and then there is a separate comment on this line down here
new HashMap<>(someMethodThatReturnsAMap());
// Output
Map<String, String> map =
// there is a random comment on this line up here
// and then there is a separate comment on this line down here
new HashMap<>(someMethodThatReturnsAMap());
Changelog
v0.5.0
Sort class, method and field modifiers (#302). See this doc for more information
// Input
final private static @Annotation String S = "abc";
// Output
@Annotation
private static final String S = "abc";
transitive
keyword with the specs (#297)Changelog
v0.4.0
public enum EnumWhichBreak {
ONE_VALUE,
TWO_VALUE,
THREE_VALUE,
FOUR_VALUE,
FIVE_VALUE,
SIX_VALUE,
SEVEN_VALUE,
EIGHT_VALUE,
NINE_VALUE,
TEN_VALUE
}
would be transformed in:
public enum EnumWhichBreak {
ONE_VALUE,
TWO_VALUE,
THREE_VALUE,
FOUR_VALUE,
FIVE_VALUE,
SIX_VALUE,
SEVEN_VALUE,
EIGHT_VALUE,
NINE_VALUE,
TEN_VALUE
}
When
public enum EnumWhichNotBreak {
SOME_ENUM,
ANOTHER_ENUM,
LAST_ENUM
}
would be kept as it is:
public enum EnumWhichNotBreak {
SOME_ENUM,
ANOTHER_ENUM,
LAST_ENUM
}
public enum EnumWhichNotBreak {
SOME_ENUM,
ANOTHER_ENUM,
LAST_ENUM
}
would be transformed in:
public enum EnumWhichNotBreak {
SOME_ENUM,
ANOTHER_ENUM,
LAST_ENUM
}
when the following is kept as it is:
public enum Enum {
THIS_IS_GOOD("abc"), THIS_IS_FINE("abc");
public static final String thisWillBeDeleted = "DELETED";
private final String value;
public Enum(String value) {
this.value = value;
}
public String toString() {
return "STRING";
}
package my.own.pkg;
import static abc.def;
import static abc.def.Another;
import static abc.def.Something;
import static java.utils.*;
import static something.Different;
import abc.def;
import abc.def.Another;
import abc.def.Something;
import java.utils.*;
import one.last;
import something.Different;
public class PackageAndImports {}
is transformed in:
package my.own.pkg;
import static abc.def;
import static abc.def.Another;
import static abc.def.Something;
import static java.utils.*;
import static something.Different;
import abc.def;
import abc.def.Another;
import abc.def.Something;
import java.utils.*;
import one.last;
import something.Different;
public class PackageAndImports {}
public boolean localVariableDeclarationWhichBreak() {
@Nullable final BackupStatus lastStatus = BackupStatus.fromDbValue(backupRepository.getLastStatus());
final BackupStatus lastStatus = BackupStatus.fromDbValue(backupRepository.getLastStatus());
@Nullable BackupStatus lastStatus = BackupStatus.fromDbValue(backupRepository.getLastStatus());
BackupStatus lastStatus = BackupStatus.fromDbValue(backupRepository.getLastStatus());
}
public boolean localVariableDeclarationWhichDoNotBreak() {
@Nullable final BackupStatus lastStatus = value;
final BackupStatus lastStatus = value;
@Nullable BackupStatus lastStatus = value;
BackupStatus lastStatus = value;
}
is transformed in:
public boolean localVariableDeclarationWhichBreak() {
@Nullable
final BackupStatus lastStatus = BackupStatus.fromDbValue(
backupRepository.getLastStatus()
);
final BackupStatus lastStatus = BackupStatus.fromDbValue(
backupRepository.getLastStatus()
);
@Nullable
BackupStatus lastStatus = BackupStatus.fromDbValue(
backupRepository.getLastStatus()
);
BackupStatus lastStatus = BackupStatus.fromDbValue(
backupRepository.getLastStatus()
);
}
public boolean localVariableDeclarationWhichDoNotBreak() {
@Nullable
final BackupStatus lastStatus = value;
final BackupStatus lastStatus = value;
@Nullable
BackupStatus lastStatus = value;
BackupStatus lastStatus = value;
}
Obj newObject = new Object().something().more().and().that().as().well().but().not().something();
Object.test.creation thisObject = classWithName.invocationOne().invocationTwo();
Object.test.creation thisObject1 = classWithName.invocationOne(argument1, argument2, argument3);
Object.test.creation thisObject2 = classWithName.invocationOne(argument1, argument2, argument3).invocationTwo();
Object.test.creation thisObject3 = classWithName.invocationOne().invocationTwo(argument1, argument2, argument3);
Object.test.creation thisObject4 = classWithName.invocationOne(argument1, argument2, argument3).invocationTwo(argument1, argument2);
Object.test.creation thisObject5 = classWithName.invocationOne(argument1WithAVeryVeryVeryVeryLongName, argument2, argument3).attributeOne.attributeTwo
.invocationTwo(argument1, argument2).attributeThree.invocationThree();
Object.test.creation thisObject6 = classWithName.invocationOne(argument1, argument2,
argument3).attributeOne.attributeTwo.invocationTwo(argument1, argument2).attributeThree.invocationThree();
is transformed in:
Obj newObject = new Object()
.something()
.more()
.and()
.that()
.as()
.well()
.but()
.not()
.something();
Object.test.creation thisObject = classWithName
.invocationOne()
.invocationTwo();
Object.test.creation thisObject1 = classWithName.invocationOne(
argument1,
argument2,
argument3
);
Object.test.creation thisObject2 = classWithName
.invocationOne(argument1, argument2, argument3)
.invocationTwo();
Object.test.creation thisObject3 = classWithName
.invocationOne()
.invocationTwo(argument1, argument2, argument3);
Object.test.creation thisObject4 = classWithName
.invocationOne(argument1, argument2, argument3)
.invocationTwo(argument1, argument2);
Object.test.creation thisObject5 = classWithName
.invocationOne(
argument1WithAVeryVeryVeryVeryLongName,
argument2,
argument3
)
.attributeOne.attributeTwo.invocationTwo(argument1, argument2)
.attributeThree.invocationThree();
Object.test.creation thisObject6 = classWithName
.invocationOne(argument1, argument2, argument3)
.attributeOne.attributeTwo.invocationTwo(argument1, argument2)
.attributeThree.invocationThree();
Object returnSomethingWhichDoNotBreak() {
return oneVariable + secondVariable;
}
Object returnSomethingWhichBreak() {
return oneVariable + secondVariable + thirdVariable + fourthVariable + fifthVariable + sixthVariable + seventhVariable;
}
Object returnSomethingWhichBreakAndAlreadyInParenthesis() {
return (
oneVariable +
secondVariable +
thirdVariable +
fourthVariable +
fifthVariable +
sixthVariable +
seventhVariable
);
}
is transformed in:
Object returnSomethingWhichDoNotBreak() {
return oneVariable + secondVariable;
}
Object returnSomethingWhichBreak() {
return (
oneVariable +
secondVariable +
thirdVariable +
fourthVariable +
fifthVariable +
sixthVariable +
seventhVariable
);
}
Object returnSomethingWhichBreakAndAlreadyInParenthesis() {
return (
oneVariable +
secondVariable +
thirdVariable +
fourthVariable +
fifthVariable +
sixthVariable +
seventhVariable
);
}