ESLint v9.0
eslint.org
eslint.org
It's super fast compared to ESLint and doesn't require a ton of plugins to work (you just install the one @biomejs/biome package and that's it). The configuration is dead simple as well and it has VS Code and intelliJ support too. It also does formatting / prettifying in the same package as well.
One downside though is it does not have support for Standard JS. They go by their own rules, which is fine for a new project, but existing projects that use Standard JS or have custom rules will probably take time to convert over, and not all ESLint rules are supported either.
https://github.com/biomejs/biome/discussions/2070#discussion...
It makes those linters virtually impossible for many projects to adopt.
Seems like it's part of some larger anti composable tools trend that I really don't understand.
That being said they would still need a plugin system (probably using wasm as compile target for plugins) for this to be feasible.
It was pretty obvious years ago that eslint messed up how package names are referenced in configs, and how they're resolved. Did it really require such a big change that affects the whole ecosystem? Microsoft seemed to have a pretty good solution with https://www.npmjs.com/package/@rushstack/eslint-patch
Edit: Here’s some info about the gradual migration to flat config and deprecation of eslintrc: https://eslint.org/blog/2023/10/flat-config-rollout-plans/
It seems like it’s been well thought out.
I'm not sure what more you would want. It's a major version upgrade.
I can also understand wanting to move entirely to one standard. Leaving remains of the old one, with over a decade of documentation about it all over the internet, could make remaining functioning artifacts harder to debug when searched for. For example, someone is using eslint v11 and they search something like “eslintrc.js not registering”, and heaps of the results they get pertain to irrelevant versions of the software. Sure there are ways around this for the searcher (and something like copilot will surely catch these things quickly), but that doesn’t mean eslint’s GitHub issues wouldn’t risk being inundated with this type of problem for years.
I agree with you too, though. I imagine they felt they’d given it enough time and warning, and they’d prefer to keep their internals cleaner and more consistent, and their documentation simpler as well. Weird gotchas like “oh also this really old type of file we don’t technically support can still be loaded” are a bad noise when people want signals.
E.g., faster and simpler file access from removing tree-walking for multiple `.eslintrc.*`; better defaults in line with modern JavaScript; better compatibility with modules and Node.js's own file loading.
(And I suspect there's an element of "As long as we're having to introduce a breaking change, let's make it explicitly breaking by also changing the filename.")
Certainly not. Breaking changes should still be avoided as much as possible.
Not saying every project can do it, but some of these ESLint changes seem rather unnecessary.
React always adds warnings in 1 major release and then removes in the following major release, meaning if you have no warnings you can just upgrade without fear, which is quite a nice way of doing it.
I agree that the way React does things is preferable.
Not every project. Many people switched to the .js format a long time ago since it’s more powerful. I understand the inconvenience though, especially since I don’t remember them deprecating the rc format when they introduced the js one.
I gave up eventually because i exhausted all options and couldn't fix issues.
I think some plugins are not compatible with eslint v9 so it doesn't make sense to upgrade unless they do first. Some of the plugins haven't been updated in years so I'm not confident that i can migrate anytime soon.
I don't think any of them support all the rules of eslint
I highly recommend people try it out and ditch the configuration nightmare that is eslint.
If I can, I always try to install the Rust or Go version of a tool instead of the Python or Node version.