From 008424add58b640331777493bf8f9984e7614100 Mon Sep 17 00:00:00 2001 From: Evan Reichard Date: Thu, 8 Dec 2022 17:32:32 -0500 Subject: [PATCH] LSP - HTML, CSS, JSON, JS with Prettier --- nvim/config/lua/init.lua | 1 - nvim/config/lua/lsp-config.lua | 74 ++++++++++++++++++++++++++++-- nvim/config/lua/null-ls-config.lua | 27 ----------- nvim/default.nix | 4 +- 4 files changed, 73 insertions(+), 33 deletions(-) delete mode 100644 nvim/config/lua/null-ls-config.lua diff --git a/nvim/config/lua/init.lua b/nvim/config/lua/init.lua index e5dbda8..4273d88 100644 --- a/nvim/config/lua/init.lua +++ b/nvim/config/lua/init.lua @@ -10,7 +10,6 @@ require('lsp-lines-config') require('lualine-config') require('neotree-config') require('noice-config') -require('null-ls-config') require('numb-config') require('silicon-config') require('telescope-config') diff --git a/nvim/config/lua/lsp-config.lua b/nvim/config/lua/lsp-config.lua index 00c3fc8..0b757fd 100644 --- a/nvim/config/lua/lsp-config.lua +++ b/nvim/config/lua/lsp-config.lua @@ -1,3 +1,6 @@ +------------------------------------------------------ +-------------------- Built-in LSP -------------------- +------------------------------------------------------ local nix_vars = require("nix-vars") local nvim_lsp = require('lspconfig') @@ -15,6 +18,13 @@ local on_attach = function(client, bufnr) function() vim.lsp.buf.format {async = true} end, bufopts) end +local on_attach_no_formatting = function(client, bufnr) + -- Disable Formatting (Prettiers Job - null-ls) + client.server_capabilities.documentFormattingProvider = false + client.server_capabilities.documentRangeFormattingProvider = false + on_attach(client, bufnr) +end + -- Define LSP Flags & Capabilities local lsp_flags = {debounce_text_changes = 150} local capabilities = require('cmp_nvim_lsp').default_capabilities() @@ -28,16 +38,74 @@ nvim_lsp.pyright.setup { -- HTML LSP Configuration nvim_lsp.html.setup { - on_attach = on_attach, + on_attach = on_attach_no_formatting, flags = lsp_flags, capabilities = capabilities, - cmd = {nix_vars.htmlserver, "--stdio"} + cmd = {nix_vars.vscodels .. "/bin/vscode-html-language-server", "--stdio"} +} + +-- JSON LSP Configuration +nvim_lsp.jsonls.setup { + on_attach = on_attach_no_formatting, + flags = lsp_flags, + capabilities = capabilities, + cmd = {nix_vars.vscodels .. "/bin/vscode-json-language-server", "--stdio"} +} + +-- CSS LSP Configuration +nvim_lsp.cssls.setup { + on_attach = on_attach_no_formatting, + flags = lsp_flags, + capabilities = capabilities, + cmd = {nix_vars.vscodels .. "/bin/vscode-css-language-server", "--stdio"} } -- Typescript / Javascript LSP Configuration nvim_lsp.tsserver.setup { - on_attach = on_attach, + on_attach = on_attach_no_formatting, flags = lsp_flags, + handlers = { + -- Disable Diagnostics (ESLints Job) + ["textDocument/publishDiagnostics"] = function() end + }, capabilities = capabilities, cmd = {nix_vars.tsserver, "--stdio", "--tsserver-path", nix_vars.tslib} } + +-- Javascript / Typescript LSP Configuration +nvim_lsp.eslint.setup { + on_attach = on_attach_no_formatting, + flags = lsp_flags, + capabilities = capabilities, + cmd = {nix_vars.vscodels .. "/bin/vscode-eslint-language-server", "--stdio"} +} + +------------------------------------------------------ +--------------------- Null-LS LSP -------------------- +------------------------------------------------------ +local null_ls = require("null-ls") + +null_ls.setup({ + sources = { + null_ls.builtins.completion.spell, + null_ls.builtins.formatting.nixpkgs_fmt, + null_ls.builtins.formatting.lua_format, + null_ls.builtins.formatting.prettier, + null_ls.builtins.diagnostics.sqlfluff + .with({extra_args = {"--dialect", "ansi"}}), + null_ls.builtins.formatting.sqlfluff + .with({extra_args = {"--dialect", "ansi"}}) + }, + on_attach = function(client, bufnr) + if client.supports_method("textDocument/formatting") then + vim.api.nvim_clear_autocmds({group = augroup, buffer = bufnr}) + vim.api.nvim_create_autocmd("BufWritePre", { + group = augroup, + buffer = bufnr, + callback = function() + vim.lsp.buf.format({async = true}) + end + }) + end + end +}) diff --git a/nvim/config/lua/null-ls-config.lua b/nvim/config/lua/null-ls-config.lua deleted file mode 100644 index cb0ff70..0000000 --- a/nvim/config/lua/null-ls-config.lua +++ /dev/null @@ -1,27 +0,0 @@ -local null_ls = require("null-ls") - -null_ls.setup({ - sources = { - null_ls.builtins.completion.spell, - null_ls.builtins.formatting.nixpkgs_fmt, - null_ls.builtins.formatting.lua_format, - null_ls.builtins.formatting.prettier.with({ - filetypes = {"json", "yaml", "markdown"} - }), null_ls.builtins.diagnostics.sqlfluff - .with({extra_args = {"--dialect", "ansi"}}), - null_ls.builtins.formatting.sqlfluff - .with({extra_args = {"--dialect", "ansi"}}) - }, - on_attach = function(client, bufnr) - if client.supports_method("textDocument/formatting") then - vim.api.nvim_clear_autocmds({group = augroup, buffer = bufnr}) - vim.api.nvim_create_autocmd("BufWritePre", { - group = augroup, - buffer = bufnr, - callback = function() - vim.lsp.buf.format({async = true}) - end - }) - end - end -}) diff --git a/nvim/default.nix b/nvim/default.nix index b8fbc92..fa9bf13 100644 --- a/nvim/default.nix +++ b/nvim/default.nix @@ -111,7 +111,7 @@ in nodePackages.pyright nodePackages.typescript nodePackages.typescript-language-server - nodePackages.vscode-html-languageserver-bin + nodePackages.vscode-langservers-extracted # Formatters luaformatter @@ -139,9 +139,9 @@ in # Generate Nix Vars "nvim/lua/nix-vars.lua".text = '' local nix_vars = { - htmlserver = "${pkgs.nodePackages.vscode-html-languageserver-bin}/bin/html-languageserver", tsserver = "${pkgs.nodePackages.typescript-language-server}/bin/typescript-language-server", tslib = "${pkgs.nodePackages.typescript}/lib/node_modules/typescript/lib/", + vscodels = "${pkgs.nodePackages.vscode-langservers-extracted}", } return nix_vars '';