diff options
author | Gustaf Rydholm <gustaf.rydholm@gmail.com> | 2021-07-22 00:08:36 +0200 |
---|---|---|
committer | Gustaf Rydholm <gustaf.rydholm@gmail.com> | 2021-07-22 00:08:36 +0200 |
commit | b51f1ae28924a752258e7607fbc3210f9b18eaac (patch) | |
tree | 8c8c095528990b3f6eb499dbcca15e9720e636d1 /.config/nvim/lua/lsp/ts-fmt-lint.lua | |
parent | da936b0ed9ac4c171d3c7908e41af1875a82b08b (diff) |
Updates based on Chris's lunarvim
Diffstat (limited to '.config/nvim/lua/lsp/ts-fmt-lint.lua')
-rw-r--r-- | .config/nvim/lua/lsp/ts-fmt-lint.lua | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/.config/nvim/lua/lsp/ts-fmt-lint.lua b/.config/nvim/lua/lsp/ts-fmt-lint.lua new file mode 100644 index 0000000..7cebfd8 --- /dev/null +++ b/.config/nvim/lua/lsp/ts-fmt-lint.lua @@ -0,0 +1,72 @@ +-- Example configuations here: https://github.com/mattn/efm-langserver +local M = {} + +M.setup = function() + vim.cmd "let proj = FindRootDirectory()" + local root_dir = vim.api.nvim_get_var "proj" + + local get_linter_instance = function() + -- prioritize local instance over global + local local_instance = root_dir .. "/node_modules/.bin/" .. O.lang.tsserver.linter + if vim.fn.executable(local_instance) == 1 then + return local_instance + end + return O.lang.tsserver.linter + end + + local tsserver_args = {} + local formattingSupported = false + + if O.lang.tsserver.linter == "eslint" or O.lang.tsserver.linter == "eslint_d" then + local eslint = { + lintCommand = get_linter_instance() .. " -f visualstudio --stdin --stdin-filename ${INPUT}", + lintStdin = true, + lintFormats = { + "%f(%l,%c): %tarning %m", + "%f(%l,%c): %trror %m", + }, + lintSource = O.lang.tsserver.linter, + lintIgnoreExitCode = true, + } + table.insert(tsserver_args, eslint) + -- Only eslint_d supports --fix-to-stdout + if string.find(get_linter_instance(), "eslint_d") then + formattingSupported = true + local eslint_fix = { + formatCommand = get_linter_instance() .. " --fix-to-stdout --stdin --stdin-filename ${INPUT}", + formatStdin = true, + } + table.insert(tsserver_args, eslint_fix) + end + end + + require("lspconfig").efm.setup { + -- init_options = {initializationOptions}, + cmd = { DATA_PATH .. "/lspinstall/efm/efm-langserver" }, + init_options = { documentFormatting = formattingSupported, codeAction = false }, + root_dir = require("lspconfig").util.root_pattern(".git/", "package.json"), + filetypes = { + "vue", + "javascript", + "javascriptreact", + "typescript", + "typescriptreact", + "javascript.jsx", + "typescript.tsx", + }, + settings = { + rootMarkers = { ".git/", "package.json" }, + languages = { + vue = tsserver_args, + javascript = tsserver_args, + javascriptreact = tsserver_args, + ["javascript.jsx"] = tsserver_args, + typescript = tsserver_args, + ["typescript.tsx"] = tsserver_args, + typescriptreact = tsserver_args, + }, + }, + } +end + +return M |