diff options
| author | awy <awy@awy.one> | 2025-10-14 18:27:29 +0300 | 
|---|---|---|
| committer | awy <awy@awy.one> | 2025-10-14 18:27:29 +0300 | 
| commit | de009fd679e10d053fdcc10785f91ad5317449ea (patch) | |
| tree | 60918a488b579588596cf4d509fde298dccbf15d /.config/nvim/lsp/svelte.lua | |
| parent | 9ea6cf81adb5d6abc59843de1db45913210f9320 (diff) | |
| download | hyprdots-de009fd679e10d053fdcc10785f91ad5317449ea.tar.gz | |
nvim revamp
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, +}  |