Neovim中BiomeJS未加载biome.json配置,格式化与VSCode不一致
BiomeJS在Neovim中不读取biome.json的问题解决
问题描述
项目中已配置biome.json统一格式化与校验规则(已从ESLint和Prettier迁移),VSCode使用正常,但Neovim中BiomeJS未读取该配置,保存文件时格式化结果与预期不一致。以下是我的lsp.lua配置:
local util = require("lspconfig.util") return { { "williamboman/mason.nvim", opts = function(_, opts) vim.list_extend(opts.ensure_installed, { "biome", "stylua", "selene", "luacheck", "shellcheck", "shfmt", "tailwindcss-language-server", "typescript-language-server", "css-lsp", }) end, }, { "neovim/nvim-lspconfig", opts = { --- other options servers = { tsserver = { on_attach = function(client) client.server_capabilities.documentFormattingProvider = false end, }, biome = { cmd = { "biome", "lsp-proxy" }, filetypes = { "javascript", "javascriptreact", "json", "jsonc", "typescript", "typescript.tsx", "typescriptreact", "astro", "svelte", "vue", "css", }, root_dir = util.root_pattern("biome.json"), }, }, }, }, }
排查与修复方案
1. 修正Biome LSP启动命令
你当前使用的lsp-proxy是旧版Biome的废弃命令,新版Biome已改为直接通过biome lsp启动LSP服务。修改biome配置中的cmd字段:
biome = { cmd = { "biome", "lsp" }, -- 替换原lsp-proxy命令 -- ... 其他配置保持不变 },
旧命令会导致LSP无法正确加载项目根目录的biome.json。
2. 确认root_dir的识别逻辑
util.root_pattern("biome.json")的逻辑是对的,但要确保:
biome.json确实在项目根目录下- Neovim当前工作目录是项目根目录(可通过
:echo vim.fn.getcwd()查看),如果不是,打开文件前用:cd /path/to/your/project切换到项目根目录。
3. 避免格式化工具冲突
确认没有其他格式化插件或LSP在Biome之前修改文件:
- 你已经禁用了tsserver的格式化能力,这部分没问题
- 检查是否安装了null-ls、formatter.nvim等工具,若有需确保它们不会处理Biome负责的文件类型。
4. 确保Biome的格式化能力被启用
在biome配置中添加on_attach函数,明确启用格式化能力:
biome = { -- ... 其他配置 on_attach = function(client) client.server_capabilities.documentFormattingProvider = true client.server_capabilities.documentRangeFormattingProvider = true end, },
避免因全局配置或其他插件意外禁用Biome的格式化能力。
5. 验证命令行下的Biome行为
在项目根目录执行:
biome format --check ./src/your-test-file.js
如果命令行下Biome能正确读取配置并校验格式,说明问题出在Neovim的LSP配置;如果命令行也异常,先检查biome.json的语法是否正确。
内容的提问来源于stack exchange,提问作者Owenn
相关产品推荐
相关产品推荐

