---@brief --- --- https://github.com/sveltejs/language-tools/tree/master/packages/language-server --- --- Note: assuming that [ts_ls](#ts_ls) is setup, full JavaScript/TypeScript support (find references, rename, etc of symbols in Svelte files when working in JS/TS files) requires per-project installation and configuration of [typescript-svelte-plugin](https://github.com/sveltejs/language-tools/tree/master/packages/typescript-plugin#usage). --- --- `svelte-language-server` can be installed via `npm`: --- ```sh --- npm install -g svelte-language-server --- ``` ---@type vim.lsp.Config return { cmd = { require("monaqa.lsp").mason_bin("svelteserver"), "--stdio" }, filetypes = { "svelte" }, root_dir = function(bufnr, on_dir) local fname = vim.api.nvim_buf_get_name(bufnr) -- Svelte LSP only supports file:// schema. https://github.com/sveltejs/language-tools/issues/2777 if vim.uv.fs_stat(fname) ~= nil then local root_markers = { "package-lock.json", "yarn.lock", "pnpm-lock.yaml", "bun.lockb", "bun.lock", "deno.lock", } root_markers = vim.fn.has("nvim-0.11.3") == 1 and { root_markers, { ".git" } } or vim.list_extend(root_markers, { ".git" }) -- We fallback to the current working directory if no project root is found local project_root = vim.fs.root(bufnr, root_markers) or vim.fn.getcwd() on_dir(project_root) end end, on_attach = function(client, bufnr) -- Workaround to trigger reloading JS/TS files -- See https://github.com/sveltejs/language-tools/issues/2008 vim.api.nvim_create_autocmd("BufWritePost", { pattern = { "*.js", "*.ts" }, group = vim.api.nvim_create_augroup("lspconfig.svelte", {}), callback = function(ctx) -- internal API to sync changes that have not yet been saved to the file system client:notify("$/onDidChangeTsOrJsFile", { uri = ctx.match }) end, }) vim.api.nvim_buf_create_user_command(bufnr, "LspMigrateToSvelte5", function() client:exec_cmd { title = "Migrate Component to Svelte 5 Syntax", command = "migrate_to_svelte_5", arguments = { vim.uri_from_bufnr(bufnr) }, } end, { desc = "Migrate Component to Svelte 5 Syntax" }) end, }