summaryrefslogtreecommitdiff
path: root/.config/nvim/lsp/ts_ls.lua
diff options
context:
space:
mode:
authorKyren223 <Kyren223@proton.me>2025-04-27 14:12:18 +0300
committerKyren223 <Kyren223@proton.me>2025-04-27 14:12:18 +0300
commit21107f040b1579c1139ef0ca2ce993603d24826f (patch)
treeec72798215c80179689b9a92d1f147308771244d /.config/nvim/lsp/ts_ls.lua
parent49be66e67afbbe27b4d93ec1ff39bc6c1d97e3ef (diff)
Massive nvim refactor, migrated from nvim-lspconfig to NVIM 0.11 lsp/*
also migrated most LSP clients to nix rather than mason
Diffstat (limited to '.config/nvim/lsp/ts_ls.lua')
-rw-r--r--.config/nvim/lsp/ts_ls.lua47
1 files changed, 47 insertions, 0 deletions
diff --git a/.config/nvim/lsp/ts_ls.lua b/.config/nvim/lsp/ts_ls.lua
new file mode 100644
index 0000000..df0ea49
--- /dev/null
+++ b/.config/nvim/lsp/ts_ls.lua
@@ -0,0 +1,47 @@
+-- https://github.com/typescript-language-server/typescript-language-server
+
+--- Use the `:LspTypescriptSourceAction` command to see "whole file" ("source") code-actions such as:
+--- - organize imports
+--- - remove unused code
+
+return {
+ init_options = { hostInfo = 'neovim' },
+ cmd = { 'typescript-language-server', '--stdio' },
+ filetypes = {
+ 'javascript',
+ 'javascriptreact',
+ 'javascript.jsx',
+ 'typescript',
+ 'typescriptreact',
+ 'typescript.tsx',
+ },
+ root_markers = { 'tsconfig.json', 'jsconfig.json', 'package.json', '.git' },
+ handlers = {
+ -- handle rename request for certain code actions like extracting functions / types
+ ['_typescript.rename'] = function(_, result, ctx)
+ local client = assert(vim.lsp.get_client_by_id(ctx.client_id))
+ vim.lsp.util.show_document({
+ uri = result.textDocument.uri,
+ range = {
+ start = result.position,
+ ['end'] = result.position,
+ },
+ }, client.offset_encoding)
+ vim.lsp.buf.rename()
+ return vim.NIL
+ end,
+ },
+ on_attach = function(client)
+ -- ts_ls provides `source.*` code actions that apply to the whole file. These only appear in
+ -- `vim.lsp.buf.code_action()` if specified in `context.only`.
+ vim.api.nvim_buf_create_user_command(0, 'LspTypescriptSourceAction', function()
+ local source_actions = vim.tbl_filter(function(action)
+ return vim.startswith(action, 'source.')
+ end, client.server_capabilities.codeActionProvider.codeActionKinds)
+
+ vim.lsp.buf.code_action({
+ context = { only = source_actions },
+ })
+ end, {})
+ end,
+}