9 コミット 0363026ad8 ... bfa10413bf

作者 SHA1 メッセージ 日付
  Thomas Dy bfa10413bf nixpkgs/neovim: make ts_ls respect indent settings 1 ヶ月 前
  Thomas Dy 8da5b0356b nixpkgs/neovim: fix deprecated range_code_action 1 ヶ月 前
  Thomas Dy 772832d97e nixpkgs/neovim: update node-lsp 1 ヶ月 前
  Thomas Dy 775a9f3210 nixpkgs/neovim: update diagnostic mappings 1 ヶ月 前
  Thomas Dy c5e8939955 nixpkgs/neovim: remove typescript.nvim 1 ヶ月 前
  Thomas Dy 9107d3319b nixpkgs/neovim: fix missed rename tsserver -> ts_ls 1 ヶ月 前
  Thomas Dy 7272aa38c5 nixpkgs/neovim: switch to blink.cmp 1 ヶ月 前
  Thomas Dy 232f27e9f8 nixpkgs/neovim: update LSP config for 0.11.0 1 ヶ月 前
  Thomas Dy 0516a40e07 nixpkgs/neovim: update flake.lock and packages 1 ヶ月 前

+ 95 - 3
.config/nixpkgs/neovim/flake.lock

@@ -1,5 +1,67 @@
 {
   "nodes": {
+    "blink-cmp": {
+      "inputs": {
+        "fenix": "fenix",
+        "flake-parts": "flake-parts",
+        "nixpkgs": [
+          "nixpkgs"
+        ]
+      },
+      "locked": {
+        "lastModified": 1745118754,
+        "narHash": "sha256-a8OWYMmcTpjc3ir2RVQ1LWWXbu75RpmaXc/js9rno3Q=",
+        "owner": "Saghen",
+        "repo": "blink.cmp",
+        "rev": "3ce61ae041927082f962791f59e3aadc774b206c",
+        "type": "github"
+      },
+      "original": {
+        "owner": "Saghen",
+        "repo": "blink.cmp",
+        "type": "github"
+      }
+    },
+    "fenix": {
+      "inputs": {
+        "nixpkgs": [
+          "blink-cmp",
+          "nixpkgs"
+        ],
+        "rust-analyzer-src": "rust-analyzer-src"
+      },
+      "locked": {
+        "lastModified": 1734676450,
+        "narHash": "sha256-iwcxhTVe4h5TqW0HsNiOQP27eMBmbBshF+q2UjEy5aU=",
+        "owner": "nix-community",
+        "repo": "fenix",
+        "rev": "46e19fa0eb3260b2c3ee5b2cf89e73343c1296ab",
+        "type": "github"
+      },
+      "original": {
+        "owner": "nix-community",
+        "repo": "fenix",
+        "type": "github"
+      }
+    },
+    "flake-parts": {
+      "inputs": {
+        "nixpkgs-lib": "nixpkgs-lib"
+      },
+      "locked": {
+        "lastModified": 1733312601,
+        "narHash": "sha256-4pDvzqnegAfRkPwO3wmwBhVi/Sye1mzps0zHWYnP88c=",
+        "owner": "hercules-ci",
+        "repo": "flake-parts",
+        "rev": "205b12d8b7cd4802fbcb8e8ef6a0f1408781a4f9",
+        "type": "github"
+      },
+      "original": {
+        "owner": "hercules-ci",
+        "repo": "flake-parts",
+        "type": "github"
+      }
+    },
     "flake-utils": {
       "inputs": {
         "systems": "systems"
@@ -20,11 +82,11 @@
     },
     "nixpkgs": {
       "locked": {
-        "lastModified": 1740547748,
-        "narHash": "sha256-Ly2fBL1LscV+KyCqPRufUBuiw+zmWrlJzpWOWbahplg=",
+        "lastModified": 1744868846,
+        "narHash": "sha256-5RJTdUHDmj12Qsv7XOhuospjAjATNiTMElplWnJE9Hs=",
         "owner": "NixOS",
         "repo": "nixpkgs",
-        "rev": "3a05eebede89661660945da1f151959900903b6a",
+        "rev": "ebe4301cbd8f81c4f8d3244b3632338bbeb6d49c",
         "type": "github"
       },
       "original": {
@@ -34,12 +96,42 @@
         "type": "github"
       }
     },
+    "nixpkgs-lib": {
+      "locked": {
+        "lastModified": 1733096140,
+        "narHash": "sha256-1qRH7uAUsyQI7R1Uwl4T+XvdNv778H0Nb5njNrqvylY=",
+        "type": "tarball",
+        "url": "https://github.com/NixOS/nixpkgs/archive/5487e69da40cbd611ab2cadee0b4637225f7cfae.tar.gz"
+      },
+      "original": {
+        "type": "tarball",
+        "url": "https://github.com/NixOS/nixpkgs/archive/5487e69da40cbd611ab2cadee0b4637225f7cfae.tar.gz"
+      }
+    },
     "root": {
       "inputs": {
+        "blink-cmp": "blink-cmp",
         "flake-utils": "flake-utils",
         "nixpkgs": "nixpkgs"
       }
     },
+    "rust-analyzer-src": {
+      "flake": false,
+      "locked": {
+        "lastModified": 1734622712,
+        "narHash": "sha256-2Oc2LbFypF1EG3zTVIVcuT5XFJ7R3oAwu2tS8B0qQ0I=",
+        "owner": "rust-lang",
+        "repo": "rust-analyzer",
+        "rev": "fe027d79d22f2a7645da4143f5cc0f5f56239b97",
+        "type": "github"
+      },
+      "original": {
+        "owner": "rust-lang",
+        "ref": "nightly",
+        "repo": "rust-analyzer",
+        "type": "github"
+      }
+    },
     "systems": {
       "locked": {
         "lastModified": 1681028828,

+ 6 - 1
.config/nixpkgs/neovim/flake.nix

@@ -4,15 +4,20 @@
   inputs = {
     nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
     flake-utils.url = "github:numtide/flake-utils";
+    blink-cmp = {
+      url = "github:Saghen/blink.cmp";
+      inputs.nixpkgs.follows = "nixpkgs";
+    };
   };
 
-  outputs = { self, nixpkgs, flake-utils }:
+  outputs = { self, nixpkgs, flake-utils, blink-cmp }:
     flake-utils.lib.eachDefaultSystem (system:
       let
         pkgs = import nixpkgs {
           inherit system;
           overlays = [(final: prev: {
             node-lsp = final.callPackage ./node-lsp {};
+            blink-cmp = blink-cmp.packages.${system}.blink-cmp;
           })];
         };
       in

+ 107 - 65
.config/nixpkgs/neovim/lsp.lua

@@ -3,107 +3,149 @@ vim.diagnostic.config({
   virtual_text = { severity = { min = vim.diagnostic.severity.WARN } },
 })
 
-local capabilities = require('cmp_nvim_lsp').default_capabilities()
-
-local nvim_lsp = require('lspconfig')
-
-nvim_lsp.bashls.setup({
-  capabilities = capabilities,
-});
-
-nvim_lsp.eslint.setup({
-  capabilities = capabilities,
-});
+vim.lsp.enable("bashls");
+vim.lsp.enable("eslint");
 
 if vim.fn.executable("dprint") == 1 then
   local version = vim.version.parse(vim.fn.system("dprint --version"))
   if vim.version.cmp(version, {0,45,0}) >= 0 then
-    nvim_lsp.dprint.setup({})
+    vim.lsp.enable("dprint")
   end
 end
 
 if vim.fn.executable("deno") == 1 then
-  nvim_lsp.denols.setup({
-    capabilities = capabilities,
-  });
+  vim.lsp.enable("deno");
 else
-  require('typescript').setup({
-    server = {
-      init_options = {
-        completionDisableFilterText = true,
-        preferences = {
-          importModuleSpecifierPreference = 'non-relative',
-          -- this prevents renames from aliasing when destructuring
-          providePrefixAndSuffixTextForRename = false,
-        },
+  local function make_settings()
+    -- we disable formatting but these are still used when performing some code
+    -- actions
+    local format = {
+      indentSize = vim.bo.shiftwidth,
+      convertTabsToSpaces = vim.o.expandtab,
+    }
+    return {
+      javascript = { format = format },
+      typescript = { format = format },
+    }
+  end
+
+  vim.lsp.config("ts_ls", {
+    init_options = {
+      completionDisableFilterText = true,
+      preferences = {
+        importModuleSpecifierPreference = 'non-relative',
+        -- this prevents renames from aliasing when destructuring
+        providePrefixAndSuffixTextForRename = false,
       },
-      capabilities = capabilities,
-      handlers = {
-        ['$/typescriptVersion'] = function(err, result, ctx, config)
-          vim.notify(string.format('Typescript %s', result.version))
+    },
+    settings = make_settings(),
+    handlers = {
+      ['$/typescriptVersion'] = function(err, result, ctx, config)
+        vim.notify(string.format('Typescript %s', result.version))
+      end
+    },
+    flags = {
+      debounce_text_changes = 150,
+    },
+    on_init = function(client)
+      -- mark tsserver as not having formatting available as we rely on
+      -- eslint and dprint for that
+      client.server_capabilities.documentFormattingProvider = false
+      client.server_capabilities.documentRangeFormattingProvider = false
+
+      -- we only really know our settings once we've opened a file so report
+      -- the new formatting settings
+      client:notify(vim.lsp.protocol.Methods.workspace_didChangeConfiguration, {
+        settings = make_settings(),
+      })
+    end,
+    on_attach = function(client)
+      -- add custom commands, we follow upstream's Lsp* prefix convention
+
+      -- setup custom source actions, unlike code actions these apply to the
+      -- whole file rather than a particular line.
+      local function source_action(usercmd_name, command_name)
+        vim.api.nvim_buf_create_user_command(0, usercmd_name, function()
+          vim.lsp.buf.code_action({
+            context = { only = { command_name } },
+            apply = true,
+          })
+        end, {})
+      end
+
+      source_action("LspAddMissingImports", "source.addMissingImports.ts")
+      source_action("LspOrganizeImports", "source.organizeImports.ts")
+      source_action("LspRemoveUnusedImports", "source.removeUnusedImports.ts")
+
+      -- rename file with import renaming, this does no error checking
+      vim.api.nvim_buf_create_user_command(0, "LspRenameFile", function()
+        local source = vim.api.nvim_buf_get_name(0)
+
+        local function do_rename(target)
+          if target == nil then
+            return
+          end
+
+          -- rename the buffer
+          vim.lsp.util.rename(source, target)
+
+          -- ask LSP to rename imports
+          client:exec_cmd({
+            command = "_typescript.applyRenameFile",
+            arguments = {
+              {
+                sourceUri = vim.uri_from_fname(source),
+                targetUri = vim.uri_from_fname(target),
+              }
+            }
+          })
         end
-      },
-      flags = {
-        debounce_text_changes = 150,
-      },
-      on_init = function(client)
-        -- mark tsserver as not having formatting available as we rely on
-        -- eslint and dprint for that
-        client.server_capabilities.documentFormattingProvider = false
-        client.server_capabilities.documentRangeFormattingProvider = false
-      end,
-    }
+
+        vim.ui.input({
+          prompt = "New Filename: ",
+          completion = "file",
+          default = source,
+        }, do_rename)
+      end, {})
+    end,
   })
+  vim.lsp.enable("ts_ls")
 end
 
 if vim.fn.executable("gopls") == 1 then
-  nvim_lsp.gopls.setup({
-    capabilities = capabilities,
-  });
+  vim.lsp.enable("gopls")
 end
 
 if vim.fn.executable("ruby-lsp") == 1 then
-  nvim_lsp.ruby_lsp.setup({
-    capabilities = capabilities,
+  vim.lsp.config("ruby_lsp", {
     init_options = {
       enabledFeatures = {
         formatting = false,
       },
     }
   })
+  vim.lsp.enable("ruby_lsp")
 end
 
 if vim.fn.executable("nil") == 1 then
-  nvim_lsp.nil_ls.setup({
-    capabilities = capabilities,
-  });
+  vim.lsp.enable("nil_ls")
 end
 
 if vim.fn.executable("jdtls") == 1 then
-  nvim_lsp.jdtls.setup({
-    capabilities = capabilities,
+  vim.lsp.config("jdtls", {
     handlers = {
       ["$/progress"] = function()
         -- this is quite noisy so just disable it
       end
     },
-  });
+  })
+  vim.lsp.enable("jdtls")
 end
 
 -- custom LSP servers
-local configs = require('lspconfig.configs')
-
-if not configs.elvish then
-  configs.elvish = {
-    default_config = {
-      cmd = {'elvish', '--lsp'},
-      filetypes = {'elvish'},
-      root_dir = nvim_lsp.util.root_pattern('*.elv'),
-      settings = {},
-    },
-  }
-end
-
-nvim_lsp.elvish.setup({
-  capabilities = capabilities,
+vim.lsp.config("elvish", {
+  cmd = {'elvish', '--lsp'},
+  filetypes = {'elvish'},
+  settings = {},
 })
+vim.lsp.enable("elvish")

+ 12 - 9
.config/nixpkgs/neovim/mappings.lua

@@ -12,6 +12,7 @@ vim.keymap.set({'n', 'v'}, 'k', 'gk', opts)
 
 -- leave insert mode with <ESC><ESC>
 vim.keymap.set('t', '<ESC><ESC>', '<C-\\><C-N>', opts)
+vim.keymap.set('t', '<C-[><C-[>', '<C-\\><C-N>', opts)
 
 -- select pasted text
 vim.keymap.set('n', 'gp', '`[v`]', opts)
@@ -31,6 +32,7 @@ vim.keymap.set('n', ']f', '<C-I>', opts)
 -- quickfix navigation
 vim.keymap.set('n', '[q', '<cmd>cprevious<CR>', opts)
 vim.keymap.set('n', ']q', '<cmd>cnext<CR>', opts)
+vim.keymap.set('n', '<space>qc', '<cmd>cclose<CR>', opts)
 
 -- conflicts navigation
 vim.keymap.set('n', '[x', '?^[<lt>=>]\\{7}<CR>', opts)
@@ -73,10 +75,14 @@ vim.keymap.set('n', '<Leader>s', '<cmd>TSJSplit<CR>', opts)
 vim.keymap.set('n', '<Leader>j', '<cmd>TSJJoin<CR>', opts)
 
 -- diagnostics
-vim.keymap.set('n', '<space>e', '<cmd>lua vim.diagnostic.open_float()<CR>', opts)
-vim.keymap.set('n', '[d', '<cmd>lua vim.diagnostic.goto_prev()<CR>', opts)
-vim.keymap.set('n', ']d', '<cmd>lua vim.diagnostic.goto_next()<CR>', opts)
-vim.keymap.set('n', '<space>q', '<cmd>lua vim.diagnostic.setqflist({ severity = { min = vim.diagnostic.severity.WARN } })<CR>', opts)
+vim.keymap.set('n', '<space>e', function() vim.diagnostic.open_float() end, opts)
+vim.keymap.set('n', '[d', function() vim.diagnostic.jump({ count = -1, float = true, severity = vim.diagnostic.severity.ERROR }) end, opts)
+vim.keymap.set('n', ']d', function() vim.diagnostic.jump({ count = 1, float = true, severity = vim.diagnostic.severity.ERROR }) end, opts)
+vim.keymap.set('n', '[D', function() vim.diagnostic.jump({ count = -1, float = true }) end, opts)
+vim.keymap.set('n', ']D', function() vim.diagnostic.jump({ count = 1, float = true }) end, opts)
+vim.keymap.set('n', '<space>qe', function() vim.diagnostic.setqflist({ severity = vim.diagnostic.severity.ERROR }) end, opts)
+vim.keymap.set('n', '<space>qw', function() vim.diagnostic.setqflist({ severity = { min = vim.diagnostic.severity.WARN } }) end, opts)
+vim.keymap.set('n', '<space>qd', function() vim.diagnostic.setqflist({}) end, opts)
 
 -- LSP-specific
 vim.api.nvim_create_autocmd('LspAttach', {
@@ -98,16 +104,13 @@ vim.api.nvim_create_autocmd('LspAttach', {
     vim.keymap.set({'n', 'i'}, '<C-k>', '<cmd>lua vim.lsp.buf.signature_help()<CR>', opts)
     vim.keymap.set('n', '<space>D', '<cmd>Telescope lsp_type_definitions<CR>', opts)
     vim.keymap.set('n', '<space>rn', '<cmd>lua vim.lsp.buf.rename()<CR>', opts)
-    vim.keymap.set('n', '<space>ca', '<cmd>lua vim.lsp.buf.code_action()<CR>', opts)
-    vim.keymap.set('v', '<space>ca', '<cmd>lua vim.lsp.buf.range_code_action()<CR>', opts)
+    vim.keymap.set({'n', 'v'}, '<space>ca', function() vim.lsp.buf.code_action() end, opts)
     vim.keymap.set('n', 'gr', '<cmd>Telescope lsp_references<CR>', opts)
     vim.keymap.set('n', '<Leader>fs', '<cmd>Telescope lsp_document_symbols<CR>', opts)
 
-    if client.name == 'tsserver' then
+    if client.name == 'ts_ls' then
       -- exclude import statements from reference search (may have false positives)
       vim.keymap.set('n', 'gr', '<cmd>Telescope lsp_references default_text=!import\\ <CR>', opts)
-      vim.keymap.set('n', 'gD', '<cmd>Telescope lsp_definitions<CR>', opts)
-      vim.keymap.set('n', 'gd', '<cmd>TypescriptGoToSourceDefinition<CR>', opts)
     end
   end,
 })

+ 5 - 2
.config/nixpkgs/neovim/neovim.nix

@@ -10,6 +10,7 @@
 , ripgrep
 , html-tidy
 , node-lsp
+, blink-cmp
 , fetchFromGitHub
 , fetchpatch
 , withLuadev ? false
@@ -71,6 +72,7 @@ let
     ++ (lib.attrValues treesitterPlugins)
     ++ [
       extra-treesitter-textobjects
+      blink-cmp
     ] ++ lib.optionals withLuadev [
       pinnedPlugins."bfredl/nvim-luadev"
     ];
@@ -86,13 +88,14 @@ let
       let g:loaded_perl_provider = 0
 
       set runtimepath=${placeholder "out"}/lib,$VIMRUNTIME
-      set packpath=${placeholder "out"}/lib
+      set packpath=${placeholder "out"}/lib,$VIMRUNTIME
 
       lua <<EOF
       -- make sure docs in our packpath are marked as help
       vim.filetype.add({
         pattern = {
-          [vim.o.packpath:gsub('[%.%-]', '%%%0') .. '/pack/.*/doc/.*%.txt'] = 'help'
+          [os.getenv("VIMRUNTIME"):gsub('[%.%-]', '%%%0') .. '/doc/.*%.txt'] = 'help',
+          ['.*/pack/.*/doc/.*%.txt'] = 'help',
         }
       })
       EOF

+ 1 - 1
.config/nixpkgs/neovim/node-lsp/default.nix

@@ -18,5 +18,5 @@ buildNpmPackage {
     ln -s "$out/lib/node_modules/.bin/vscode-eslint-language-server" "$out/bin"
   '';
 
-  npmDepsHash = "sha256-9jedpk/RWBnQZn8h7/6+vUPMQ5069smYQ/e8IGLVfI0=";
+  npmDepsHash = "sha256-2+Mzy9cxTNTzd1N1/CYd13ay46Jx5o740aPckHdS4Ko=";
 }

+ 312 - 165
.config/nixpkgs/neovim/node-lsp/package-lock.json

@@ -8,16 +8,23 @@
       "name": "node-lsp",
       "version": "0.0.0",
       "dependencies": {
-        "bash-language-server": "^5.1.2",
-        "typescript": "^5.3.3",
-        "typescript-language-server": "^4.3.3",
-        "vscode-langservers-extracted": "^4.8.0"
+        "bash-language-server": "^5.6.0",
+        "typescript": "^5.8.3",
+        "typescript-language-server": "^4.3.4",
+        "vscode-langservers-extracted": "^4.10.0"
       }
     },
+    "node_modules/@mixmark-io/domino": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/@mixmark-io/domino/-/domino-2.2.0.tgz",
+      "integrity": "sha512-Y28PR25bHXUg88kCV7nivXrP2Nj2RueZ3/l/jdx6J9f8J4nsEGcgX0Qe6lt7Pa+J79+kPiJU3LguR6O/6zrLOw==",
+      "license": "BSD-2-Clause"
+    },
     "node_modules/@nodelib/fs.scandir": {
       "version": "2.1.5",
       "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
       "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+      "license": "MIT",
       "dependencies": {
         "@nodelib/fs.stat": "2.0.5",
         "run-parallel": "^1.1.9"
@@ -30,6 +37,7 @@
       "version": "2.0.5",
       "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
       "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+      "license": "MIT",
       "engines": {
         "node": ">= 8"
       }
@@ -38,6 +46,7 @@
       "version": "1.2.8",
       "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
       "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+      "license": "MIT",
       "dependencies": {
         "@nodelib/fs.scandir": "2.1.5",
         "fastq": "^1.6.0"
@@ -46,24 +55,39 @@
         "node": ">= 8"
       }
     },
+    "node_modules/@one-ini/wasm": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/@one-ini/wasm/-/wasm-0.2.0.tgz",
+      "integrity": "sha512-n+L/BvrwKUn7q5O3wHGo+CJZAqfewh38+37sk+eBzv/39lM9pPgPRd4sOZRvSRzo0ukLxzyXso4WlGj2oKZ5hA==",
+      "license": "MIT"
+    },
     "node_modules/@vscode/l10n": {
-      "version": "0.0.16",
-      "resolved": "https://registry.npmjs.org/@vscode/l10n/-/l10n-0.0.16.tgz",
-      "integrity": "sha512-JT5CvrIYYCrmB+dCana8sUqJEcGB1ZDXNLMQ2+42bW995WmNoenijWMUdZfwmuQUTQcEVVIa2OecZzTYWUW9Cg=="
+      "version": "0.0.18",
+      "resolved": "https://registry.npmjs.org/@vscode/l10n/-/l10n-0.0.18.tgz",
+      "integrity": "sha512-KYSIHVmslkaCDyw013pphY+d7x1qV8IZupYfeIfzNA+nsaWHbn5uPuQRvdRFsa9zFzGeudPuoGoZ1Op4jrJXIQ==",
+      "license": "MIT"
+    },
+    "node_modules/balanced-match": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+      "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+      "license": "MIT"
     },
     "node_modules/bash-language-server": {
-      "version": "5.1.2",
-      "resolved": "https://registry.npmjs.org/bash-language-server/-/bash-language-server-5.1.2.tgz",
-      "integrity": "sha512-hXgN71VWVV2nQVE1ej7scAHVGvRAxoYhs2KwzvJq+lSqp4VQ60M0Cff1QzJKJM/cTyLWNjabb98bDGZgDMMh2g==",
+      "version": "5.6.0",
+      "resolved": "https://registry.npmjs.org/bash-language-server/-/bash-language-server-5.6.0.tgz",
+      "integrity": "sha512-DCuV+/BZAAozsp5blvi6jDnU/ZDaTpJpWM0zqwGjnirfqv7iBsMK32xOze/jipxU0PUZ6CBUKgRUMKI7Kk70Lg==",
+      "license": "MIT",
       "dependencies": {
-        "fast-glob": "3.3.2",
+        "editorconfig": "2.0.1",
+        "fast-glob": "3.3.3",
         "fuzzy-search": "3.2.1",
         "node-fetch": "2.7.0",
-        "turndown": "7.1.2",
+        "turndown": "7.2.0",
         "vscode-languageserver": "8.0.2",
-        "vscode-languageserver-textdocument": "1.0.11",
-        "web-tree-sitter": "0.20.8",
-        "zod": "3.22.4"
+        "vscode-languageserver-textdocument": "1.0.12",
+        "web-tree-sitter": "0.24.5",
+        "zod": "3.24.2"
       },
       "bin": {
         "bash-language-server": "out/cli.js"
@@ -72,60 +96,48 @@
         "node": ">=16"
       }
     },
-    "node_modules/bash-language-server/node_modules/vscode-jsonrpc": {
-      "version": "8.0.2",
-      "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.0.2.tgz",
-      "integrity": "sha512-RY7HwI/ydoC1Wwg4gJ3y6LpU9FJRZAUnTYMXthqhFXXu77ErDd/xkREpGuk4MyYkk4a+XDWAMqe0S3KkelYQEQ==",
-      "engines": {
-        "node": ">=14.0.0"
-      }
-    },
-    "node_modules/bash-language-server/node_modules/vscode-languageserver": {
-      "version": "8.0.2",
-      "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-8.0.2.tgz",
-      "integrity": "sha512-bpEt2ggPxKzsAOZlXmCJ50bV7VrxwCS5BI4+egUmure/oI/t4OlFzi/YNtVvY24A2UDOZAgwFGgnZPwqSJubkA==",
-      "dependencies": {
-        "vscode-languageserver-protocol": "3.17.2"
-      },
-      "bin": {
-        "installServerIntoExtension": "bin/installServerIntoExtension"
-      }
-    },
-    "node_modules/bash-language-server/node_modules/vscode-languageserver-protocol": {
-      "version": "3.17.2",
-      "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.2.tgz",
-      "integrity": "sha512-8kYisQ3z/SQ2kyjlNeQxbkkTNmVFoQCqkmGrzLH6A9ecPlgTbp3wDTnUNqaUxYr4vlAcloxx8zwy7G5WdguYNg==",
-      "dependencies": {
-        "vscode-jsonrpc": "8.0.2",
-        "vscode-languageserver-types": "3.17.2"
-      }
-    },
-    "node_modules/bash-language-server/node_modules/vscode-languageserver-types": {
-      "version": "3.17.2",
-      "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.2.tgz",
-      "integrity": "sha512-zHhCWatviizPIq9B7Vh9uvrH6x3sK8itC84HkamnBWoDFJtzBf7SWlpLCZUit72b3os45h6RWQNC9xHRDF8dRA=="
-    },
     "node_modules/boolbase": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
-      "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww=="
+      "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==",
+      "license": "ISC"
+    },
+    "node_modules/brace-expansion": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+      "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+      "license": "MIT",
+      "dependencies": {
+        "balanced-match": "^1.0.0"
+      }
     },
     "node_modules/braces": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
-      "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
+      "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
+      "license": "MIT",
       "dependencies": {
-        "fill-range": "^7.0.1"
+        "fill-range": "^7.1.1"
       },
       "engines": {
         "node": ">=8"
       }
     },
+    "node_modules/commander": {
+      "version": "13.1.0",
+      "resolved": "https://registry.npmjs.org/commander/-/commander-13.1.0.tgz",
+      "integrity": "sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=18"
+      }
+    },
     "node_modules/core-js": {
-      "version": "3.29.1",
-      "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.29.1.tgz",
-      "integrity": "sha512-+jwgnhg6cQxKYIIjGtAHq2nwUOolo9eoFZ4sHfUH09BLXBgxnH4gA0zEd+t+BO2cNB8idaBtZFcFTRjQJRJmAw==",
+      "version": "3.41.0",
+      "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.41.0.tgz",
+      "integrity": "sha512-SJ4/EHwS36QMJd6h/Rg+GyR4A5xE0FSI3eZ+iBVpfqf1x0eTSg1smWLHrA+2jQThZSh97fmSgFSU8B61nxosxA==",
       "hasInstallScript": true,
+      "license": "MIT",
       "funding": {
         "type": "opencollective",
         "url": "https://opencollective.com/core-js"
@@ -135,6 +147,7 @@
       "version": "5.1.0",
       "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz",
       "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==",
+      "license": "BSD-2-Clause",
       "dependencies": {
         "boolbase": "^1.0.0",
         "css-what": "^6.1.0",
@@ -150,6 +163,7 @@
       "version": "6.1.0",
       "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz",
       "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==",
+      "license": "BSD-2-Clause",
       "engines": {
         "node": ">= 6"
       },
@@ -161,6 +175,7 @@
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz",
       "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==",
+      "license": "MIT",
       "dependencies": {
         "domelementtype": "^2.3.0",
         "domhandler": "^5.0.2",
@@ -179,12 +194,14 @@
           "type": "github",
           "url": "https://github.com/sponsors/fb55"
         }
-      ]
+      ],
+      "license": "BSD-2-Clause"
     },
     "node_modules/domhandler": {
       "version": "5.0.3",
       "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz",
       "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==",
+      "license": "BSD-2-Clause",
       "dependencies": {
         "domelementtype": "^2.3.0"
       },
@@ -195,15 +212,11 @@
         "url": "https://github.com/fb55/domhandler?sponsor=1"
       }
     },
-    "node_modules/domino": {
-      "version": "2.1.6",
-      "resolved": "https://registry.npmjs.org/domino/-/domino-2.1.6.tgz",
-      "integrity": "sha512-3VdM/SXBZX2omc9JF9nOPCtDaYQ67BGp5CoLpIQlO2KCAPETs8TcDHacF26jXadGbvUteZzRTeos2fhID5+ucQ=="
-    },
     "node_modules/domutils": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz",
-      "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==",
+      "version": "3.2.2",
+      "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz",
+      "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==",
+      "license": "BSD-2-Clause",
       "dependencies": {
         "dom-serializer": "^2.0.0",
         "domelementtype": "^2.3.0",
@@ -213,10 +226,29 @@
         "url": "https://github.com/fb55/domutils?sponsor=1"
       }
     },
+    "node_modules/editorconfig": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-2.0.1.tgz",
+      "integrity": "sha512-jMVc7LbF/M13cSpBiVWGut+qhIyOddIhSXPAntMSboEigGFGaQmBow9ZrVog0VT2K89qm0cyGHa7FRhcOqP8hA==",
+      "license": "MIT",
+      "dependencies": {
+        "@one-ini/wasm": "0.2.0",
+        "commander": "^13.1.0",
+        "minimatch": "10.0.1",
+        "semver": "^7.7.1"
+      },
+      "bin": {
+        "editorconfig": "bin/editorconfig"
+      },
+      "engines": {
+        "node": ">=18"
+      }
+    },
     "node_modules/entities": {
       "version": "4.5.0",
       "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
       "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
+      "license": "BSD-2-Clause",
       "engines": {
         "node": ">=0.12"
       },
@@ -225,32 +257,35 @@
       }
     },
     "node_modules/fast-glob": {
-      "version": "3.3.2",
-      "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
-      "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
+      "version": "3.3.3",
+      "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz",
+      "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==",
+      "license": "MIT",
       "dependencies": {
         "@nodelib/fs.stat": "^2.0.2",
         "@nodelib/fs.walk": "^1.2.3",
         "glob-parent": "^5.1.2",
         "merge2": "^1.3.0",
-        "micromatch": "^4.0.4"
+        "micromatch": "^4.0.8"
       },
       "engines": {
         "node": ">=8.6.0"
       }
     },
     "node_modules/fastq": {
-      "version": "1.17.1",
-      "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz",
-      "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==",
+      "version": "1.19.1",
+      "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz",
+      "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==",
+      "license": "ISC",
       "dependencies": {
         "reusify": "^1.0.4"
       }
     },
     "node_modules/fill-range": {
-      "version": "7.0.1",
-      "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
-      "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+      "version": "7.1.1",
+      "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
+      "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
+      "license": "MIT",
       "dependencies": {
         "to-regex-range": "^5.0.1"
       },
@@ -261,12 +296,14 @@
     "node_modules/fuzzy-search": {
       "version": "3.2.1",
       "resolved": "https://registry.npmjs.org/fuzzy-search/-/fuzzy-search-3.2.1.tgz",
-      "integrity": "sha512-vAcPiyomt1ioKAsAL2uxSABHJ4Ju/e4UeDM+g1OlR0vV4YhLGMNsdLNvZTpEDY4JCSt0E4hASCNM5t2ETtsbyg=="
+      "integrity": "sha512-vAcPiyomt1ioKAsAL2uxSABHJ4Ju/e4UeDM+g1OlR0vV4YhLGMNsdLNvZTpEDY4JCSt0E4hASCNM5t2ETtsbyg==",
+      "license": "ISC"
     },
     "node_modules/glob-parent": {
       "version": "5.1.2",
       "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
       "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+      "license": "ISC",
       "dependencies": {
         "is-glob": "^4.0.1"
       },
@@ -278,6 +315,7 @@
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
       "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
+      "license": "MIT",
       "bin": {
         "he": "bin/he"
       }
@@ -286,6 +324,7 @@
       "version": "2.1.1",
       "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
       "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+      "license": "MIT",
       "engines": {
         "node": ">=0.10.0"
       }
@@ -294,6 +333,7 @@
       "version": "4.0.3",
       "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
       "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+      "license": "MIT",
       "dependencies": {
         "is-extglob": "^2.1.1"
       },
@@ -305,39 +345,59 @@
       "version": "7.0.0",
       "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
       "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+      "license": "MIT",
       "engines": {
         "node": ">=0.12.0"
       }
     },
     "node_modules/jsonc-parser": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz",
-      "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w=="
+      "version": "3.3.1",
+      "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz",
+      "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==",
+      "license": "MIT"
     },
     "node_modules/merge2": {
       "version": "1.4.1",
       "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
       "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+      "license": "MIT",
       "engines": {
         "node": ">= 8"
       }
     },
     "node_modules/micromatch": {
-      "version": "4.0.5",
-      "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
-      "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
+      "version": "4.0.8",
+      "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
+      "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
+      "license": "MIT",
       "dependencies": {
-        "braces": "^3.0.2",
+        "braces": "^3.0.3",
         "picomatch": "^2.3.1"
       },
       "engines": {
         "node": ">=8.6"
       }
     },
+    "node_modules/minimatch": {
+      "version": "10.0.1",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz",
+      "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==",
+      "license": "ISC",
+      "dependencies": {
+        "brace-expansion": "^2.0.1"
+      },
+      "engines": {
+        "node": "20 || >=22"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
     "node_modules/node-fetch": {
       "version": "2.7.0",
       "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
       "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
+      "license": "MIT",
       "dependencies": {
         "whatwg-url": "^5.0.0"
       },
@@ -354,9 +414,10 @@
       }
     },
     "node_modules/node-html-parser": {
-      "version": "6.1.11",
-      "resolved": "https://registry.npmjs.org/node-html-parser/-/node-html-parser-6.1.11.tgz",
-      "integrity": "sha512-FAgwwZ6h0DSDWxfD0Iq1tsDcBCxdJB1nXpLPPxX8YyVWzbfCjKWEzaynF4gZZ/8hziUmp7ZSaKylcn0iKhufUQ==",
+      "version": "6.1.13",
+      "resolved": "https://registry.npmjs.org/node-html-parser/-/node-html-parser-6.1.13.tgz",
+      "integrity": "sha512-qIsTMOY4C/dAa5Q5vsobRpOOvPfC4pB61UVW2uSwZNUp0QU/jCekTal1vMmbO0DgdHeLUJpv/ARmDqErVxA3Sg==",
+      "license": "MIT",
       "dependencies": {
         "css-select": "^5.1.0",
         "he": "1.2.0"
@@ -366,6 +427,7 @@
       "version": "2.1.1",
       "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz",
       "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==",
+      "license": "BSD-2-Clause",
       "dependencies": {
         "boolbase": "^1.0.0"
       },
@@ -377,6 +439,7 @@
       "version": "2.3.1",
       "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
       "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+      "license": "MIT",
       "engines": {
         "node": ">=8.6"
       },
@@ -401,22 +464,26 @@
           "type": "consulting",
           "url": "https://feross.org/support"
         }
-      ]
+      ],
+      "license": "MIT"
     },
     "node_modules/regenerator-runtime": {
       "version": "0.13.11",
       "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz",
-      "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg=="
+      "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==",
+      "license": "MIT"
     },
     "node_modules/request-light": {
       "version": "0.7.0",
       "resolved": "https://registry.npmjs.org/request-light/-/request-light-0.7.0.tgz",
-      "integrity": "sha512-lMbBMrDoxgsyO+yB3sDcrDuX85yYt7sS8BfQd11jtbW/z5ZWgLZRcEGLsLoYw7I0WSUGQBs8CC8ScIxkTX1+6Q=="
+      "integrity": "sha512-lMbBMrDoxgsyO+yB3sDcrDuX85yYt7sS8BfQd11jtbW/z5ZWgLZRcEGLsLoYw7I0WSUGQBs8CC8ScIxkTX1+6Q==",
+      "license": "MIT"
     },
     "node_modules/reusify": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
-      "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz",
+      "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==",
+      "license": "MIT",
       "engines": {
         "iojs": ">=1.0.0",
         "node": ">=0.10.0"
@@ -440,14 +507,28 @@
           "url": "https://feross.org/support"
         }
       ],
+      "license": "MIT",
       "dependencies": {
         "queue-microtask": "^1.2.2"
       }
     },
+    "node_modules/semver": {
+      "version": "7.7.1",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz",
+      "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==",
+      "license": "ISC",
+      "bin": {
+        "semver": "bin/semver.js"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
     "node_modules/to-regex-range": {
       "version": "5.0.1",
       "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
       "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+      "license": "MIT",
       "dependencies": {
         "is-number": "^7.0.0"
       },
@@ -458,20 +539,23 @@
     "node_modules/tr46": {
       "version": "0.0.3",
       "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
-      "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="
+      "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==",
+      "license": "MIT"
     },
     "node_modules/turndown": {
-      "version": "7.1.2",
-      "resolved": "https://registry.npmjs.org/turndown/-/turndown-7.1.2.tgz",
-      "integrity": "sha512-ntI9R7fcUKjqBP6QU8rBK2Ehyt8LAzt3UBT9JR9tgo6GtuKvyUzpayWmeMKJw1DPdXzktvtIT8m2mVXz+bL/Qg==",
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/turndown/-/turndown-7.2.0.tgz",
+      "integrity": "sha512-eCZGBN4nNNqM9Owkv9HAtWRYfLA4h909E/WGAWWBpmB275ehNhZyk87/Tpvjbp0jjNl9XwCsbe6bm6CqFsgD+A==",
+      "license": "MIT",
       "dependencies": {
-        "domino": "^2.1.6"
+        "@mixmark-io/domino": "^2.2.0"
       }
     },
     "node_modules/typescript": {
-      "version": "5.3.3",
-      "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz",
-      "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==",
+      "version": "5.8.3",
+      "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz",
+      "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==",
+      "license": "Apache-2.0",
       "bin": {
         "tsc": "bin/tsc",
         "tsserver": "bin/tsserver"
@@ -481,9 +565,10 @@
       }
     },
     "node_modules/typescript-language-server": {
-      "version": "4.3.3",
-      "resolved": "https://registry.npmjs.org/typescript-language-server/-/typescript-language-server-4.3.3.tgz",
-      "integrity": "sha512-3QLj57Ru9S6zv10sa4z1pA3TIR1Rdkd04Ke0EszbO4fx5PLdlYhlC/PMxwlyxls9wrZs7wPCME1Ru0s1Gabz4Q==",
+      "version": "4.3.4",
+      "resolved": "https://registry.npmjs.org/typescript-language-server/-/typescript-language-server-4.3.4.tgz",
+      "integrity": "sha512-0pQ4ffAarsf10VwFhyyyqNJhuDd4r6f4dSsQN38WdbQ3WVxqi08p/bI//v1VnOV5CSVd4AeOUY/jfJYheHTQPQ==",
+      "license": "Apache-2.0",
       "bin": {
         "typescript-language-server": "lib/cli.mjs"
       },
@@ -492,65 +577,71 @@
       }
     },
     "node_modules/vscode-css-languageservice": {
-      "version": "6.2.11",
-      "resolved": "https://registry.npmjs.org/vscode-css-languageservice/-/vscode-css-languageservice-6.2.11.tgz",
-      "integrity": "sha512-qn49Wa6K94LnizpVxmlYrcPf1Cb36gq1nNueW0COhi4shylXBzET5wuDbH8ZWQlJD0HM5Mmnn7WE9vQVVs+ULA==",
+      "version": "6.3.4",
+      "resolved": "https://registry.npmjs.org/vscode-css-languageservice/-/vscode-css-languageservice-6.3.4.tgz",
+      "integrity": "sha512-qutdhFg4hnlf6IsOynwtfsN8W0Xc7g3SZd+KK9F2moUEjHtkcZoj5p8uH7BSwHx9hSEXjwKgSRRyHTXThfwAkQ==",
+      "license": "MIT",
       "dependencies": {
-        "@vscode/l10n": "^0.0.16",
-        "vscode-languageserver-textdocument": "^1.0.11",
+        "@vscode/l10n": "^0.0.18",
+        "vscode-languageserver-textdocument": "^1.0.12",
         "vscode-languageserver-types": "3.17.5",
-        "vscode-uri": "^3.0.8"
+        "vscode-uri": "^3.1.0"
       }
     },
     "node_modules/vscode-html-languageservice": {
-      "version": "5.1.1",
-      "resolved": "https://registry.npmjs.org/vscode-html-languageservice/-/vscode-html-languageservice-5.1.1.tgz",
-      "integrity": "sha512-JenrspIIG/Q+93R6G3L6HdK96itSisMynE0glURqHpQbL3dKAKzdm8L40lAHNkwJeBg+BBPpAshZKv/38onrTQ==",
+      "version": "5.3.3",
+      "resolved": "https://registry.npmjs.org/vscode-html-languageservice/-/vscode-html-languageservice-5.3.3.tgz",
+      "integrity": "sha512-AK/jJM0VIWRrlfqkDBMZxNMnxYT5I2uoMVRoNJ5ePSplnSaT9mbYjqJlxxeLvUrOW7MEH0vVIDzU48u44QZE0w==",
+      "license": "MIT",
       "dependencies": {
-        "@vscode/l10n": "^0.0.16",
-        "vscode-languageserver-textdocument": "^1.0.11",
+        "@vscode/l10n": "^0.0.18",
+        "vscode-languageserver-textdocument": "^1.0.12",
         "vscode-languageserver-types": "^3.17.5",
-        "vscode-uri": "^3.0.8"
+        "vscode-uri": "^3.1.0"
       }
     },
     "node_modules/vscode-json-languageservice": {
-      "version": "5.3.7",
-      "resolved": "https://registry.npmjs.org/vscode-json-languageservice/-/vscode-json-languageservice-5.3.7.tgz",
-      "integrity": "sha512-jdDggN2SLMQw4C/tLr11v6/OK4cMVGy7tbyZRHQvukQ6lcflY3UV+ZMkmwHKCqXz2TmxkjQb536eJW6JMEVeew==",
+      "version": "5.4.4",
+      "resolved": "https://registry.npmjs.org/vscode-json-languageservice/-/vscode-json-languageservice-5.4.4.tgz",
+      "integrity": "sha512-dgT16da8VznFv0IrEpBSKYvi29gxnMf5EOq+UfZSPaCiLZ65kgVOo3vMJSPNbZK8557YYbQH/fpMxxa4wRPAQw==",
+      "license": "MIT",
       "dependencies": {
-        "@vscode/l10n": "^0.0.16",
-        "jsonc-parser": "^3.2.0",
-        "vscode-languageserver-textdocument": "^1.0.11",
+        "@vscode/l10n": "^0.0.18",
+        "jsonc-parser": "^3.3.1",
+        "vscode-languageserver-textdocument": "^1.0.12",
         "vscode-languageserver-types": "^3.17.5",
-        "vscode-uri": "^3.0.8"
+        "vscode-uri": "^3.1.0"
       }
     },
     "node_modules/vscode-jsonrpc": {
-      "version": "8.2.0",
-      "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.0.tgz",
-      "integrity": "sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==",
+      "version": "8.0.2",
+      "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.0.2.tgz",
+      "integrity": "sha512-RY7HwI/ydoC1Wwg4gJ3y6LpU9FJRZAUnTYMXthqhFXXu77ErDd/xkREpGuk4MyYkk4a+XDWAMqe0S3KkelYQEQ==",
+      "license": "MIT",
       "engines": {
         "node": ">=14.0.0"
       }
     },
     "node_modules/vscode-langservers-extracted": {
-      "version": "4.8.0",
-      "resolved": "https://registry.npmjs.org/vscode-langservers-extracted/-/vscode-langservers-extracted-4.8.0.tgz",
-      "integrity": "sha512-kWqVdmdcf9Ez1P3hZpvCHomxVqrdK2awwZkezSW3SuXLX0kXS4x8WoA0GkF54SA0CiXtJWszaFpQghUNVlepuQ==",
+      "version": "4.10.0",
+      "resolved": "https://registry.npmjs.org/vscode-langservers-extracted/-/vscode-langservers-extracted-4.10.0.tgz",
+      "integrity": "sha512-EFf9uQI4dAKbzMQFjDvVm1xJq1DXAQvBEuEfPGrK/xzfsL5xWTfIuRr90NgfmqwO+IEt6vLZm9EOj6R66xIifg==",
+      "license": "MIT",
       "dependencies": {
-        "@vscode/l10n": "^0.0.16",
+        "@vscode/l10n": "^0.0.18",
         "core-js": "^3.20.1",
-        "jsonc-parser": "^3.2.0",
+        "jsonc-parser": "^3.2.1",
         "regenerator-runtime": "^0.13.9",
         "request-light": "^0.7.0",
+        "semver": "^7.6.1",
         "typescript": "^4.0.5",
-        "vscode-css-languageservice": "^6.2.10",
-        "vscode-html-languageservice": "^5.1.0",
-        "vscode-json-languageservice": "^5.3.7",
-        "vscode-languageserver": "^9.0.1",
+        "vscode-css-languageservice": "^6.2.14",
+        "vscode-html-languageservice": "^5.2.0",
+        "vscode-json-languageservice": "^5.3.11",
+        "vscode-languageserver": "^10.0.0-next.3",
         "vscode-languageserver-textdocument": "^1.0.11",
         "vscode-languageserver-types": "^3.17.5",
-        "vscode-markdown-languageservice": "^0.4.0-alpha.7",
+        "vscode-markdown-languageservice": "^0.5.0-alpha.6",
         "vscode-nls": "^5.2.0",
         "vscode-uri": "^3.0.8"
       },
@@ -566,6 +657,7 @@
       "version": "4.9.5",
       "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz",
       "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==",
+      "license": "Apache-2.0",
       "bin": {
         "tsc": "bin/tsc",
         "tsserver": "bin/tsserver"
@@ -574,46 +666,94 @@
         "node": ">=4.2.0"
       }
     },
+    "node_modules/vscode-langservers-extracted/node_modules/vscode-jsonrpc": {
+      "version": "9.0.0-next.7",
+      "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-9.0.0-next.7.tgz",
+      "integrity": "sha512-7SgnbbbJfYr3off0T2KV/RCMYhVsuLeFPw8l3bkxSiavtoTLsOdu1jyxK3yWbdQuO8QOJC7+no0TXmYjRWSC+g==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=14.0.0"
+      }
+    },
+    "node_modules/vscode-langservers-extracted/node_modules/vscode-languageserver": {
+      "version": "10.0.0-next.12",
+      "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-10.0.0-next.12.tgz",
+      "integrity": "sha512-6lT2CJhH93YFmdDrFTwWvuG0/yzEN2Zbw/DfPaRF91sylZ3TSD0NkJU5jug6t/3NLoDh9VjfJZkgkKr6e3UmRw==",
+      "license": "MIT",
+      "dependencies": {
+        "vscode-languageserver-protocol": "3.17.6-next.12"
+      },
+      "bin": {
+        "installServerIntoExtension": "bin/installServerIntoExtension"
+      }
+    },
+    "node_modules/vscode-langservers-extracted/node_modules/vscode-languageserver-protocol": {
+      "version": "3.17.6-next.12",
+      "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.6-next.12.tgz",
+      "integrity": "sha512-EqrbwF0glTWD2HiDpFc32pJOr6/bJvyKSfCpRQrKy3XsfdloH4p3o/rNJYcpujM0OVLmPZgl1i9g57z9g2YRJA==",
+      "license": "MIT",
+      "dependencies": {
+        "vscode-jsonrpc": "9.0.0-next.7",
+        "vscode-languageserver-types": "3.17.6-next.6"
+      }
+    },
+    "node_modules/vscode-langservers-extracted/node_modules/vscode-languageserver-protocol/node_modules/vscode-languageserver-types": {
+      "version": "3.17.6-next.6",
+      "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.6-next.6.tgz",
+      "integrity": "sha512-aiJY5/yW+xzw7KPNlwi3gQtddq/3EIn5z8X8nCgJfaiAij2R1APKePngv+MUdLdYJBVTLu+Qa0ODsT+pHgYguQ==",
+      "license": "MIT"
+    },
     "node_modules/vscode-languageserver": {
-      "version": "9.0.1",
-      "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-9.0.1.tgz",
-      "integrity": "sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g==",
+      "version": "8.0.2",
+      "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-8.0.2.tgz",
+      "integrity": "sha512-bpEt2ggPxKzsAOZlXmCJ50bV7VrxwCS5BI4+egUmure/oI/t4OlFzi/YNtVvY24A2UDOZAgwFGgnZPwqSJubkA==",
+      "license": "MIT",
       "dependencies": {
-        "vscode-languageserver-protocol": "3.17.5"
+        "vscode-languageserver-protocol": "3.17.2"
       },
       "bin": {
         "installServerIntoExtension": "bin/installServerIntoExtension"
       }
     },
     "node_modules/vscode-languageserver-protocol": {
-      "version": "3.17.5",
-      "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.5.tgz",
-      "integrity": "sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==",
+      "version": "3.17.2",
+      "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.2.tgz",
+      "integrity": "sha512-8kYisQ3z/SQ2kyjlNeQxbkkTNmVFoQCqkmGrzLH6A9ecPlgTbp3wDTnUNqaUxYr4vlAcloxx8zwy7G5WdguYNg==",
+      "license": "MIT",
       "dependencies": {
-        "vscode-jsonrpc": "8.2.0",
-        "vscode-languageserver-types": "3.17.5"
+        "vscode-jsonrpc": "8.0.2",
+        "vscode-languageserver-types": "3.17.2"
       }
     },
+    "node_modules/vscode-languageserver-protocol/node_modules/vscode-languageserver-types": {
+      "version": "3.17.2",
+      "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.2.tgz",
+      "integrity": "sha512-zHhCWatviizPIq9B7Vh9uvrH6x3sK8itC84HkamnBWoDFJtzBf7SWlpLCZUit72b3os45h6RWQNC9xHRDF8dRA==",
+      "license": "MIT"
+    },
     "node_modules/vscode-languageserver-textdocument": {
-      "version": "1.0.11",
-      "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.11.tgz",
-      "integrity": "sha512-X+8T3GoiwTVlJbicx/sIAF+yuJAqz8VvwJyoMVhwEMoEKE/fkDmrqUgDMyBECcM2A2frVZIUj5HI/ErRXCfOeA=="
+      "version": "1.0.12",
+      "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.12.tgz",
+      "integrity": "sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==",
+      "license": "MIT"
     },
     "node_modules/vscode-languageserver-types": {
       "version": "3.17.5",
       "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz",
-      "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg=="
+      "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==",
+      "license": "MIT"
     },
     "node_modules/vscode-markdown-languageservice": {
-      "version": "0.4.0-alpha.8",
-      "resolved": "https://registry.npmjs.org/vscode-markdown-languageservice/-/vscode-markdown-languageservice-0.4.0-alpha.8.tgz",
-      "integrity": "sha512-6S6RE5s+4biWg2xk9bpwNi6GihUYQIVxdO3I+jb/XDyvfmqYVxrN86cKLF8QSbaQvX3fMuBAxBLFfX93FdJi3w==",
+      "version": "0.5.0-alpha.9",
+      "resolved": "https://registry.npmjs.org/vscode-markdown-languageservice/-/vscode-markdown-languageservice-0.5.0-alpha.9.tgz",
+      "integrity": "sha512-OrE8homBOuXX9FOUhqRXgx/Iw0qA94yj3FBRSMztn8VveeO1Y0Eqej/9HBb5ga4sYdlFtQRIZ19lie37TsI+cQ==",
+      "license": "MIT",
       "dependencies": {
         "@vscode/l10n": "^0.0.10",
         "node-html-parser": "^6.1.5",
         "picomatch": "^2.3.1",
-        "vscode-languageserver-textdocument": "^1.0.8",
-        "vscode-languageserver-types": "^3.17.3",
+        "vscode-languageserver-protocol": "^3.17.1",
+        "vscode-languageserver-textdocument": "^1.0.11",
         "vscode-uri": "^3.0.7"
       },
       "engines": {
@@ -623,41 +763,48 @@
     "node_modules/vscode-markdown-languageservice/node_modules/@vscode/l10n": {
       "version": "0.0.10",
       "resolved": "https://registry.npmjs.org/@vscode/l10n/-/l10n-0.0.10.tgz",
-      "integrity": "sha512-E1OCmDcDWa0Ya7vtSjp/XfHFGqYJfh+YPC1RkATU71fTac+j1JjCcB3qwSzmlKAighx2WxhLlfhS0RwAN++PFQ=="
+      "integrity": "sha512-E1OCmDcDWa0Ya7vtSjp/XfHFGqYJfh+YPC1RkATU71fTac+j1JjCcB3qwSzmlKAighx2WxhLlfhS0RwAN++PFQ==",
+      "license": "MIT"
     },
     "node_modules/vscode-nls": {
       "version": "5.2.0",
       "resolved": "https://registry.npmjs.org/vscode-nls/-/vscode-nls-5.2.0.tgz",
-      "integrity": "sha512-RAaHx7B14ZU04EU31pT+rKz2/zSl7xMsfIZuo8pd+KZO6PXtQmpevpq3vxvWNcrGbdmhM/rr5Uw5Mz+NBfhVng=="
+      "integrity": "sha512-RAaHx7B14ZU04EU31pT+rKz2/zSl7xMsfIZuo8pd+KZO6PXtQmpevpq3vxvWNcrGbdmhM/rr5Uw5Mz+NBfhVng==",
+      "license": "MIT"
     },
     "node_modules/vscode-uri": {
-      "version": "3.0.8",
-      "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.8.tgz",
-      "integrity": "sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw=="
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.1.0.tgz",
+      "integrity": "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==",
+      "license": "MIT"
     },
     "node_modules/web-tree-sitter": {
-      "version": "0.20.8",
-      "resolved": "https://registry.npmjs.org/web-tree-sitter/-/web-tree-sitter-0.20.8.tgz",
-      "integrity": "sha512-weOVgZ3aAARgdnb220GqYuh7+rZU0Ka9k9yfKtGAzEYMa6GgiCzW9JjQRJyCJakvibQW+dfjJdihjInKuuCAUQ=="
+      "version": "0.24.5",
+      "resolved": "https://registry.npmjs.org/web-tree-sitter/-/web-tree-sitter-0.24.5.tgz",
+      "integrity": "sha512-+J/2VSHN8J47gQUAvF8KDadrfz6uFYVjxoxbKWDoXVsH2u7yLdarCnIURnrMA6uSRkgX3SdmqM5BOoQjPdSh5w==",
+      "license": "MIT"
     },
     "node_modules/webidl-conversions": {
       "version": "3.0.1",
       "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
-      "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="
+      "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==",
+      "license": "BSD-2-Clause"
     },
     "node_modules/whatwg-url": {
       "version": "5.0.0",
       "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
       "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
+      "license": "MIT",
       "dependencies": {
         "tr46": "~0.0.3",
         "webidl-conversions": "^3.0.0"
       }
     },
     "node_modules/zod": {
-      "version": "3.22.4",
-      "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.4.tgz",
-      "integrity": "sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==",
+      "version": "3.24.2",
+      "resolved": "https://registry.npmjs.org/zod/-/zod-3.24.2.tgz",
+      "integrity": "sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ==",
+      "license": "MIT",
       "funding": {
         "url": "https://github.com/sponsors/colinhacks"
       }

+ 4 - 4
.config/nixpkgs/neovim/node-lsp/package.json

@@ -2,9 +2,9 @@
   "name": "node-lsp",
   "version": "0.0.0",
   "dependencies": {
-    "bash-language-server": "^5.1.2",
-    "vscode-langservers-extracted": "^4.8.0",
-    "typescript": "^5.3.3",
-    "typescript-language-server": "^4.3.3"
+    "bash-language-server": "^5.6.0",
+    "vscode-langservers-extracted": "^4.10.0",
+    "typescript": "^5.8.3",
+    "typescript-language-server": "^4.3.4"
   }
 }

+ 24 - 46
.config/nixpkgs/neovim/plugins.lua

@@ -279,55 +279,33 @@ require('treesitter-context').setup({
 })
 
 -- completion
-local cmp = require('cmp')
-local cmp_types = require('cmp.types')
-
-function sort_label(entry1, entry2)
-  local diff = vim.stricmp(entry1.completion_item.label, entry2.completion_item.label)
-  if diff < 0 then
-    return true
-  elseif diff > 0 then
-    return false
-  end
-end
-
-cmp.setup({
-  snippet = {
-    expand = function(args)
-      vim.fn['vsnip#anonymous'](args.body)
-    end,
+require('blink.cmp').setup({
+  cmdline = {
+    enabled = false,
   },
-  mapping = cmp.mapping.preset.insert({
-    ['<C-u>'] = cmp.mapping.scroll_docs(-4),
-    ['<C-d>'] = cmp.mapping.scroll_docs(4),
-    ['<C-Space>'] = cmp.mapping.complete(),
-    ['<C-e>'] = cmp.mapping.abort(),
-    ['<CR>'] = cmp.mapping.confirm({ select = true }), -- Accept currently selected item. Set `select` to `false` to only confirm explicitly selected items.
-  }),
-  sources = cmp.config.sources({
-    {
-      name = "nvim_lsp",
-      entry_filter = function(entry, ctx)
-        -- don't autocomplete keywords
-        return cmp_types.lsp.CompletionItemKind[entry:get_kind()] ~= 'Keyword'
-      end
-    },
-    { name = "vsnip" },
-  }),
   completion = {
-    autocomplete = false,
-  },
-  matching = {
-    -- disable non-prefix matching
-    disallow_fuzzy_matching = true,
-    disallow_partial_matching = true,
-    disallow_prefix_unmatching = true,
-  },
-  sorting = {
-    comparators = {
-      -- since we only have prefix matches, just sort the results
-      sort_label,
+    documentation = {
+      auto_show = true,
+      auto_show_delay_ms = 500,
     },
+    trigger = {
+      prefetch_on_insert = false,
+      show_on_keyword = false,
+      show_on_trigger_character = false,
+    },
+    menu = {
+      draw = {
+        columns = {
+          { "label", "label_description", gap = 1 },
+          { "kind" },
+        },
+      },
+    },
+  },
+  keymap = {
+    ['<Enter>'] = { 'select_and_accept', 'fallback' },
+    ['<C-u>'] = { 'scroll_documentation_up', 'fallback_to_mappings' },
+    ['<C-d>'] = { 'scroll_documentation_down', 'fallback_to_mappings' },
   },
 })
 

+ 0 - 4
.config/nixpkgs/neovim/plugins/default.nix

@@ -7,10 +7,6 @@ let
       dontBuild = false;
     };
 
-    "jose-elias-alvarez/typescript.nvim" = {
-      patches = [ ./typescript-nvim-tsserver.patch ];
-    };
-
     "nvim-treesitter/nvim-treesitter" = {
       # these extra rules causes nvim to crash when looking at a deeply nested
       # JSX expression

+ 22 - 42
.config/nixpkgs/neovim/plugins/sources.json

@@ -16,48 +16,44 @@
     "sha256": "1yvpk0cnsx1b1q2wp52fv4mj71w8ssz4dcbbdix65m8qna6d0m9h"
   },
   "mbbill/undotree": {
-    "rev": "2556c6800b210b2096b55b66e74b4cc1d9ebbe4f",
-    "sha256": "0cd6xw71aa51qr5vvg53y7hh2vlc7dzc1r7cldcgf31fn5md2ffh"
+    "rev": "b951b87b46c34356d44aa71886aecf9dd7f5788a",
+    "sha256": "0vp4wl4kiby7dlchki975fq682sw8c1vr9c6nhcndmxyhx7ghrqw"
   },
   "Wansmer/treesj": {
-    "rev": "48c1a7539f376fd40ceb9cf12d697040fcf90649",
-    "sha256": "0yha205ajwqz4y1a5l5qh35mivaz2ql1vqfky2cxy90zndq8g08r"
+    "rev": "f4049f8ba2177e7c5c03fb9e34d4e039c685d744",
+    "sha256": "01dfifx4cw4kkqgix1hd92q6capg4rmdhnzpjxddcq9rnlb0xgi4"
   },
   "nvim-telescope/telescope.nvim": {
-    "rev": "814f102cd1da3dc78c7d2f20f2ef3ed3cdf0e6e4",
-    "sha256": "0lbsq6x5bf7l54x7rkdkh7pa63afsgf0jnm0zf9ig7fw2lh18b8f"
+    "rev": "a4ed82509cecc56df1c7138920a1aeaf246c0ac5",
+    "sha256": "0vc2fr5nhbc39d55zn09fh8zpy4472ic4xmwvmk5dda8fqw76p8q"
   },
   "nvim-telescope/telescope-fzf-native.nvim": {
-    "rev": "2a5ceff981501cff8f46871d5402cd3378a8ab6a",
-    "sha256": "0n5yaslwmjn2057njyn604wb60zhqgad439zxaafd7qmvyjazlfi"
+    "rev": "1f08ed60cafc8f6168b72b80be2b2ea149813e55",
+    "sha256": "137a05qwbpcrcrfj4az7dwx5a43yyfib4crx1hi8bhjx9j5gqav7"
   },
   "nvim-lua/plenary.nvim": {
     "rev": "857c5ac632080dba10aae49dba902ce3abf91b35",
     "sha256": "0jxx9nfga7z87v78cifglqs8w4mrpf99wcp483kb0hbv6537jmgh"
   },
   "echasnovski/mini.nvim": {
-    "rev": "3a354c754656538ad76d1add93ca21e75b7f3181",
-    "sha256": "0h7apm2snx5j4jbmlwwk3qw0n1ng1nxcwdgc4i7fawz0a2jg8c5i"
+    "rev": "2b3cd8127258f78c7c18b1a5d32af578389b32ce",
+    "sha256": "164vkikwb0iykignh120sn8jldxiazkpdsbzbap0lnj8cy9j9hi8"
   },
   "lewis6991/gitsigns.nvim": {
-    "rev": "4c40357994f386e72be92a46f41fc1664c84c87d",
-    "sha256": "1d3i82g5barb9afk7ra3gmcwwjvaqp49sbdz0acki4a0yc80m31w"
+    "rev": "2149fc2009d1117d58e86e56836f70c969f60a82",
+    "sha256": "01h4lx190vd25vnr1zmmzsi195v45f83dvsisgrqvbqgrbdkhr7d"
   },
   "neovim/nvim-lspconfig": {
-    "rev": "d793c5cb0206d976a38e70e62479a60ba87722ca",
-    "sha256": "1sshkb34w57s306grfgfgc1lbxbr7g93xdanj7hpa7m1f1ais0wk"
+    "rev": "5dae152ee422ed9383217965aff92b331c4c248e",
+    "sha256": "055fc8xpzjvrz9zmzqlnl6wb3cqdqh34ljg6rngxzb3g3fljdpfr"
   },
   "nvim-treesitter/nvim-treesitter-textobjects": {
-    "rev": "88fce4e6496950dab867a7c63a819df0ead56751",
-    "sha256": "13rxfmc8w10lv3z0yljgv2ld45v7vwy6ccdr76d43x08d96wcxm9"
-  },
-  "jose-elias-alvarez/typescript.nvim": {
-    "rev": "4de85ef699d7e6010528dcfbddc2ed4c2c421467",
-    "sha256": "0rx29i3hmzh2knxx098fvfc0iafx3j08bs1zbv4dxadq56dnhaxm"
+    "rev": "205e3369bc83d8cb83f7409c36120e24611f8c5c",
+    "sha256": "13qmsnahlj88wxs75kvpn9hj89gnhm4dm6rb400ysrzmmx5ypg39"
   },
   "sainnhe/sonokai": {
-    "rev": "9679341d4141ed81376f2bdf5e69b78dc348d212",
-    "sha256": "1jbkfcs3ylsv2xsldjalp9agm4w7c5gda5kaawlrxcfngrh0pvnk"
+    "rev": "f59c796780655c3b9da442d310ad2f2d735f2e56",
+    "sha256": "0sxf6z3yzg4hggad172ljy6vxpnfll9q84pqa7n40m26g2alg29x"
   },
   "LnL7/vim-nix": {
     "rev": "7235c7ce2cea530cb6b59bc3e46d4bfe917d15c8",
@@ -68,25 +64,9 @@
     "rev": "1ce984c694345f3801bc656072f9a8dd51286a04",
     "sha256": "07q3kss0f6ggil2h4jcfxkwy0gm3q7bl3p4ysy725vnnmhhhlzkx"
   },
-  "hrsh7th/cmp-nvim-lsp": {
-    "rev": "99290b3ec1322070bcfb9e846450a46f6efa50f0",
-    "sha256": "08q5mf5jrqjjcl1s4h9zj2vd1kcizz0a5a6p65wv1rc5s1fa3a49"
-  },
-  "hrsh7th/nvim-cmp": {
-    "rev": "5a11682453ac6b13dbf32cd403da4ee9c07ef1c3",
-    "sha256": "06n3barrl80i0y43q250l49q07f7hry9w5ggwlimv7jxvilih43l"
-  },
-  "hrsh7th/cmp-vsnip": {
-    "rev": "989a8a73c44e926199bfd05fa7a516d51f2d2752",
-    "sha256": "1hs1gv7q0vfn82pwdwpy46nsi4n5z6yljnzl0rpvwfp8g79hssfs"
-  },
-  "hrsh7th/vim-vsnip": {
-    "rev": "02a8e79295c9733434aab4e0e2b8c4b7cea9f3a9",
-    "sha256": "06j0fph91x3gdhbf9bb0yv95j34gf827p97vak0l4jb0ib7vmyc2"
-  },
   "nvim-treesitter/nvim-treesitter": {
-    "rev": "99487eb34a397befce8182ff63347a21c5f4b881",
-    "sha256": "0y8r0krlny0xwbsl65q7rw70w116dm5iszq2yq762n4k0mwj51cf"
+    "rev": "684eeac91ed8e297685a97ef70031d19ac1de25a",
+    "sha256": "00ccbnnvpcf0lrpbaygzz9wdnf59ixp43z0zry1qvblnjplrlwb7"
   },
   "bfredl/nvim-luadev": {
     "optional": true,
@@ -94,7 +74,7 @@
     "sha256": "0pvb25bdmx4hxs3g7pkdqfjg3qpnr9p5szzbqqwaw3lbdnbyykzy"
   },
   "nvim-treesitter/nvim-treesitter-context": {
-    "rev": "198720b4016af04c9590f375d714d5bf8afecc1a",
-    "sha256": "13msw9i509ncysbgkqbl2wr1c23iw3f4mxkw30sc1yk9x9nx49ri"
+    "rev": "6daca3ad780f045550b820f262002f35175a6c04",
+    "sha256": "0qprwd44hw9sz0vh14p6lpvs9vxrick462pfkradmal6ak1kfwn3"
   }
 }

+ 7 - 4
.config/nixpkgs/neovim/plugins/treesitter-jsx.patch

@@ -1,12 +1,11 @@
 diff --git a/queries/jsx/highlights.scm b/queries/jsx/highlights.scm
-index a53b9533..deb3c159 100644
+index 0615d253..17dfc4d3 100644
 --- a/queries/jsx/highlights.scm
 +++ b/queries/jsx/highlights.scm
-@@ -65,87 +65,3 @@
- (jsx_text) @none @spell
+@@ -66,90 +66,6 @@
  
  (html_character_reference) @character.special
--
+ 
 -((jsx_element
 -  (jsx_opening_element
 -    name: (identifier) @_tag)
@@ -90,3 +89,7 @@ index a53b9533..deb3c159 100644
 -  (string
 -    (string_fragment) @string.special.url))
 -  (#any-of? @_attr "href" "src"))
+-
+ ((jsx_element) @_jsx_element
+   (#set! @_jsx_element bo.commentstring "{/* %s */}"))
+ 

+ 0 - 26
.config/nixpkgs/neovim/plugins/typescript-nvim-tsserver.patch

@@ -1,26 +0,0 @@
-diff --git a/lua/typescript/lsp.lua b/lua/typescript/lsp.lua
-index a2e01ec..3855580 100644
---- a/lua/typescript/lsp.lua
-+++ b/lua/typescript/lsp.lua
-@@ -22,7 +22,7 @@ local renameHandler = ____handlers.renameHandler
- local ____methods = require("typescript.types.methods")
- local TypescriptMethods = ____methods.TypescriptMethods
- local ____lspconfig = require("lspconfig")
--local tsserver = ____lspconfig.tsserver
-+local tsserver = ____lspconfig.ts_ls
- ____exports.setupLsp = function(overrides)
-     local resolvedConfig = __TS__ObjectAssign({}, config, overrides or ({}))
-     local ____resolvedConfig_server_0 = resolvedConfig.server
-diff --git a/lua/typescript/utils.lua b/lua/typescript/utils.lua
-index 4a166bb..252fe8a 100644
---- a/lua/typescript/utils.lua
-+++ b/lua/typescript/utils.lua
-@@ -10,7 +10,7 @@ ____exports.debugLog = function(...)
- end
- ____exports.getClient = function(bufnr)
-     for ____, client in pairs(vim.lsp.get_active_clients({bufnr = bufnr})) do
--        if client.name == "tsserver" then
-+        if client.name == "ts_ls" then
-             return client
-         end
-     end