Plugin configuration & extensibility gaps prevent LSP real-time feedback for complex custom rules #10929
zhangleilaoge
started this conversation in
General
Replies: 2 comments
-
✅ Organic activityNo automation signals detected in the analyzed events. This is an automated analysis by AgentScan |
Beta Was this translation helpful? Give feedback.
0 replies
-
|
Moved into a discussion because it seems to contain more stuff other than "this is a bug". Please create an issue for the editor updates; this is likely a bug that needs to be addressed. You'll have to provide a reproduction. |
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
Issue Title
Plugin configuration & extensibility gaps prevent LSP real-time feedback for complex custom rules
Summary
We are evaluating Biome 2.5.3 as a replacement for ESLint in a large multi-package frontend repository (React + Vue2, TypeScript, multiple git submodules). While Biome's built-in rules and performance are excellent, we found that the current plugin system forces us to maintain custom rules as a separate CLI tool instead of a native Biome plugin. As a result, those rules cannot be triggered by the Biome LSP in real time inside the IDE.
Our current setup
In our previous ESLint setup, custom rules (e.g.
@youzan/scrm/no-package-src-or-lib-imports,@youzan/koko/no-http-cdn,@youzan/guide/date-format, JSDoc presence checks) were loaded as ESLint plugins. The ESLint language server invoked them on every file save / edit, so developers got instant feedback in VS Code / Trae.With Biome, we had to move those rules into a standalone Node.js CLI (
@youzan/biome-plugin, entrydist/run.js) because the rules:custom/jsdoc-required);custom/date-format);This CLI is invoked from
lint-stagedand CI, but never from the Biome LSP, so developers no longer see diagnostics while editing.Specific limitations we hit
GritQL plugins cannot accept configuration options
biome.jsoncan reference a.gritplugin, but there is no way to pass options into it (severity, denied import regexes, allowed identifier names, file globs, etc.). This forces every project to fork the.gritfile or hard-code values.No JSDoc / leading-trivia API in GritQL
Rules that check whether an exported function has a preceding
/** */block cannot be expressed. We verified empirically thatpreceded_by/afterdo not match leading trivia comments (also reported in GritQL plugins: expose leading-trivia / JSDoc-comment matching predicate #10474).No JavaScript/TypeScript plugin API
For rules that are easier to write and maintain in TypeScript (cross-file analysis, complex argument validation, reuse of existing ESLint rule logic), a JS/TS plugin runtime would be the natural migration path, but Biome does not expose one yet.
Standalone CLI is invisible to the LSP
Even if we keep the custom CLI, Biome LSP only runs rules defined in
biome.json. There is no hook to run an external linter and surface its diagnostics through the same LSP channel.Expected behavior
At minimum, one of the following would unblock us:
biome.jsonto pass a JSON options object to a plugin, and expose JSDoc / leading-trivia predicates.biome.json, and have Biome LSP execute them alongside native rules.With either option, our custom rules would run inside Biome's lint pipeline and therefore be available in the IDE via the Biome language server.
Why this matters
For our teams, "lint feedback only after commit/CI" is a significant regression compared to ESLint. It increases the feedback loop from seconds to minutes and shifts the cost of fixing issues from the author to reviewers or CI. This is the main blocker preventing us from fully migrating from ESLint to Biome.
Environment
Beta Was this translation helpful? Give feedback.
All reactions