diff options
| author | Estacio Pereira <estacio.pereira@gmail.com> | 2025-04-04 08:34:33 -0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-04-04 04:34:33 -0700 |
| commit | 93835565a746e252b3342dbab688c22bdea81da7 (patch) | |
| tree | 8c553d0985d3f243859b870d80e37cb03af957d9 /lua | |
| parent | docs: update configs.md (diff) | |
| download | nvim-lspconfig-93835565a746e252b3342dbab688c22bdea81da7.tar nvim-lspconfig-93835565a746e252b3342dbab688c22bdea81da7.tar.gz nvim-lspconfig-93835565a746e252b3342dbab688c22bdea81da7.tar.bz2 nvim-lspconfig-93835565a746e252b3342dbab688c22bdea81da7.tar.lz nvim-lspconfig-93835565a746e252b3342dbab688c22bdea81da7.tar.xz nvim-lspconfig-93835565a746e252b3342dbab688c22bdea81da7.tar.zst nvim-lspconfig-93835565a746e252b3342dbab688c22bdea81da7.zip | |
fix(eslint): find closest ESLint directory to avoid version mismatch #3686
Diffstat (limited to 'lua')
| -rw-r--r-- | lua/lspconfig/configs/eslint.lua | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/lua/lspconfig/configs/eslint.lua b/lua/lspconfig/configs/eslint.lua index e701928d..f80eee4b 100644 --- a/lua/lspconfig/configs/eslint.lua +++ b/lua/lspconfig/configs/eslint.lua @@ -47,6 +47,28 @@ local root_file = { 'eslint.config.cts', } +--- Find the closest directory containing the ESLint library. +--- Using the repository root as the ESLint library location is a common practice +--- but handling different versions in monorepos can cause the LSP not to point to +--- the correct instance. +--- +--- @return string|nil (path) The path to the closest directory containing the ESLint library, or nil if not found. +local function get_eslint_closest_dir() + local cwd = vim.fn.getcwd() + local eslint_node_modules = vim.fn.finddir('node_modules/eslint', cwd .. ';') + + if eslint_node_modules == '' then + return nil + end + + if eslint_node_modules == 'node_modules/eslint' then + return cwd + end + + -- Strip the node_modules/eslint part + return eslint_node_modules:match '(.*)/node_modules/eslint' +end + return { default_config = { cmd = { 'vscode-eslint-language-server', '--stdio' }, @@ -102,6 +124,8 @@ return { }, }, on_new_config = function(config, new_root_dir) + new_root_dir = get_eslint_closest_dir() or new_root_dir + -- The "workspaceFolder" is a VSCode concept. It limits how far the -- server will traverse the file system when locating the ESLint config -- file (e.g., .eslintrc). |
