summaryrefslogtreecommitdiff
path: root/ftplugin
diff options
context:
space:
mode:
Diffstat (limited to 'ftplugin')
-rw-r--r--ftplugin/cmake.lua5
-rw-r--r--ftplugin/cpp.lua13
-rw-r--r--ftplugin/css.lua9
-rw-r--r--ftplugin/css.vim1
-rw-r--r--ftplugin/dart.lua11
-rw-r--r--ftplugin/docker.lua6
-rw-r--r--ftplugin/elixir.lua10
-rw-r--r--ftplugin/elm.lua9
-rw-r--r--ftplugin/go.lua22
-rw-r--r--ftplugin/graphql.lua2
-rw-r--r--ftplugin/html.lua10
-rw-r--r--ftplugin/html.vim1
-rw-r--r--ftplugin/java.lua50
-rw-r--r--ftplugin/javascript.lua68
-rw-r--r--ftplugin/javascript.vim1
-rw-r--r--ftplugin/javascriptreact.lua68
-rw-r--r--ftplugin/javascriptreact.vim1
-rw-r--r--ftplugin/json.lua28
-rw-r--r--ftplugin/kotlin.lua36
-rw-r--r--ftplugin/latex.lua4
-rw-r--r--ftplugin/lua.lua71
-rw-r--r--ftplugin/php.lua4
-rw-r--r--ftplugin/python.lua87
-rw-r--r--ftplugin/ruby.lua24
-rw-r--r--ftplugin/rust.lua87
-rw-r--r--ftplugin/sh.lua33
-rw-r--r--ftplugin/tf.lua5
-rw-r--r--ftplugin/typescript.lua68
-rw-r--r--ftplugin/typescriptreact.lua88
-rw-r--r--ftplugin/vim.lua5
-rw-r--r--ftplugin/vue.lua5
-rw-r--r--ftplugin/yaml.lua6
-rw-r--r--ftplugin/yaml.vim1
-rw-r--r--ftplugin/zsh.lua40
34 files changed, 874 insertions, 5 deletions
diff --git a/ftplugin/cmake.lua b/ftplugin/cmake.lua
new file mode 100644
index 00000000..a9647118
--- /dev/null
+++ b/ftplugin/cmake.lua
@@ -0,0 +1,5 @@
+require'lspconfig'.cmake.setup {
+ cmd = {DATA_PATH .. '/lspinstall/cmake/venv/bin/cmake-language-server'},
+ on_attach = require'lsp'.common_on_attach,
+ filetypes = {"cmake"},
+}
diff --git a/ftplugin/cpp.lua b/ftplugin/cpp.lua
new file mode 100644
index 00000000..594c375b
--- /dev/null
+++ b/ftplugin/cpp.lua
@@ -0,0 +1,13 @@
+require'lspconfig'.clangd.setup {
+ cmd = {DATA_PATH .. "/lspinstall/cpp/clangd/bin/clangd"},
+ on_attach = require'lsp'.common_on_attach,
+ handlers = {
+ ["textDocument/publishDiagnostics"] = vim.lsp.with(vim.lsp.diagnostic.on_publish_diagnostics, {
+ virtual_text = O.lang.clang.diagnostics.virtual_text,
+ signs = O.lang.clang.diagnostics.signs,
+ underline = O.lang.clang.diagnostics.underline,
+ update_in_insert = true
+
+ })
+ }
+}
diff --git a/ftplugin/css.lua b/ftplugin/css.lua
new file mode 100644
index 00000000..4affb45e
--- /dev/null
+++ b/ftplugin/css.lua
@@ -0,0 +1,9 @@
+-- npm install -g vscode-css-languageserver-bin
+require'lspconfig'.cssls.setup {
+ cmd = {
+ "node", DATA_PATH .. "/lspinstall/css/vscode-css/css-language-features/server/dist/node/cssServerMain.js",
+ "--stdio"
+ },
+ on_attach = require'lsp'.common_on_attach
+}
+vim.cmd("setl ts=2 sw=2")
diff --git a/ftplugin/css.vim b/ftplugin/css.vim
deleted file mode 100644
index eadd3f51..00000000
--- a/ftplugin/css.vim
+++ /dev/null
@@ -1 +0,0 @@
-setl ts=2 sw=2
diff --git a/ftplugin/dart.lua b/ftplugin/dart.lua
new file mode 100644
index 00000000..fe4898e8
--- /dev/null
+++ b/ftplugin/dart.lua
@@ -0,0 +1,11 @@
+require'lspconfig'.dartls.setup{
+ cmd = { "dart", O.lang.dart.sdk_path, "--lsp" },
+ on_attach = require'lsp'.common_on_attach,
+ init_options = {
+ closingLabels = false,
+ flutterOutline = false,
+ onlyAnalyzeProjectsWithOpenFiles = false,
+ outline = false,
+ suggestFromUnimportedLibraries = true
+ }
+}
diff --git a/ftplugin/docker.lua b/ftplugin/docker.lua
new file mode 100644
index 00000000..b477a239
--- /dev/null
+++ b/ftplugin/docker.lua
@@ -0,0 +1,6 @@
+-- npm install -g dockerfile-language-server-nodejs
+require'lspconfig'.dockerls.setup {
+ cmd = {DATA_PATH .. "/lspinstall/dockerfile/node_modules/.bin/docker-langserver", "--stdio"},
+ on_attach = require'lsp'.common_on_attach,
+ root_dir = vim.loop.cwd
+}
diff --git a/ftplugin/elixir.lua b/ftplugin/elixir.lua
new file mode 100644
index 00000000..418b4c4d
--- /dev/null
+++ b/ftplugin/elixir.lua
@@ -0,0 +1,10 @@
+require'lspconfig'.elixirls.setup{
+ cmd = { DATA_PATH .. "/lspinstall/elixir/elixir-ls/language_server.sh"};
+}
+
+-- needed for the LSP to recognize elixir files (alternativly just use elixir-editors/vim-elixir)
+vim.cmd([[
+ au BufRead,BufNewFile *.ex,*.exs set filetype=elixir
+ au BufRead,BufNewFile *.eex,*.leex,*.sface set filetype=eelixir
+ au BufRead,BufNewFile mix.lock set filetype=elixir
+]]) \ No newline at end of file
diff --git a/ftplugin/elm.lua b/ftplugin/elm.lua
new file mode 100644
index 00000000..3572a607
--- /dev/null
+++ b/ftplugin/elm.lua
@@ -0,0 +1,9 @@
+require'lspconfig'.elmls.setup {
+ cmd = {DATA_PATH .. "/lspinstall/elm/node_modules/.bin/elm-language-server"},
+ init_options= {
+ elmAnalyseTrigger = "change",
+ elmFormatPath = DATA_PATH .. "/lspinstall/elm/node_modules/.bin/elm-format",
+ elmPath = DATA_PATH .. "/lspinstall/elm/node_modules/.bin/elm",
+ elmTestPath = DATA_PATH .. "/lspinstall/elm/node_modules/.bin/elm-test"
+ }
+}
diff --git a/ftplugin/go.lua b/ftplugin/go.lua
new file mode 100644
index 00000000..b2d6a82a
--- /dev/null
+++ b/ftplugin/go.lua
@@ -0,0 +1,22 @@
+require'lspconfig'.gopls.setup {
+ cmd = {DATA_PATH .. "/lspinstall/go/gopls"},
+ settings = {gopls = {analyses = {unusedparams = true}, staticcheck = true}},
+ root_dir = require'lspconfig'.util.root_pattern(".git", "go.mod"),
+ init_options = {usePlaceholders = true, completeUnimported = true},
+ on_attach = require'lsp'.common_on_attach
+}
+
+if O.lang.go.autoformat then
+ require('lv-utils').define_augroups({
+ _go_format = {
+ {'BufWritePre', '*.go', 'lua vim.lsp.buf.formatting_sync(nil,1000)'}
+ },
+ _go = {
+ -- Go generally requires Tabs instead of spaces.
+ {'FileType', 'go', 'setlocal tabstop=4'},
+ {'FileType', 'go', 'setlocal shiftwidth=4'},
+ {'FileType', 'go', 'setlocal softtabstop=4'},
+ {'FileType', 'go', 'setlocal noexpandtab'}
+ }
+ })
+end
diff --git a/ftplugin/graphql.lua b/ftplugin/graphql.lua
new file mode 100644
index 00000000..0bd97ed5
--- /dev/null
+++ b/ftplugin/graphql.lua
@@ -0,0 +1,2 @@
+-- npm install -g graphql-language-service-cli
+require'lspconfig'.graphql.setup {on_attach = require'lsp'.common_on_attach}
diff --git a/ftplugin/html.lua b/ftplugin/html.lua
new file mode 100644
index 00000000..26f149d5
--- /dev/null
+++ b/ftplugin/html.lua
@@ -0,0 +1,10 @@
+-- npm install -g vscode-html-languageserver-bin
+local capabilities = vim.lsp.protocol.make_client_capabilities()
+capabilities.textDocument.completion.completionItem.snippetSupport = true
+
+require'lspconfig'.html.setup {
+ cmd = {"node", DATA_PATH .. "/lspinstall/html/vscode-html/html-language-features/server/dist/node/htmlServerMain.js", "--stdio"},
+ on_attach = require'lsp'.common_on_attach,
+ capabilities = capabilities
+}
+vim.cmd("setl ts=2 sw=2")
diff --git a/ftplugin/html.vim b/ftplugin/html.vim
deleted file mode 100644
index eadd3f51..00000000
--- a/ftplugin/html.vim
+++ /dev/null
@@ -1 +0,0 @@
-setl ts=2 sw=2
diff --git a/ftplugin/java.lua b/ftplugin/java.lua
new file mode 100644
index 00000000..0b151b66
--- /dev/null
+++ b/ftplugin/java.lua
@@ -0,0 +1,50 @@
+local util = require 'lspconfig/util'
+-- 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
+
+-- local bundles = {
+-- vim.fn.glob(
+-- CONFIG_PATH.."/.debuggers/java-debug/com.microsoft.java.debug.plugin/target/com.microsoft.java.debug.plugin-*.jar")
+-- };
+
+local on_attach = function(client, bufr)
+ -- require('jdtls').setup_dap()
+ require'lsp'.common_on_attach(client, bufr)
+end
+
+require'lspconfig'.jdtls.setup {
+ on_attach = on_attach,
+ cmd = {DATA_PATH .. "/lspinstall/java/jdtls.sh"},
+ filetypes = { "java" },
+ root_dir = util.root_pattern({'.git', 'build.gradle', 'pom.xml'}),
+ -- init_options = {bundles = bundles}
+ -- on_attach = require'lsp'.common_on_attach
+}
+
+-- require('jdtls').start_or_attach({
+-- on_attach = on_attach,
+-- cmd = {DATA_PATH .. "/lspinstall/java/jdtls.sh"},
+-- root_dir = require('jdtls.setup').find_root({'build.gradle', 'pom.xml', '.git'}),
+-- init_options = {bundles = bundles}
+-- })
+
+-- TODO setup autoformat stuff later
+ -- _java = {
+ -- -- {'FileType', 'java', 'luafile '..CONFIG_PATH..'/lua/lsp/java-ls.lua'},
+ -- {
+ -- 'FileType', 'java',
+ -- 'nnoremap ca <Cmd>lua require(\'jdtls\').code_action()<CR>'
+ -- }
+ -- }
diff --git a/ftplugin/javascript.lua b/ftplugin/javascript.lua
new file mode 100644
index 00000000..173f6693
--- /dev/null
+++ b/ftplugin/javascript.lua
@@ -0,0 +1,68 @@
+-- npm install -g typescript typescript-language-server
+-- require'snippets'.use_suggested_mappings()
+-- local capabilities = vim.lsp.protocol.make_client_capabilities()
+-- capabilities.textDocument.completion.completionItem.snippetSupport = true;
+-- local on_attach_common = function(client)
+-- print("LSP Initialized")
+-- require'completion'.on_attach(client)
+-- require'illuminate'.on_attach(client)
+-- end
+require'lspconfig'.tsserver.setup {
+ cmd = {
+ DATA_PATH ..
+ "/lspinstall/typescript/node_modules/.bin/typescript-language-server",
+ "--stdio"
+ },
+ filetypes = {
+ "javascript", "javascriptreact", "javascript.jsx", "typescript",
+ "typescriptreact", "typescript.tsx"
+ },
+ on_attach = require'lsp'.tsserver_on_attach,
+ -- This makes sure tsserver is not used for formatting (I prefer prettier)
+ -- on_attach = require'lsp'.common_on_attach,
+ root_dir = require('lspconfig/util').root_pattern("package.json",
+ "tsconfig.json",
+ "jsconfig.json", ".git"),
+ settings = {documentFormatting = false},
+ handlers = {
+ ["textDocument/publishDiagnostics"] = vim.lsp.with(
+ vim.lsp.diagnostic.on_publish_diagnostics, {
+ virtual_text = O.lang.tsserver.diagnostics.virtual_text,
+ signs = O.lang.tsserver.diagnostics.signs,
+ underline = O.lang.tsserver.diagnostics.underline,
+ update_in_insert = true
+
+ })
+ }
+}
+
+if O.lang.tsserver.autoformat then
+ require('lv-utils').define_augroups({
+ _javascript_autoformat = {
+ {
+
+ 'BufWritePre', '*.js',
+ 'lua vim.lsp.buf.formatting_sync(nil, 1000)'
+ }
+ },
+ _javascriptreact_autoformat = {
+ {
+ 'BufWritePre', '*.jsx',
+ 'lua vim.lsp.buf.formatting_sync(nil, 1000)'
+ }
+ },
+ _typescript_autoformat = {
+ {
+ 'BufWritePre', '*.ts',
+ 'lua vim.lsp.buf.formatting_sync(nil, 1000)'
+ }
+ },
+ _typescriptreact_autoformat = {
+ {
+ 'BufWritePre', '*.tsx',
+ 'lua vim.lsp.buf.formatting_sync(nil, 1000)'
+ }
+ }
+ })
+end
+vim.cmd("setl ts=2 sw=2")
diff --git a/ftplugin/javascript.vim b/ftplugin/javascript.vim
deleted file mode 100644
index eadd3f51..00000000
--- a/ftplugin/javascript.vim
+++ /dev/null
@@ -1 +0,0 @@
-setl ts=2 sw=2
diff --git a/ftplugin/javascriptreact.lua b/ftplugin/javascriptreact.lua
new file mode 100644
index 00000000..173f6693
--- /dev/null
+++ b/ftplugin/javascriptreact.lua
@@ -0,0 +1,68 @@
+-- npm install -g typescript typescript-language-server
+-- require'snippets'.use_suggested_mappings()
+-- local capabilities = vim.lsp.protocol.make_client_capabilities()
+-- capabilities.textDocument.completion.completionItem.snippetSupport = true;
+-- local on_attach_common = function(client)
+-- print("LSP Initialized")
+-- require'completion'.on_attach(client)
+-- require'illuminate'.on_attach(client)
+-- end
+require'lspconfig'.tsserver.setup {
+ cmd = {
+ DATA_PATH ..
+ "/lspinstall/typescript/node_modules/.bin/typescript-language-server",
+ "--stdio"
+ },
+ filetypes = {
+ "javascript", "javascriptreact", "javascript.jsx", "typescript",
+ "typescriptreact", "typescript.tsx"
+ },
+ on_attach = require'lsp'.tsserver_on_attach,
+ -- This makes sure tsserver is not used for formatting (I prefer prettier)
+ -- on_attach = require'lsp'.common_on_attach,
+ root_dir = require('lspconfig/util').root_pattern("package.json",
+ "tsconfig.json",
+ "jsconfig.json", ".git"),
+ settings = {documentFormatting = false},
+ handlers = {
+ ["textDocument/publishDiagnostics"] = vim.lsp.with(
+ vim.lsp.diagnostic.on_publish_diagnostics, {
+ virtual_text = O.lang.tsserver.diagnostics.virtual_text,
+ signs = O.lang.tsserver.diagnostics.signs,
+ underline = O.lang.tsserver.diagnostics.underline,
+ update_in_insert = true
+
+ })
+ }
+}
+
+if O.lang.tsserver.autoformat then
+ require('lv-utils').define_augroups({
+ _javascript_autoformat = {
+ {
+
+ 'BufWritePre', '*.js',
+ 'lua vim.lsp.buf.formatting_sync(nil, 1000)'
+ }
+ },
+ _javascriptreact_autoformat = {
+ {
+ 'BufWritePre', '*.jsx',
+ 'lua vim.lsp.buf.formatting_sync(nil, 1000)'
+ }
+ },
+ _typescript_autoformat = {
+ {
+ 'BufWritePre', '*.ts',
+ 'lua vim.lsp.buf.formatting_sync(nil, 1000)'
+ }
+ },
+ _typescriptreact_autoformat = {
+ {
+ 'BufWritePre', '*.tsx',
+ 'lua vim.lsp.buf.formatting_sync(nil, 1000)'
+ }
+ }
+ })
+end
+vim.cmd("setl ts=2 sw=2")
diff --git a/ftplugin/javascriptreact.vim b/ftplugin/javascriptreact.vim
deleted file mode 100644
index 11332b5c..00000000
--- a/ftplugin/javascriptreact.vim
+++ /dev/null
@@ -1 +0,0 @@
-setl commentstring={/*%s*/} ts=2 sw=2
diff --git a/ftplugin/json.lua b/ftplugin/json.lua
new file mode 100644
index 00000000..3a565095
--- /dev/null
+++ b/ftplugin/json.lua
@@ -0,0 +1,28 @@
+-- npm install -g vscode-json-languageserver
+require'lspconfig'.jsonls.setup {
+ cmd = {
+ "node", DATA_PATH ..
+ "/lspinstall/json/vscode-json/json-language-features/server/dist/node/jsonServerMain.js",
+ "--stdio"
+ },
+ on_attach = require'lsp'.common_on_attach,
+
+ commands = {
+ Format = {
+ function()
+ vim.lsp.buf.range_formatting({}, {0, 0}, {vim.fn.line("$"), 0})
+ end
+ }
+ }
+}
+
+if O.lang.json.autoformat then
+ require('lv-utils').define_augroups({
+ _json_format = {
+ {
+ 'BufWritePre', '*.json',
+ 'lua vim.lsp.buf.formatting_sync(nil, 1000)'
+ }
+ }
+ })
+end
diff --git a/ftplugin/kotlin.lua b/ftplugin/kotlin.lua
new file mode 100644
index 00000000..fcbb736b
--- /dev/null
+++ b/ftplugin/kotlin.lua
@@ -0,0 +1,36 @@
+--- default config for gradle-projects of the
+--- kotlin-language-server: https://github.com/fwcd/kotlin-language-server
+---
+--- This server requires vim to be aware of the kotlin-filetype.
+--- You could refer for this capability to:
+--- https://github.com/udalov/kotlin-vim (recommended)
+--- Note that there is no LICENSE specified yet.
+
+local util = require 'lspconfig/util'
+
+local bin_name = DATA_PATH .. "/lspinstall/kotlin/server/bin/kotlin-language-server"
+if vim.fn.has('win32') == 1 then
+ bin_name = bin_name..".bat"
+end
+
+local root_files = {
+ 'settings.gradle', -- Gradle (multi-project)
+ 'settings.gradle.kts', -- Gradle (multi-project)
+ 'build.xml', -- Ant
+ 'pom.xml', -- Maven
+}
+
+local fallback_root_files = {
+ 'build.gradle', -- Gradle
+ 'build.gradle.kts', -- Gradle
+}
+
+require'lspconfig'.kotlin_language_server.setup {
+ cmd = {bin_name},
+ on_attach = require'lsp'.common_on_attach,
+ root_dir = function(fname)
+ return util.root_pattern(unpack(root_files))(fname) or
+ util.root_pattern(unpack(fallback_root_files))(fname)
+ end
+}
+
diff --git a/ftplugin/latex.lua b/ftplugin/latex.lua
new file mode 100644
index 00000000..179c143c
--- /dev/null
+++ b/ftplugin/latex.lua
@@ -0,0 +1,4 @@
+require'lspconfig'.texlab.setup{
+ cmd = {DATA_PATH .. "/lspinstall/latex/texlab"},
+ on_attach = require'lsp'.common_on_attach
+}
diff --git a/ftplugin/lua.lua b/ftplugin/lua.lua
new file mode 100644
index 00000000..cfcd9b92
--- /dev/null
+++ b/ftplugin/lua.lua
@@ -0,0 +1,71 @@
+-- https://github.com/sumneko/lua-language-server/wiki/Build-and-Run-(Standalone)
+local sumneko_root_path = DATA_PATH .. "/lspinstall/lua"
+local sumneko_binary = sumneko_root_path .. "/sumneko-lua-language-server"
+
+require'lspconfig'.sumneko_lua.setup {
+ cmd = {sumneko_binary, "-E", sumneko_root_path .. "/main.lua"},
+ on_attach = require'lsp'.common_on_attach,
+ settings = {
+ Lua = {
+ runtime = {
+ -- Tell the language server which version of Lua you're using (most likely LuaJIT in the case of Neovim)
+ version = 'LuaJIT',
+ -- Setup your lua path
+ path = vim.split(package.path, ';')
+ },
+ diagnostics = {
+ -- Get the language server to recognize the `vim` global
+ globals = {'vim'}
+ },
+ workspace = {
+ -- Make the server aware of Neovim runtime files
+ library = {
+ [vim.fn.expand('$VIMRUNTIME/lua')] = true,
+ [vim.fn.expand('$VIMRUNTIME/lua/vim/lsp')] = true
+ },
+ maxPreload = 10000
+ }
+ }
+ }
+}
+if O.lang.lua.autoformat then
+ require('lv-utils').define_augroups({
+ _lua_autoformat = {
+ {
+ 'BufWritePre', '*.lua',
+ 'lua vim.lsp.buf.formatting_sync(nil, 1000)'
+ }
+ }
+ })
+end
+
+local lua_arguments = {}
+
+local luaFormat = {
+ formatCommand = "lua-format -i --no-keep-simple-function-one-line --column-limit=80",
+ formatStdin = true
+}
+
+local lua_fmt = {
+ formatCommand = "luafmt --indent-count 2 --line-width 120 --stdin",
+ formatStdin = true
+}
+
+if O.lang.lua.formatter == 'lua-format' then
+ table.insert(lua_arguments, luaFormat)
+elseif O.lang.lua.formatter == 'lua-fmt' then
+ table.insert(lua_arguments, lua_fmt)
+end
+
+require"lspconfig".efm.setup {
+ -- init_options = {initializationOptions},
+ cmd = {DATA_PATH .. "/lspinstall/efm/efm-langserver"},
+ init_options = {documentFormatting = true, codeAction = false},
+ filetypes = {"lua"},
+ settings = {
+ rootMarkers = {".git/"},
+ languages = {
+ lua = lua_arguments,
+ }
+ }
+}
diff --git a/ftplugin/php.lua b/ftplugin/php.lua
new file mode 100644
index 00000000..abc90092
--- /dev/null
+++ b/ftplugin/php.lua
@@ -0,0 +1,4 @@
+require'lspconfig'.intelephense.setup {
+ cmd = { DATA_PATH .. "/lspinstall/php/node_modules/.bin/intelephense", "--stdio" },
+ on_attach = require'lsp'.common_on_attach
+} \ No newline at end of file
diff --git a/ftplugin/python.lua b/ftplugin/python.lua
new file mode 100644
index 00000000..7ae0d6fd
--- /dev/null
+++ b/ftplugin/python.lua
@@ -0,0 +1,87 @@
+local python_arguments = {}
+
+-- TODO replace with path argument
+local flake8 = {
+ LintCommand = "flake8 --ignore=E501 --stdin-display-name ${INPUT} -",
+ lintStdin = true,
+ lintFormats = {"%f:%l:%c: %m"}
+}
+
+local isort = {formatCommand = "isort --quiet -", formatStdin = true}
+
+local yapf = {formatCommand = "yapf --quiet", formatStdin = true}
+local black = {formatCommand = "black --quiet -", formatStdin = true}
+
+if O.lang.python.linter == 'flake8' then table.insert(python_arguments, flake8) end
+
+if O.lang.python.isort then table.insert(python_arguments, isort) end
+
+if O.lang.python.formatter == 'yapf' then
+ table.insert(python_arguments, yapf)
+elseif O.lang.python.formatter == 'black' then
+ table.insert(python_arguments, black)
+end
+
+require"lspconfig".efm.setup {
+ -- init_options = {initializationOptions},
+ cmd = {DATA_PATH .. "/lspinstall/efm/efm-langserver"},
+ init_options = {documentFormatting = true, codeAction = false},
+ filetypes = {"lua", "python", "javascriptreact", "javascript", "typescript","typescriptreact","sh", "html", "css", "yaml", "markdown", "vue"},
+ settings = {
+ rootMarkers = {".git/", "requirements.txt"},
+ languages = {
+ python = python_arguments,
+ }
+ }
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+-- npm i -g pyright
+require'lspconfig'.pyright.setup {
+ cmd = {
+ DATA_PATH .. "/lspinstall/python/node_modules/.bin/pyright-langserver",
+ "--stdio"
+ },
+ on_attach = require'lsp'.common_on_attach,
+ handlers = {
+ ["textDocument/publishDiagnostics"] = vim.lsp.with(vim.lsp.diagnostic
+ .on_publish_diagnostics,
+ {
+ virtual_text = O.lang.python.diagnostics.virtual_text,
+ signs = O.lang.python.diagnostics.signs,
+ underline = O.lang.python.diagnostics.underline,
+ update_in_insert = true
+ })
+ },
+ settings = {
+ python = {
+ analysis = {
+ typeCheckingMode = O.lang.python.analysis.type_checking,
+ autoSearchPaths = O.lang.python.analysis.auto_search_paths,
+ useLibraryCodeForTypes = O.lang.python.analysis
+ .use_library_code_types
+ }
+ }
+ }
+}
+if O.lang.python.autoformat then
+ require('lv-utils').define_augroups({
+ _python_autoformat = {
+ {
+ 'BufWritePre', '*.py',
+ 'lua vim.lsp.buf.formatting_sync(nil, 1000)'
+ }
+ }
+ })
+end
diff --git a/ftplugin/ruby.lua b/ftplugin/ruby.lua
new file mode 100644
index 00000000..f46a71f8
--- /dev/null
+++ b/ftplugin/ruby.lua
@@ -0,0 +1,24 @@
+-- If you are using rvm, make sure to change below configuration
+require'lspconfig'.solargraph.setup {
+ cmd = {DATA_PATH .. "/lspinstall/ruby/solargraph/solargraph", "--stdio"},
+ on_attach = require'lsp'.common_on_attach,
+ handlers = {
+ ["textDocument/publishDiagnostics"] = vim.lsp.with(
+ vim.lsp.diagnostic.on_publish_diagnostics, {
+ virtual_text = O.lang.ruby.diagnostics.virtual_text,
+ signs = O.lang.ruby.diagnostics.signs,
+ underline = O.lang.ruby.diagnostics.underline,
+ update_in_insert = true
+
+ })
+ },
+ filetypes = O.lang.ruby.filetypes
+}
+
+if O.lang.ruby.autoformat then
+ require('lv-utils').define_augroups({
+ _ruby_format = {
+ {'BufWritePre', '*.rb', 'lua vim.lsp.buf.formatting_sync(nil,1000)'}
+ }
+ })
+end
diff --git a/ftplugin/rust.lua b/ftplugin/rust.lua
new file mode 100644
index 00000000..d210cadb
--- /dev/null
+++ b/ftplugin/rust.lua
@@ -0,0 +1,87 @@
+local opts = {
+ tools = { -- rust-tools options
+ -- automatically set inlay hints (type hints)
+ -- There is an issue due to which the hints are not applied on the first
+ -- opened file. For now, write to the file to trigger a reapplication of
+ -- the hints or just run :RustSetInlayHints.
+ -- default: true
+ autoSetHints = true,
+
+ -- whether to show hover actions inside the hover window
+ -- this overrides the default hover handler
+ -- default: true
+ hover_with_actions = true,
+
+ runnables = {
+ -- whether to use telescope for selection menu or not
+ -- default: true
+ use_telescope = true
+
+ -- rest of the opts are forwarded to telescope
+ },
+
+ inlay_hints = {
+ -- wheter to show parameter hints with the inlay hints or not
+ -- default: true
+ show_parameter_hints = true,
+
+ -- prefix for parameter hints
+ -- default: "<-"
+ parameter_hints_prefix = "<-",
+
+ -- prefix for all the other hints (type, chaining)
+ -- default: "=>"
+ other_hints_prefix = "=>",
+
+ -- whether to align to the lenght of the longest line in the file
+ max_len_align = false,
+
+ -- padding from the left if max_len_align is true
+ max_len_align_padding = 1,
+
+ -- whether to align to the extreme right or not
+ right_align = false,
+
+ -- padding from the right if right_align is true
+ right_align_padding = 7
+ },
+
+ hover_actions = {
+ -- the border that is used for the hover window
+ -- see vim.api.nvim_open_win()
+ border = {
+ {"╭", "FloatBorder"}, {"─", "FloatBorder"},
+ {"╮", "FloatBorder"}, {"│", "FloatBorder"},
+ {"╯", "FloatBorder"}, {"─", "FloatBorder"},
+ {"╰", "FloatBorder"}, {"│", "FloatBorder"}
+ }
+ }
+ },
+
+ -- all the opts to send to nvim-lspconfig
+ -- these override the defaults set by rust-tools.nvim
+ -- see https://github.com/neovim/nvim-lspconfig/blob/master/CONFIG.md#rust_analyzer
+ server = {
+ cmd = {DATA_PATH .. "/lspinstall/rust/rust-analyzer"},
+ on_attach = require'lsp'.common_on_attach
+ } -- rust-analyser options
+}
+
+require('rust-tools').setup(opts)
+
+-- TODO add this later
+vim.api.nvim_exec([[
+ autocmd Filetype rust nnoremap <leader>lm <Cmd>RustExpandMacro<CR>
+ autocmd Filetype rust nnoremap <leader>lH <Cmd>RustToggleInlayHints<CR>
+ autocmd Filetype rust nnoremap <leader>le <Cmd>RustRunnables<CR>
+ autocmd Filetype rust nnoremap <leader>lh <Cmd>RustHoverActions<CR>
+ ]], true)
+
+if O.lang.rust.autoformat then
+ require('lv-utils').define_augroups({
+ _rust_format = {
+ {'BufWritePre', '*.rs', 'lua vim.lsp.buf.formatting_sync(nil,1000)'}
+ }
+ })
+end
+
diff --git a/ftplugin/sh.lua b/ftplugin/sh.lua
new file mode 100644
index 00000000..7d9312f6
--- /dev/null
+++ b/ftplugin/sh.lua
@@ -0,0 +1,33 @@
+-- npm i -g bash-language-server
+require'lspconfig'.bashls.setup {
+ cmd = {DATA_PATH .. "/lspinstall/bash/node_modules/.bin/bash-language-server", "start"},
+ on_attach = require'lsp'.common_on_attach,
+ filetypes = { "sh", "zsh" }
+}
+
+-- sh
+local sh_arguments = {}
+
+local shfmt = {formatCommand = 'shfmt -ci -s -bn', formatStdin = true}
+
+local shellcheck = {
+ LintCommand = 'shellcheck -f gcc -x',
+ lintFormats = {'%f:%l:%c: %trror: %m', '%f:%l:%c: %tarning: %m', '%f:%l:%c: %tote: %m'}
+}
+
+if O.lang.sh.formatter == 'shfmt' then table.insert(sh_arguments, shfmt) end
+
+if O.lang.sh.linter == 'shellcheck' then table.insert(sh_arguments, shellcheck) end
+
+require"lspconfig".efm.setup {
+ -- init_options = {initializationOptions},
+ cmd = {DATA_PATH .. "/lspinstall/efm/efm-langserver"},
+ init_options = {documentFormatting = true, codeAction = false},
+ filetypes = {"sh"},
+ settings = {
+ rootMarkers = {".git/"},
+ languages = {
+ sh = sh_arguments,
+ }
+ }
+}
diff --git a/ftplugin/tf.lua b/ftplugin/tf.lua
new file mode 100644
index 00000000..a2e751a4
--- /dev/null
+++ b/ftplugin/tf.lua
@@ -0,0 +1,5 @@
+require'lspconfig'.terraformls.setup{
+ cmd = {DATA_PATH .. "/lspinstall/terraform/terraform-ls", "serve"},
+ on_attach = require'lsp'.common_on_attach,
+ filetypes = { "tf", "terraform", "hcl" }
+}
diff --git a/ftplugin/typescript.lua b/ftplugin/typescript.lua
new file mode 100644
index 00000000..173f6693
--- /dev/null
+++ b/ftplugin/typescript.lua
@@ -0,0 +1,68 @@
+-- npm install -g typescript typescript-language-server
+-- require'snippets'.use_suggested_mappings()
+-- local capabilities = vim.lsp.protocol.make_client_capabilities()
+-- capabilities.textDocument.completion.completionItem.snippetSupport = true;
+-- local on_attach_common = function(client)
+-- print("LSP Initialized")
+-- require'completion'.on_attach(client)
+-- require'illuminate'.on_attach(client)
+-- end
+require'lspconfig'.tsserver.setup {
+ cmd = {
+ DATA_PATH ..
+ "/lspinstall/typescript/node_modules/.bin/typescript-language-server",
+ "--stdio"
+ },
+ filetypes = {
+ "javascript", "javascriptreact", "javascript.jsx", "typescript",
+ "typescriptreact", "typescript.tsx"
+ },
+ on_attach = require'lsp'.tsserver_on_attach,
+ -- This makes sure tsserver is not used for formatting (I prefer prettier)
+ -- on_attach = require'lsp'.common_on_attach,
+ root_dir = require('lspconfig/util').root_pattern("package.json",
+ "tsconfig.json",
+ "jsconfig.json", ".git"),
+ settings = {documentFormatting = false},
+ handlers = {
+ ["textDocument/publishDiagnostics"] = vim.lsp.with(
+ vim.lsp.diagnostic.on_publish_diagnostics, {
+ virtual_text = O.lang.tsserver.diagnostics.virtual_text,
+ signs = O.lang.tsserver.diagnostics.signs,
+ underline = O.lang.tsserver.diagnostics.underline,
+ update_in_insert = true
+
+ })
+ }
+}
+
+if O.lang.tsserver.autoformat then
+ require('lv-utils').define_augroups({
+ _javascript_autoformat = {
+ {
+
+ 'BufWritePre', '*.js',
+ 'lua vim.lsp.buf.formatting_sync(nil, 1000)'
+ }
+ },
+ _javascriptreact_autoformat = {
+ {
+ 'BufWritePre', '*.jsx',
+ 'lua vim.lsp.buf.formatting_sync(nil, 1000)'
+ }
+ },
+ _typescript_autoformat = {
+ {
+ 'BufWritePre', '*.ts',
+ 'lua vim.lsp.buf.formatting_sync(nil, 1000)'
+ }
+ },
+ _typescriptreact_autoformat = {
+ {
+ 'BufWritePre', '*.tsx',
+ 'lua vim.lsp.buf.formatting_sync(nil, 1000)'
+ }
+ }
+ })
+end
+vim.cmd("setl ts=2 sw=2")
diff --git a/ftplugin/typescriptreact.lua b/ftplugin/typescriptreact.lua
new file mode 100644
index 00000000..40c68c51
--- /dev/null
+++ b/ftplugin/typescriptreact.lua
@@ -0,0 +1,88 @@
+-- npm install -g typescript typescript-language-server
+-- require'snippets'.use_suggested_mappings()
+-- local capabilities = vim.lsp.protocol.make_client_capabilities()
+-- capabilities.textDocument.completion.completionItem.snippetSupport = true;
+-- local on_attach_common = function(client)
+-- print("LSP Initialized")
+-- require'completion'.on_attach(client)
+-- require'illuminate'.on_attach(client)
+-- end
+require'lspconfig'.tsserver.setup {
+ cmd = {
+ DATA_PATH ..
+ "/lspinstall/typescript/node_modules/.bin/typescript-language-server",
+ "--stdio"
+ },
+ filetypes = {
+ "javascript", "javascriptreact", "javascript.jsx", "typescript",
+ "typescriptreact", "typescript.tsx"
+ },
+ on_attach = require'lsp'.tsserver_on_attach,
+ -- This makes sure tsserver is not used for formatting (I prefer prettier)
+ -- on_attach = require'lsp'.common_on_attach,
+ root_dir = require('lspconfig/util').root_pattern("package.json",
+ "tsconfig.json",
+ "jsconfig.json", ".git"),
+ settings = {documentFormatting = false},
+ handlers = {
+ ["textDocument/publishDiagnostics"] = vim.lsp.with(
+ vim.lsp.diagnostic.on_publish_diagnostics, {
+ virtual_text = O.lang.tsserver.diagnostics.virtual_text,
+ signs = O.lang.tsserver.diagnostics.signs,
+ underline = O.lang.tsserver.diagnostics.underline,
+ update_in_insert = true
+
+ })
+ }
+}
+
+if O.lang.tsserver.autoformat then
+ require('lv-utils').define_augroups({
+ _javascript_autoformat = {
+ {
+
+ 'BufWritePre', '*.js',
+ 'lua vim.lsp.buf.formatting_sync(nil, 1000)'
+ }
+ },
+ _javascriptreact_autoformat = {
+ {
+ 'BufWritePre', '*.jsx',
+ 'lua vim.lsp.buf.formatting_sync(nil, 1000)'
+ }
+ },
+ _typescript_autoformat = {
+ {
+ 'BufWritePre', '*.ts',
+ 'lua vim.lsp.buf.formatting_sync(nil, 1000)'
+ }
+ },
+ _typescriptreact_autoformat = {
+ {
+ 'BufWritePre', '*.tsx',
+ 'lua vim.lsp.buf.formatting_sync(nil, 1000)'
+ }
+ }
+ })
+end
+vim.cmd("setl ts=2 sw=2")
+
+local nvim_lsp = require'lspconfig'
+local configs = require'lspconfig/configs'
+local capabilities = vim.lsp.protocol.make_client_capabilities()
+capabilities.textDocument.completion.completionItem.snippetSupport = true
+
+configs.emmet_ls = {
+ default_config = {
+ cmd = {'emmet-ls', '--stdio'};
+ filetypes = {'html', 'css', 'javascript', 'javascriptreact', 'typescript', 'typescriptreact'};
+ root_dir = function()
+ return vim.loop.cwd()
+ end;
+ settings = {};
+ };
+}
+
+nvim_lsp.emmet_ls.setup{
+ -- on_attach = on_attach;
+}
diff --git a/ftplugin/vim.lua b/ftplugin/vim.lua
new file mode 100644
index 00000000..39beb119
--- /dev/null
+++ b/ftplugin/vim.lua
@@ -0,0 +1,5 @@
+-- npm install -g vim-language-server
+require'lspconfig'.vimls.setup {
+ cmd = {DATA_PATH .. "/lspinstall/vim/node_modules/.bin/vim-language-server", "--stdio"},
+ on_attach = require'lsp'.common_on_attach
+}
diff --git a/ftplugin/vue.lua b/ftplugin/vue.lua
new file mode 100644
index 00000000..66fba01e
--- /dev/null
+++ b/ftplugin/vue.lua
@@ -0,0 +1,5 @@
+require('lspconfig').vuels.setup {
+ cmd = {DATA_PATH .. "/lspinstall/vue/node_modules/.bin/vls", "--stdio"},
+ on_attach = require'lsp'.common_on_attach,
+ root_dir = require('lspconfig').util.root_pattern(".git", ".")
+}
diff --git a/ftplugin/yaml.lua b/ftplugin/yaml.lua
new file mode 100644
index 00000000..7b6f9a25
--- /dev/null
+++ b/ftplugin/yaml.lua
@@ -0,0 +1,6 @@
+-- npm install -g yaml-language-server
+require'lspconfig'.yamlls.setup{
+ cmd = {DATA_PATH .. "/lspinstall/yaml/node_modules/.bin/yaml-language-server", "--stdio"},
+ on_attach = require'lsp'.common_on_attach,
+}
+vim.cmd("setl ts=2 sw=2 ts=2 ai et")
diff --git a/ftplugin/yaml.vim b/ftplugin/yaml.vim
deleted file mode 100644
index dcb1b038..00000000
--- a/ftplugin/yaml.vim
+++ /dev/null
@@ -1 +0,0 @@
-setl ts=2 sw=2 ts=2 ai et
diff --git a/ftplugin/zsh.lua b/ftplugin/zsh.lua
new file mode 100644
index 00000000..7e99ebd3
--- /dev/null
+++ b/ftplugin/zsh.lua
@@ -0,0 +1,40 @@
+-- npm i -g bash-language-server
+require'lspconfig'.bashls.setup {
+ cmd = {DATA_PATH .. "/lspinstall/bash/node_modules/.bin/bash-language-server", "start"},
+ on_attach = require'lsp'.common_on_attach,
+ filetypes = { "sh", "zsh" }
+}
+
+-- npm i -g bash-language-server
+require'lspconfig'.bashls.setup {
+ cmd = {DATA_PATH .. "/lspinstall/bash/node_modules/.bin/bash-language-server", "start"},
+ on_attach = require'lsp'.common_on_attach,
+ filetypes = { "sh", "zsh" }
+}
+
+-- sh
+local sh_arguments = {}
+
+local shfmt = {formatCommand = 'shfmt -ci -s -bn', formatStdin = true}
+
+local shellcheck = {
+ LintCommand = 'shellcheck -f gcc -x',
+ lintFormats = {'%f:%l:%c: %trror: %m', '%f:%l:%c: %tarning: %m', '%f:%l:%c: %tote: %m'}
+}
+
+if O.lang.sh.formatter == 'shfmt' then table.insert(sh_arguments, shfmt) end
+
+if O.lang.sh.linter == 'shellcheck' then table.insert(sh_arguments, shellcheck) end
+
+require"lspconfig".efm.setup {
+ -- init_options = {initializationOptions},
+ cmd = {DATA_PATH .. "/lspinstall/efm/efm-langserver"},
+ init_options = {documentFormatting = true, codeAction = false},
+ filetypes = {"zsh"},
+ settings = {
+ rootMarkers = {".git/"},
+ languages = {
+ sh = sh_arguments,
+ }
+ }
+}