Java
Install Syntax Highlighting
:TSInstall java
Supported language servers
- jdtls
Supported formatters
- astyle
- clang_format
- google_java_format
- npm_groovy_lint
- uncrustify
The Java language server (jdtls) also supports formatting, and it is enabled by default. It is possible to fine-tune its formatting rules, but it is also possible to use a different formatter from the above list. When such a formatter is used, jdtls formatting will be disabled to avoid conflict.
jdtls
jdtls is installed automatically once you open a .java
file.
jdtls requires jdk-17 or newer to run.
Neovim (by default) passes basic options (such as vim.opt.shiftwidth
and vim.opt.tabstop
) to the language server when formatting.
It is possible to further customize jdtls formatting by supplying an Eclipse formatter file.
To do so, type :LspSettings jdtls
. It will create a JSON file at .config/lvim/lsp-settings/jdtls.json
and can be treated as global settings.
Add the following content:
{
"java.format.settings.profile": "GoogleStyle",
"java.format.settings.url": "https://raw.githubusercontent.com/google/styleguide/gh-pages/eclipse-java-google-style.xml"
}
To reference a local file in the url attribute, simply set its path: "java.format.settings.url": ".config/lvim/custom-formatter.xml"
It is also possible to specify project-specific configs. To do so, type :LspSettings local jdtls
which will create .nlsp-settings/jdtls.json
in the current working directory, and paste the config that we used for the global settings.
More information about Lsp commands can be found at https://github.com/tamago324/nlsp-settings.nvim
Custom formatters
Custom formatters are CLI tools that are wrapped with null-ls plugin, which is available by default in LunarVim. They should be installed separately from LunarVim and be available on $PATH.
clang-format
clang-format is traditionally used for formatting C/C++ code but can also be used for Java code formatting.
Prerequisites: clang-format should be on the $PATH
Enable formatter in ~/.config/lvim/config.lua
:
local formatters = require "lvim.lsp.null-ls.formatters"
formatters.setup {
{
command = "clang-format",
filetypes = { "java" },
}
}
With the above configuration, the default settings will be used. To see the defaults, type clang-format --dump-config
in the terminal.
clang-format supports multiple predefined styles. For the list of values see: https://clang.llvm.org/docs/ClangFormatStyleOptions.html#configurable-format-style-options
To specify such style you need to set extra args in config.lua
:
{
command = "clang-format",
filetypes = { "java" },
extra_args = { "--style", "Google" },
}
It is also possible to use a format file. For that, you will need a valid clang-format file. You can create one from an existing style that can be used as a base: clang-format --style=Google --dump-config > .clang-format
config.lua
:
{
command = "clang-format",
filetypes = { "java" },
extra_args = { "--style", "file:<format_file_path>" },
}
google-java-format
google-java-format is a program that reformats Java source code to comply with Google Java Style.
Prerequisites: google-java-format should be on the $PATH
Enable formatter in ~/.config/lvim/config.lua
:
formatters = require "lvim.lsp.null-ls.formatters"
formatters.setup {
{
command = "google-java-format",
filetypes = { "java" },
}
}
uncrustify
uncrustify works similarly to clang-format.
Enable formatter in ~/.config/lvim/config.lua
:
formatters = require "lvim.lsp.null-ls.formatters"
formatters.setup {
{
command = "uncrustify",
filetypes = { "java" },
extra_args = { "-c", "path/to/your.cfg" },
}
}
Supported linters
{ "checkstyle", "pmd", "semgrep" }
Advanced configuration
It is also possible to fully customize the language server. See https://github.com/LunarVim/starter.lvim to get ideas on how to proceed with that.