diff --git a/modules/plugins/languages/ts.nix b/modules/plugins/languages/ts.nix index 6064da98..3603758f 100644 --- a/modules/plugins/languages/ts.nix +++ b/modules/plugins/languages/ts.nix @@ -52,6 +52,61 @@ ''; }; + # vtsls language server, including Vue support + # https://github.com/yioneko/vtsls + # https://github.com/vuejs/language-tools/wiki/Neovim + vtsls = { + package = pkgs.vtsls; + lspConfig = + # lua + '' + local vue_language_server_path = '${pkgs.vue-language-server + "/lib/node_modules/@vue/language-server"}' + local vue_plugin = { + name = '@vue/typescript-plugin', + location = vue_language_server_path, + languages = { 'vue' }, + configNamespace = 'typescript', + } + + --- lsconfig method doesn't work in nvf, it says + --- it cannot find vue_ls or vtsls config.md + --- Using it this way means they're always enabled configs + vim.lsp.config("vtsls", { + capabilities = capabilities, + on_attach = function(client, bufnr) + attach_keymaps(client, bufnr); + client.server_capabilities.documentFormattingProvider = false; + end, + filetypes = { 'typescript', 'javascript', 'javascriptreact', 'typescriptreact', 'vue' }, + settings = { + vtsls = { + tsserver = { + globalPlugins = { + vue_plugin, + } + } + } + }, + cmd = ${ + if isList cfg.lsp.package + then expToLua cfg.lsp.package + else ''{"${cfg.lsp.package}/bin/vtsls", "--stdio"}'' + }, + }) + + vim.lsp.config('vue_ls', { + capabilities = capabilities, + on_attach = function(client, bufnr) + attach_keymaps(client, bufnr); + client.server_capabilities.documentFormattingProvider = false; + end, + cmd = {"${getExe pkgs.vue-language-server}", "--stdio"} + }) + + vim.lsp.enable({'vtsls', 'vue_ls'}) + ''; + }; + # Here for backwards compatibility. Still consider tsserver a valid # configuration in the enum, but assert if it's set to *properly* # redirect the user to the correct server. @@ -201,6 +256,8 @@ in { formatters_by_ft.typescript = [cfg.format.type]; # .tsx files formatters_by_ft.typescriptreact = [cfg.format.type]; + # .vue files + formatters_by_ft.vue = [cfg.format.type]; formatters.${cfg.format.type} = { command = getExe cfg.format.package; }; diff --git a/npins/sources.json b/npins/sources.json index 010dd3ce..bf967772 100644 --- a/npins/sources.json +++ b/npins/sources.json @@ -1873,9 +1873,9 @@ }, "branch": "master", "submodules": false, - "revision": "4d3b3bb8815fbe37bcaf3dbdb12a22382bc11ebe", - "url": "https://github.com/neovim/nvim-lspconfig/archive/4d3b3bb8815fbe37bcaf3dbdb12a22382bc11ebe.tar.gz", - "hash": "1lssglccyxlzkypklr4cwz20zik0qwnv514hp06722vcrxs32pzw" + "revision": "3db16ceeea947517f0dc1404c24dcb5ab0c91d26", + "url": "https://github.com/neovim/nvim-lspconfig/archive/3db16ceeea947517f0dc1404c24dcb5ab0c91d26.tar.gz", + "hash": "0gam1rxqkxksayblhj1i7jkh4sqjp6lpvyb1psmrhkryj6967ir2" }, "nvim-metals": { "type": "Git",