aboutsummaryrefslogtreecommitdiffstats
path: root/lua
diff options
context:
space:
mode:
authorEstacio Pereira <estacio.pereira@gmail.com>2025-04-04 08:34:33 -0300
committerGitHub <noreply@github.com>2025-04-04 04:34:33 -0700
commit93835565a746e252b3342dbab688c22bdea81da7 (patch)
tree8c553d0985d3f243859b870d80e37cb03af957d9 /lua
parentdocs: update configs.md (diff)
downloadnvim-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.lua24
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).