Eclipse formatter inserts whitespace before method on linebreak - java

Using Eclipse Juno I've got the following issue using the Java code formatter:
If a method call leads to a line break, Eclipse inserts a whitespace before the "dot" of the method invocation (_ shall denote the whitespace)
int nbo = new Foo()//linebreak
_.method();
Unfortunately this whitespace triggers a Checkstyle warning (NoWhitespaceBefore rule). Is there some possibility to stop eclipse inserting the whitespace? Or is it a Checkstyle configuration issue?
Thanks for your help in advance.

You can increase Maximum line width to 120 or bigger number.
On menu Windows -> Preferences
Navigate to Java -> Code Style -> Formatter
Click on Edit button to open a new dialog
On Line Wrapping tab, change Maximum line width
Finally, change Profile name and click OK

You can resolve this either by changing the formatter settings or by changing the Checkstyle configuration.
Option 1 - Formatter Settings (for Eclipse 4.3, but should be the same for Juno)
Window → Preferences → Java → Code Style → Formatter → Edit
Line Wrapping → Function Calls → Qualified Invocations
Set to Do Not wrap
Option 2 - Checkstyle Config
Remove the DOT token from the NoWhitespaceBefore rule:
<module name="NoWhitespaceBefore">
<property name="tokens" value="SEMI,POST_DEC,POST_INC"/>
</module>

Related

How to make IntelliJ 2021 format single-line throwing lambda as in IntelliJ 2020?

I am using IntelliJ code style format definition published at https://github.com/airlift/codestyle/blob/f20834967969cdafce461ee203788e567f842e1e/IntelliJIdea2019/Airlift.xml
IntelliJ 2020.3.4 (and I think all previous versions I used) would format single line throwing lambda like this
Consumer<String> unimplemented = value -> { throw new UnsupportedOperationException(); };
While formatting the above, IntelliJ 2021.2.3 removes spaces inside curly braces:
Consumer<String> unimplemented = value -> {throw new UnsupportedOperationException();};
How to make IntelliJ 2021.2.3 format the code the way older versions did?
In the Code Style settings, go to the "Spaces" tab and find "Within -> Code Braces". Turn it on.
Or if you want to edit the code style XML directly, you can add:
<option name="SPACE_WITHIN_BRACES" value="true" />
in the block
<codeStyleSettings language="JAVA">
...
</codeStyleSettings>

Eclipse: Block comment style of ctrl+shift+/ format changed in Eclipse Version: 2018-12 (4.10.0)

Previous versions of eclipse block comment style for Ctrl+Shift+/
/*
line 1
line 2
line 3
*/
Current Version
/*
* line 1
* line 2
* line 3
*/
It fhifts to right and adds extra spaces and format changes , when i do ctrl+shift+\
others lines of code
whitespaces
whitespaces line 1
whitespaces line 2
whitespaces line 3
whitespaces
others lines of code
Even if i do ctrl+shift = F the format doesn't changes ,
How do i get old formatting??
You can change the formatting as per your preference in eclipse.
Eclipse use profile to save your formatting preferences, You can use the built-in profile or create a new profile.
In Menu Bar
**Window > Preferences > Java > Code Style > Formatter **
Under Active Profile you will find Eclipse build-in, Now you can select this and edit or create a new one.
Best practice will be to create a new profile and **Export it **, So in future, you can import your preferences in the New system or Eclipse.
There are multiple options are available to customize when you edit the profile.
If you are facing issue regarding shortcuts edit your preferences in :
Window > Preferences > General > Keys
You can also export this as CSV for future use.
eclipse.

Removing whitespace from an 'if else' block with eclipse formatter

I currently have Eclipse formatter set up to format an 'if-else' statement like so:
if(condition) {
return foo;
}
else{
return bar;
}
Note the space between the closing parenthesis of the condition, and the opening bracket of the true block - I'd like to remove this space.
In the formatter profile, under Whitespace -> Control statements -> 'if else', there is no option for 'after closing parenthesis'. In the Blocks section, there is an option for 'before opening brace', however this appears to only apply to the false block (and is turned off anyway).
I must be missing an option somewhere - how can I turn this whitespace off?
I am using Eclipse Mars 4.5.0.
You can do that in the Windows -> Preferences -> Java -> Code Style ->formatter -> Edit profile section
I think it does once you select the other option in drop down that you can see below
This is due to Eclipse Bug # 471145 (specific to Mars / 4.5.0), which was reported on 2015-06-26, fixed on 2015-08-01, and will be included in Eclipse 4.5.1 - which should be complete and ready for download by the end of September 2015 as part of the Mars coordinated service release.
Go to Windows > Preferences > Java > Code Style > Formatter > White Space and in Control statements > Blocks, unselect the "before opening brace" option :)

