Neovim配置none-ls时加载eslint_d失败,请求协助排查
解决none-ls加载eslint_d失败的问题
以下是针对该错误的几种排查和解决方向:
检查none-ls内置源兼容性
新版none-ls(nvimtools/none-ls.nvim)可能调整了内置源的结构或移除了部分源。可以在Neovim中执行命令:lua print(vim.inspect(require("null-ls").builtins.diagnostics)),查看输出中是否存在eslint_d。如果没有,说明该内置源已被移除,可尝试降级none-ls到稳定版本,或改用自定义源配置。手动指定eslint_d可执行路径
即使全局或通过Mason安装了eslint_d,Neovim可能无法自动识别其路径。可以在配置中手动指定:null_ls.builtins.diagnostics.eslint_d.with({ command = "/path/to/eslint_d", -- 替换为实际路径,比如`~/.local/share/nvim/mason/bin/eslint_d`或终端执行`which eslint_d`得到的全局路径 }),验证eslint_d自身可用性
在终端执行eslint_d --version,如果命令报错,说明eslint_d安装存在问题。可尝试重新全局安装:npm uninstall -g eslint_d && npm install -g eslint_d同时确保当前Node.js版本为LTS版本,避免版本不兼容。
检查项目eslint配置文件
eslint_d需要项目根目录存在.eslintrc、eslint.config.js等配置文件才能正常工作。如果当前打开的项目没有这类文件,none-ls可能无法初始化该源,可在项目根目录创建基础配置文件测试。改用自定义源配置
若内置源确实无法使用,可手动注册自定义诊断源:null_ls.register({ name = "eslint_d", method = null_ls.methods.DIAGNOSTICS, filetypes = { "javascript", "javascriptreact", "typescript", "typescriptreact", "vue", "svelte" }, generator = null_ls.generator({ command = "eslint_d", args = { "--format", "json", "--stdin", "--stdin-filename", "$FILENAME" }, to_stdin = true, format = "json", check_exit_code = function(code) return code == 0 or code == 1 end, on_output = function(params) local diagnostics = {} for _, result in ipairs(params.output or {}) do for _, msg in ipairs(result.messages or {}) do table.insert(diagnostics, { row = msg.line, col = msg.column, end_row = msg.endLine, end_col = msg.endColumn, source = "eslint_d", message = msg.message, severity = null_ls.diagnostics.severities[msg.severity], }) end end return diagnostics end, }), })
内容的提问来源于stack exchange,提问作者Guillaume Marc
相关产品推荐
相关产品推荐

