summaryrefslogtreecommitdiff
path: root/nvim/lsp/svelte.lua
diff options
context:
space:
mode:
authoranand <anand.panchdhari@gmail.com>2025-12-17 15:57:55 +0530
committeranand <anand.panchdhari@gmail.com>2025-12-17 15:57:55 +0530
commitb7ef29a8886a57aadb787807a7c6cf74c1f0ed3a (patch)
tree366a68240fbc9da6b1d567bd6c46d1350ad814de /nvim/lsp/svelte.lua
Nixos
Diffstat (limited to 'nvim/lsp/svelte.lua')
-rwxr-xr-xnvim/lsp/svelte.lua41
1 files changed, 41 insertions, 0 deletions
diff --git a/nvim/lsp/svelte.lua b/nvim/lsp/svelte.lua
new file mode 100755
index 0000000..f18baf1
--- /dev/null
+++ b/nvim/lsp/svelte.lua
@@ -0,0 +1,41 @@
+---@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
+--- ```
+
+return {
+ cmd = { 'svelteserver', '--stdio' },
+ filetypes = { 'svelte' },
+ root_dir = function(bufnr, on_dir)
+ local root_files = { 'package.json', '.git' }
+ 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
+ on_dir(vim.fs.dirname(vim.fs.find(root_files, { path = fname, upward = true })[1]))
+ 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('svelte_js_ts_file_watch', {}),
+ 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({
+ command = 'migrate_to_svelte_5',
+ arguments = { vim.uri_from_bufnr(bufnr) },
+ })
+ end, { desc = 'Migrate Component to Svelte 5 Syntax' })
+ end,
+}