How to tell Eclipse java Formatter (Ctrl + shift+ F) to stop delete white spaces

I want the formatter to stop deleting white spaces in declaration fields
This is what the formatter does when I hit ctrl+shift+f
and this is how I want it to be(the alignment of the values should be kept):
I just don't find where to change it in Formatter settings
In eclipse 3.7 it works this way (Preferences > Java > Code Style > Formatter):

Eclipse formatter settings for the Builder pattern

I'm extremely frustrated with the Eclipse formatting rules for a series of qualified invocations (i.e., the Builder pattern style). For example, here is my preferred formatting for some code that creates a new Apache Commons CLI Options object:
Options options = new Options()
.addOption(OPTION_HELP_SHORT, OPTION_HELP, false, "print usage information")
.addOption(OPTION_VERSION_SHORT, OPTION_VERSION, false,
"print version and exit")
.addOption(OptionBuilder.withLongOpt(OPTION_PROPERTIES)
.hasArg()
.withArgName("FILE")
.withType(File.class)
.withDescription("specify a user properties file")
.create());
I.e., parameters are wrapped and indented if necessary and all qualified invocations except the first, unless necessary, are wrapped and indented if there is more than one. If a parameter list wraps inside a qualified invocation, the invocation should wrap first.
The default formatting in Eclipse ("Wrap only when necessary" for arguments and invocations) yields the following mess:
Options options = new Options().addOption(
OPTION_HELP_SHORT, OPTION_HELP, false, "print usage information")
.addOption(OPTION_VERSION_SHORT, OPTION_VERSION, false,
"print version and exit").addOption(
OptionBuilder.withLongOpt(OPTION_PROPERTIES).hasArg().withArgName(
"FILE").withType(File.class).withDescription(
"specify a user properties file").create());
Going into "Java Code Style -> Formatter -> Line Wrapping" and the line wrapping setting to "Wrap all elements, except first element if not necessary" for invocations yields:
Options options = new Options().addOption(
OPTION_HELP_SHORT, OPTION_HELP, false, "print usage information")
.addOption(OPTION_VERSION_SHORT, OPTION_VERSION, false,
"print version and exit")
.addOption(
OptionBuilder.withLongOpt(OPTION_PROPERTIES).hasArg().withArgName(
"FILE").withType(File.class).withDescription(
"specify a user properties file").create());
I don't like that the OptionBuilder expression isn't being wrapped, or that "FILE" gets wrapped without also wrapping withArgName.
Changing the indentation to "Indent on column" yields:
Options options = new Options().addOption(OPTION_HELP_SHORT, OPTION_HELP,
false, "print usage information")
.addOption(OPTION_VERSION_SHORT,
OPTION_VERSION, false,
"print version and exit")
.addOption(
OptionBuilder.withLongOpt(
OPTION_PROPERTIES)
.hasArg()
.withArgName("FILE")
.withType(File.class)
.withDescription(
"specify a user properties file")
.create());
The is breaking the lines where I'd prefer, but pushing things over much too far to the right.
Is there any way to convince Eclipse to apply my preferred formatting style or something closer to it than any of the above?
Turning off formatting with comments, or inserting line comments is too tedious.
The best way is described here:
... or you can select "Line Wrapping > Never join already wrapped
lines" globally. Then, you can break it manually and the formatter
will only format inside lines (or add additional line breaks if
necessary).
With this setting Eclipse formatter will stop ruining your builder statements.
Use comments:
Object o = foo() //
.bar() //
.toString();
Update for 2021. It is possible to change, navigate to: Code Style -> Formatter -> Line Wrapping -> Wrapping settings -> Function Calls -> Qualified invocations and change value to "Wrap all elements, except first element if not necessary"
In Eclipse 3.6 It's possible to turn off formatting for a region of code. See my answer to
How to turn off the Eclipse code formatter for certain sections of Java code?
AFAIK, this is known problem with Eclipse Formatter:
https://bugs.eclipse.org/bugs/show_bug.cgi?id=59891
On the menu select Window -> Preferences when the window opens select Java -> Code Style -> Formatter and from there you can create your own format style to use by selecting the new or edit option. When editing a formatting profile a new window opens that gives you a lot of different options to use.

Categories