vscode-java icon indicating copy to clipboard operation
vscode-java copied to clipboard

Use google-format-code instead of eclipse ?

Open hexa00 opened this issue 6 years ago • 9 comments

Is there a way to use google-format-code instead of the eclipse formatter with vscode-java ?

At the moment i'm forced to use it with the SaveAndRun extension, but this has issues like me doing changes while the file is saved and having to reconcile the buffer as it tries to reload.

I could work on a PR for this if you give a few stating points on how to implement this, it would help ?

Thanks,

hexa00 avatar Oct 04 '18 14:10 hexa00

Take a look at https://github.com/eclipse/eclipse.jdt.ls/pull/640 I think it provides what you need.

gorkem avatar Oct 05 '18 07:10 gorkem

@gorkem Yeah unfortunately even using like:

{ "java.format.enabled": true, "java.saveActions.organizeImports": true, "java.format.onType.enabled": true, "java.format.settings.url": "https://raw.githubusercontent.com/google/styleguide/gh-pages/eclipse-java-google-style.xml" }

The style is still different than what I get when I run google-format-code :(

hexa00 avatar Oct 05 '18 13:10 hexa00

@hexa00 Try to add:

"editor.tabSize": 2,
"editor.detectIndentation": false,
"editor.insertSpaces": true,

snjeza avatar Oct 05 '18 17:10 snjeza

@snjeza Thanks but no luck it's like eclipse will format:

Like this:

  List<String> someIds = foo.stream()
        .map(id -> Something.Func(ABC, id))
        .collect(Collectors.toList());

But google-format-code will do:

 List<String> someIds =
        foo
            .stream()
            .map(id -> Something.Func(ABC, id))
            .collect(Collectors.toList());

hexa00 avatar Oct 05 '18 18:10 hexa00

I think Eclipse formatter does not have an option to insert newline before '.' references. I am not sure if there is any value over SaveAndRun extension to making this internal to vscode-java. What is the issue that you are having with SaveAndRun?

gorkem avatar Oct 06 '18 17:10 gorkem

@gorkem The main problem is that there's a delay to between the save and reload of the formatted code in vscode. So if I save and continue to type then I have modifications that are not in the reloaded file causing vscode to prompt me to compare the unsaved buffer and the reload file. It can get quite annoying :(

hexa00 avatar Oct 06 '18 20:10 hexa00

edit: @fbricon will you please relabel? Thanks in advance

@gorkem will you please label this as an enhancement rather than a question?

anthonyvdotbe avatar Mar 22 '20 09:03 anthonyvdotbe

I think embed google-java-format into language server will be the best option. Just like the IntelliJ IDEA's google-java-format plugin did.

doggy8088 avatar Sep 04 '22 16:09 doggy8088

Bumping because Google released binary versions of google-java-format this week.

Not sure if they are useful to this extension (the binaries are huge). But for future readers, you can just download the binary and put it on PATH (rename it to google-java-format or google-java-format.exe if on Windows), then run it with the vscode-runonsave extension.

Example config:

// settings.json
{
  "emeraldwalk.runonsave": {
    "commands": [
      {
        "match": ".java$",
        "cmd": "google-java-format --replace ${file}"
      }
    ]
  }
}

abceleung avatar Feb 21 '24 07:02 abceleung