Hacker News new | past | comments | ask | show | jobs | submit login

So much of it is completely unnecessary breaking changes too. A good example is the config file, out of the box they no longer support using `.eslintrc.*` (you can still get this behavior back with a config flag), you're now expected to use `eslint.config.js` instead. So in short, they're just making every single project out there that relies on ESLint go and either add a flag or rename one file — for what?



Could it be a gradual move towards standardizing on js config files? Perhaps version 9 will only parse js configs, and this is a step towards that.

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 really seeing the argument, right now they're also pushing unnecessary work onto everyone who uses `.eslintr.js` which already is a js config file. Yes, it is a small amount of work to fix, but it still means you have to go and read the changes and figure out what the breaking changes are to begin with.


It's in the release notes, and those also include a migration guide.

I'm not sure what more you would want. It's a major version upgrade.


My qualm isn't really that it's hard to fix it once you know it's broken, or to find it in the release notes, but rather that this change doesn't need to be breaking to begin with. I can understand changing the docs and changing the default value, I can also understand dropping the plaintext config file, but why also break every project that currently relies on `.eslintrc.js`? From the tooling side, it's one extra line to stat two file names rather than one.


It’s a hard thing to balance. One thing first, I’m not sure the config is (or always will be) the same across versions, so it could be that eslintrc configs can’t be parsed in the first place, even if they’re js.

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.


There's a good write-up of the shortcomings that the new config file is trying to address here: https://eslint.org/blog/2022/08/new-config-system-part-2/

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.")


Err... isn't the whole point of a big number release to introduce big, breaking changes? All major projects have breaking changes... but only the nice ones do us the courtesy of saving breaking changes for major release milestones


> Err... isn't the whole point of a big number release to introduce big, breaking changes?

Certainly not. Breaking changes should still be avoided as much as possible.


So are you saying that now was not the time for a major release? Or are you saying that the major release had too many breaking changes?


Option C: They were dumb breaking changes.


Probably not. 9 is a big number. They're probably breaking too often. Should only break every few years.


Eslint released in 2013, so sounds about right. Even Java has had more major releases than that.


DataTables released in about 2008 (https://cdn.datatables.net/1.0.0/js/jquery.dataTables.js) and just released 2.0 on Feb 15 this year (https://cdn.datatables.net/2.0.0/). No BC-breaks that I'm aware of in 16 years.

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.


oh man, datatables, that takes me back.

I agree that the way React does things is preferable.


> So in short, they're just making every single project out there that relies on ESLint go and either add a flag or rename one file

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.


This is not correct, even if you're using `.eslintrc.js`, you still have to go and rename it to `eslint.config.js`.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: