summaryrefslogtreecommitdiff
path: root/.config/nvim/lua/lsp/ts-fmt-lint.lua
diff options
context:
space:
mode:
Diffstat (limited to '.config/nvim/lua/lsp/ts-fmt-lint.lua')
-rw-r--r--.config/nvim/lua/lsp/ts-fmt-lint.lua72
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