From e26b5c51ed152ea1047bd94093f514d95b167a3e Mon Sep 17 00:00:00 2001 From: Chris Date: Mon, 15 Mar 2021 23:11:39 -0400 Subject: update LSP get nvim-jdtls working with Java --- init.lua | 4 ++++ lua/lsp/java-ls.lua | 15 +++++++++++++++ lua/lsp/json-ls.lua | 10 ++++++++++ lua/lsp/python-ls.lua | 2 ++ lua/lsp/yaml-ls.lua | 2 ++ lua/nv-vscode/init.vim | 4 ++++ lua/utils.lua | 1 + utils/bin/java-linux-ls | 28 ++++++++++++++++++++++++++++ 8 files changed, 66 insertions(+) create mode 100644 lua/lsp/java-ls.lua create mode 100644 lua/lsp/json-ls.lua create mode 100644 lua/lsp/python-ls.lua create mode 100644 lua/lsp/yaml-ls.lua create mode 100755 utils/bin/java-linux-ls diff --git a/init.lua b/init.lua index b8040799..c869cca7 100644 --- a/init.lua +++ b/init.lua @@ -38,4 +38,8 @@ else require('lsp.lua-ls') require('lsp.bash-ls') require('lsp.js-ts-ls') + -- require('lsp.java-ls') + require('lsp.python-ls') + require('lsp.json-ls') + require('lsp.yaml-ls') end diff --git a/lua/lsp/java-ls.lua b/lua/lsp/java-ls.lua new file mode 100644 index 00000000..72ce5104 --- /dev/null +++ b/lua/lsp/java-ls.lua @@ -0,0 +1,15 @@ +-- In Vimscript +-- augroup lsp +-- au! +-- au FileType java lua require('jdtls').start_or_attach({cmd = {'java-linux-ls'}}) +-- augroup end +-- find_root looks for parent directories relative to the current buffer containing one of the given arguments. +-- require'lspconfig'.jdtls.setup {cmd = {'java-linux-ls'}} +if vim.fn.has("mac") == 1 then + JAVA_LS_EXECUTABLE = 'java-mac-ls' +elseif vim.fn.has("unix") == 1 then + JAVA_LS_EXECUTABLE = 'java-linux-ls' +else + print("Unsupported system") +end +require('jdtls').start_or_attach({cmd = {JAVA_LS_EXECUTABLE}, root_dir = require('jdtls.setup').find_root({'gradle.build', 'pom.xml'})}) diff --git a/lua/lsp/json-ls.lua b/lua/lsp/json-ls.lua new file mode 100644 index 00000000..d13fed3f --- /dev/null +++ b/lua/lsp/json-ls.lua @@ -0,0 +1,10 @@ +-- npm install -g vscode-json-languageserver +require'lspconfig'.jsonls.setup { + commands = { + Format = { + function() + vim.lsp.buf.range_formatting({},{0,0},{vim.fn.line("$"),0}) + end + } + } +} diff --git a/lua/lsp/python-ls.lua b/lua/lsp/python-ls.lua new file mode 100644 index 00000000..11eeef91 --- /dev/null +++ b/lua/lsp/python-ls.lua @@ -0,0 +1,2 @@ +-- npm i -g pyright +require'lspconfig'.pyright.setup{} diff --git a/lua/lsp/yaml-ls.lua b/lua/lsp/yaml-ls.lua new file mode 100644 index 00000000..904f20ea --- /dev/null +++ b/lua/lsp/yaml-ls.lua @@ -0,0 +1,2 @@ +-- npm install -g yaml-language-server +require'lspconfig'.yamlls.setup{} diff --git a/lua/nv-vscode/init.vim b/lua/nv-vscode/init.vim index 9ca19a3b..746d189d 100644 --- a/lua/nv-vscode/init.vim +++ b/lua/nv-vscode/init.vim @@ -103,3 +103,7 @@ xmap gc VSCodeCommentary nmap gc VSCodeCommentary omap gc VSCodeCommentary nmap gcc VSCodeCommentaryLine + +" Simulate same TAB behavior in VSCode + nmap :Tabnext + nmap :Tabprev diff --git a/lua/utils.lua b/lua/utils.lua index 277ca728..22fe415a 100644 --- a/lua/utils.lua +++ b/lua/utils.lua @@ -26,6 +26,7 @@ define_augroups( {'BufWinEnter', '*', 'setlocal formatoptions-=c formatoptions-=r formatoptions-=o'}, {'BufRead', '*', 'setlocal formatoptions-=c formatoptions-=r formatoptions-=o'}, {'BufNewFile', '*', 'setlocal formatoptions-=c formatoptions-=r formatoptions-=o'}, + {'FileType', 'java', 'luafile ~/.config/nvim/lua/lsp/java-ls.lua'}, }, } ) diff --git a/utils/bin/java-linux-ls b/utils/bin/java-linux-ls new file mode 100755 index 00000000..3c76662e --- /dev/null +++ b/utils/bin/java-linux-ls @@ -0,0 +1,28 @@ +#!/usr/bin/env bash + +# NOTE: +# This doesn't work as is on Windows. You'll need to create an equivalent `.bat` file instead +# +# NOTE: +# If you're not using Linux you'll need to adjust the `-configuration` option +# to point to the `config_mac' or `config_win` folders depending on your system. + +JAR="$HOME/.config/nvim/ls/eclipse.jdt.ls/org.eclipse.jdt.ls.product/target/repository/plugins/org.eclipse.equinox.launcher_*.jar" +GRADLE_HOME=$HOME/gradle $HOME/.sdkman/candidates/java/current/bin/java \ + -Declipse.application=org.eclipse.jdt.ls.core.id1 \ + -Dosgi.bundles.defaultStartLevel=4 \ + -Declipse.product=org.eclipse.jdt.ls.core.product \ + -Dlog.protocol=true \ + -Dlog.level=ALL \ + -javaagent:/usr/local/share/lombok/lombok.jar \ + -Xms1g \ + -Xmx2G \ + -jar $(echo "$JAR") \ + -configuration "$HOME/.config/nvim/ls/eclipse.jdt.ls/org.eclipse.jdt.ls.product/target/repository/config_linux" \ + -data "${1:-$HOME/workspace}" \ + --add-modules=ALL-SYSTEM \ + --add-opens java.base/java.util=ALL-UNNAMED \ + --add-opens java.base/java.lang=ALL-UNNAMED + + # for older java versions if you wanna use lombok + # -Xbootclasspath/a:/usr/local/share/lombok/lombok.jar \ -- cgit v1.2.3