diff --git a/lua/null-ls/builtins/code_actions/eslint.lua b/lua/null-ls/builtins/code_actions/eslint.lua index 767abe61..e2473d67 100644 --- a/lua/null-ls/builtins/code_actions/eslint.lua +++ b/lua/null-ls/builtins/code_actions/eslint.lua @@ -168,7 +168,7 @@ return h.make_builtin({ end, dynamic_command = cmd_resolver.from_node_modules(), cwd = h.cache.by_bufnr(function(params) - return u.cosmiconfig("eslint")(params.bufname) + return u.cosmiconfig("eslint", "eslintConfig")(params.bufname) end), }, factory = h.generator_factory, diff --git a/lua/null-ls/builtins/diagnostics/eslint.lua b/lua/null-ls/builtins/diagnostics/eslint.lua index 7565f9af..bc963e03 100644 --- a/lua/null-ls/builtins/diagnostics/eslint.lua +++ b/lua/null-ls/builtins/diagnostics/eslint.lua @@ -52,7 +52,7 @@ return h.make_builtin({ on_output = handle_eslint_output, dynamic_command = cmd_resolver.from_node_modules(), cwd = h.cache.by_bufnr(function(params) - return u.cosmiconfig("eslint")(params.bufname) + return u.cosmiconfig("eslint", "eslintConfig")(params.bufname) end), }, factory = h.generator_factory, diff --git a/lua/null-ls/builtins/formatting/eslint.lua b/lua/null-ls/builtins/formatting/eslint.lua index 15572cf8..026a550b 100644 --- a/lua/null-ls/builtins/formatting/eslint.lua +++ b/lua/null-ls/builtins/formatting/eslint.lua @@ -45,7 +45,7 @@ return h.make_builtin({ dynamic_command = cmd_resolver.from_node_modules(), check_exit_code = { 0, 1 }, cwd = h.cache.by_bufnr(function(params) - return u.cosmiconfig("eslint")(params.bufname) + return u.cosmiconfig("eslint", "eslintConfig")(params.bufname) end), }, }) diff --git a/lua/null-ls/utils/cosmiconfig.lua b/lua/null-ls/utils/cosmiconfig.lua index e8ebd872..3083c155 100644 --- a/lua/null-ls/utils/cosmiconfig.lua +++ b/lua/null-ls/utils/cosmiconfig.lua @@ -3,9 +3,9 @@ local u = require("null-ls.utils") -- Create the default root_pattern for tools using cosmiconfig. -- https://github.com/cosmiconfig/cosmiconfig#usage-for-end-users ---@param module_name string The module name. -return function(module_name) +---@param pkg_json_field_name? string The field name in package.json. +return function(module_name, pkg_json_field_name) local patterns = { - "package.json", ".{NAME}rc", ".{NAME}rc.json", ".{NAME}rc.yaml", @@ -22,5 +22,19 @@ return function(module_name) patterns[i] = string.gsub(v, "{NAME}", module_name) end - return u.root_pattern(unpack(patterns)) + return function(...) + local pkg_json_dir = u.root_pattern("package.json")(...) + if pkg_json_dir then + local pkg_json_path = u.path.join(pkg_json_dir, "package.json") + if vim.fn.filereadable(pkg_json_path) then + local pkg_json = vim.json.decode(vim.fn.readblob(pkg_json_path)) + local field = pkg_json_field_name or module_name + if vim.tbl_contains(vim.tbl_keys(pkg_json), field) then + return pkg_json_dir + end + end + end + + return u.root_pattern(unpack(patterns))(...) + end end