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, +}  |