diff options
author | awy <awy@awy.one> | 2025-10-20 20:55:26 +0300 |
---|---|---|
committer | awy <awy@awy.one> | 2025-10-20 20:55:26 +0300 |
commit | 662dafc52b2c8a9426bb2197ab9246a8cda318e4 (patch) | |
tree | f9d1f20e3864360bf941fd6bc02848ed77b037a8 /.config/nvim/lsp/svelte.lua | |
parent | 8131d9f2898b991a2d2c7a2ac601ce9e07cc9c9f (diff) | |
download | hyprdots-662dafc52b2c8a9426bb2197ab9246a8cda318e4.tar.gz |
nvqw
Diffstat (limited to '.config/nvim/lsp/svelte.lua')
-rw-r--r-- | .config/nvim/lsp/svelte.lua | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/.config/nvim/lsp/svelte.lua b/.config/nvim/lsp/svelte.lua new file mode 100644 index 0000000..53f3e73 --- /dev/null +++ b/.config/nvim/lsp/svelte.lua @@ -0,0 +1,47 @@ +---@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 = { '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, +} |