diff --git a/common/home-manager/nixvim/lsp.nix b/common/home-manager/nixvim/lsp.nix index 7c0766d..6188c69 100644 --- a/common/home-manager/nixvim/lsp.nix +++ b/common/home-manager/nixvim/lsp.nix @@ -19,7 +19,6 @@ jdtls.enable = true; nil_ls.enable = true; pyright.enable = true; - ts_ls.enable = true; rust_analyzer = { enable = true; installCargo = false; @@ -28,14 +27,44 @@ svelte.enable = true; volar = { enable = true; - tslsIntegration = true; - # extraOptions.init_options.vue.hybridMode = false; + extraOptions.on_init.__raw = '' + function(client) + client.handlers['tsserver/request'] = function(_, result, context) + local clients = vim.lsp.get_clients({ bufnr = context.bufnr, name = 'vtsls' }) + if #clients == 0 then + vim.notify('Could not found `vtsls` lsp client, vue_lsp would not work without it.', vim.log.levels.ERROR) + return + end + local ts_client = clients[1] + + local param = unpack(result) + local id, command, payload = unpack(param) + ts_client:exec_cmd({ + command = 'typescript.tsserverRequest', + arguments = { + command, + payload, + }, + }, { bufnr = context.bufnr }, function(_, r) + local response_data = { { id, r.body } } + ---@diagnostic disable-next-line: param-type-mismatch + client:notify('tsserver/response', response_data) + end) + end + end, + ''; + }; + }; + }; + typescript-tools = { + enable = true; + settings = { + filetypes = [ "javascript" "typescript" "vue" ]; + settings = { + single_file_support = false; + tsserver_plugins = [ "@vue/typescript-plugin" ]; }; }; }; - # nvim-jdtls = { - # enable = true; - # data = "~/.cache/jdtls/workspace"; - # }; }; }