From 66fd4e21cee0e8b19e6423d9c5de68ec3391f549 Mon Sep 17 00:00:00 2001 From: bivashy Date: Thu, 21 Aug 2025 10:54:13 +0500 Subject: [PATCH] Use vue extra that supports vue-language-server >= 3 --- lazy-lock.json | 11 ++++--- lazyvim.json | 2 +- lua/plugins/vue.lua | 72 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 80 insertions(+), 5 deletions(-) create mode 100644 lua/plugins/vue.lua diff --git a/lazy-lock.json b/lazy-lock.json index db007b3..b524095 100644 --- a/lazy-lock.json +++ b/lazy-lock.json @@ -1,7 +1,7 @@ { - "CopilotChat.nvim": { "branch": "main", "commit": "76cc41653d63cfdb653f584624b4bf5e721f9514" }, + "CopilotChat.nvim": { "branch": "main", "commit": "5f3c57083515ea511deda291ae72434db568ee6f" }, "LazyVim": { "branch": "main", "commit": "25abbf546d564dc484cf903804661ba12de45507" }, - "SchemaStore.nvim": { "branch": "main", "commit": "a28cc71857f11a7370d81f5ba3c1f5bb8383b732" }, + "SchemaStore.nvim": { "branch": "main", "commit": "ae4039eceaeda147a91b6b26e4fb4a2ca16bb503" }, "bufferline.nvim": { "branch": "main", "commit": "655133c3b4c3e5e05ec549b9f8cc2894ac6f51b3" }, "catppuccin": { "branch": "main", "commit": "3aaf3ab60221bca8edb1354e41bd514a22c89de2" }, "cmp-buffer": { "branch": "main", "commit": "b74fab3656eea9de20a9b8116afa3cfc4ec09657" }, @@ -28,7 +28,7 @@ "nvim-cmp": { "branch": "main", "commit": "b5311ab3ed9c846b585c0c15b7559be131ec4be9" }, "nvim-jdtls": { "branch": "master", "commit": "4d77ff02063cf88963d5cf10683ab1fd15d072de" }, "nvim-lint": { "branch": "master", "commit": "7ef127aaede2a4d5ad8df8321e2eb4e567f29594" }, - "nvim-lspconfig": { "branch": "master", "commit": "45ff1914044de7dbd4cd85053dc09f47312a2f4d" }, + "nvim-lspconfig": { "branch": "master", "commit": "4da7247b2b348b4f6cade30a7a7fcb299879d275" }, "nvim-snippets": { "branch": "main", "commit": "56b4052f71220144689caaa2e5b66222ba5661eb" }, "nvim-treesitter": { "branch": "master", "commit": "42fc28ba918343ebfd5565147a42a26580579482" }, "nvim-treesitter-context": { "branch": "master", "commit": "dca8726fea2c14e1ce6adbaa76a04816fbfaff61" }, @@ -36,12 +36,15 @@ "nvim-ts-autotag": { "branch": "main", "commit": "a1d526af391f6aebb25a8795cbc05351ed3620b5" }, "persistence.nvim": { "branch": "main", "commit": "166a79a55bfa7a4db3e26fc031b4d92af71d0b51" }, "plenary.nvim": { "branch": "master", "commit": "b9fd5226c2f76c951fc8ed5923d85e4de065e509" }, - "render-markdown.nvim": { "branch": "main", "commit": "3da7bb459f6cff03980dd1e106c46f3e62ff4d9f" }, + "render-markdown.nvim": { "branch": "main", "commit": "7b37aaba005df5744fc7a6bd4225983576b2a950" }, "snacks.nvim": { "branch": "main", "commit": "bc0630e43be5699bb94dadc302c0d21615421d93" }, "tailwindcss-colorizer-cmp.nvim": { "branch": "main", "commit": "3d3cd95e4a4135c250faf83dd5ed61b8e5502b86" }, "todo-comments.nvim": { "branch": "main", "commit": "304a8d204ee787d2544d8bc23cd38d2f929e7cc5" }, "tokyonight.nvim": { "branch": "main", "commit": "057ef5d260c1931f1dffd0f052c685dcd14100a3" }, "trouble.nvim": { "branch": "main", "commit": "85bedb7eb7fa331a2ccbecb9202d8abba64d37b3" }, "ts-comments.nvim": { "branch": "main", "commit": "1bd9d0ba1d8b336c3db50692ffd0955fe1bb9f0c" }, + "vim-dadbod": { "branch": "master", "commit": "e95afed23712f969f83b4857a24cf9d59114c2e6" }, + "vim-dadbod-completion": { "branch": "master", "commit": "a8dac0b3cf6132c80dc9b18bef36d4cf7a9e1fe6" }, + "vim-dadbod-ui": { "branch": "master", "commit": "2900a1617b3df1a48683d872eadbe1101146a49a" }, "which-key.nvim": { "branch": "main", "commit": "370ec46f710e058c9c1646273e6b225acf47cbed" } } diff --git a/lazyvim.json b/lazyvim.json index 6709fbb..93b27ab 100644 --- a/lazyvim.json +++ b/lazyvim.json @@ -9,9 +9,9 @@ "lazyvim.plugins.extras.lang.java", "lazyvim.plugins.extras.lang.json", "lazyvim.plugins.extras.lang.markdown", + "lazyvim.plugins.extras.lang.sql", "lazyvim.plugins.extras.lang.tailwind", "lazyvim.plugins.extras.lang.typescript", - "lazyvim.plugins.extras.lang.vue", "lazyvim.plugins.extras.lang.yaml", "lazyvim.plugins.extras.ui.treesitter-context" ], diff --git a/lua/plugins/vue.lua b/lua/plugins/vue.lua new file mode 100644 index 0000000..78f4c26 --- /dev/null +++ b/lua/plugins/vue.lua @@ -0,0 +1,72 @@ +return { + recommended = function() + return LazyVim.extras.wants({ + ft = "vue", + root = { "vue.config.js", "nuxt.config.ts" }, + }) + end, + + -- depends on the typescript extra + { import = "lazyvim.plugins.extras.lang.typescript" }, + + { + "nvim-treesitter/nvim-treesitter", + opts = { ensure_installed = { "vue", "css" } }, + }, + + -- Configure vtsls (the TypeScript plugin host) with @vue/typescript-plugin + { + "neovim/nvim-lspconfig", + opts = function(_, opts) + opts.servers.vtsls = opts.servers.vtsls or {} + opts.servers.vtsls.filetypes = opts.servers.vtsls.filetypes or {} + table.insert(opts.servers.vtsls.filetypes, "vue") + LazyVim.extend(opts.servers.vtsls, "settings.vtsls.tsserver.globalPlugins", { + { + name = "@vue/typescript-plugin", + location = LazyVim.get_pkg_path("vue-language-server", "/node_modules/@vue/language-server"), + languages = { "vue" }, + configNamespace = "typescript", + enableForWorkspaceTypeScriptVersions = true, + }, + }) + end, + }, + + -- Hook vue_ls to forward requests to vtsls + { + "neovim/nvim-lspconfig", + opts = { + servers = { + volar = { -- when LazyVim switches to nvim-lspconfig ≥ v2.2.0 rename this to `vue_ls` + on_init = function(client) + client.handlers["tsserver/request"] = function(_, result, context) + -- find the vtsls client + local clients = vim.lsp.get_clients({ bufnr = context.bufnr, name = "vtsls" }) + if #clients == 0 then + vim.notify( + "Could not find `vtsls` client, Vue LSP features will be disabled", + vim.log.levels.ERROR + ) + return + end + local ts_client = clients[1] + -- unpack the forwarded request + local params = unpack(result) + local id, command, payload = unpack(params) + -- forward it + ts_client:exec_cmd({ + title = "vue_request_forward", + command = "typescript.tsserverRequest", + arguments = { command, payload }, + }, { bufnr = context.bufnr }, function(_, resp) + -- send the tsserver/response back to Vue LSP + client.notify("tsserver/response", { { id, resp.body } }) + end) + end + end, + }, + }, + }, + }, +}