eslint-find-rules icon indicating copy to clipboard operation
eslint-find-rules copied to clipboard

'extends: eslint:recommended' causes *all* rules to be considered used

Open wolfgang42 opened this issue 7 years ago • 8 comments

Take the following minimal .eslintrc.yaml:

extends: eslint:recommended

When I run eslint-find-rules -c .eslintrc.yaml it dumps a list of every eslint rule, which is extremely unhelpful.

I think the problem here is that eslint:recommended is implemented by setting the value for non-recommended rules to off instead of leaving them out. The only workaround I can think of for this is to explicitly mask out eslint:recommended and then later fill them back in. However, this seems like a bit of a bodge; is there a better way to do this?

The alternative is to add a flag such as --off-is-unused to consider any rules which have been turned off to be unused. Of course, that would prevent rules from being removed from the list.

wolfgang42 avatar Oct 18 '16 04:10 wolfgang42

"used" means precisely that - "defined". It's not "--enabled".

I think a new flag that finds rules that aren't enabled would be great! However, that's an entirely separate flag than --unused - otherwise you'd be breaking the existing use case of locating rules that aren't defined in the eslint config.

ljharb avatar Oct 18 '16 05:10 ljharb

No, I completely understand that 'unused' is different from 'enabled'. I think the problem is that I expected eslint:recommended to only define the list of recommended rules, in the same way that for example eslint-config-standard only lists the rules it's enabling, rather than listing out every possible eslint rule.

My specific use case is writing an eslint config that's based off the recommended list with a lot of extra rules added. Right now I'm commenting out the extends line, running eslint-find-rules, and manually removing all of the recommended rules from the list.

Basically, what I'm looking for is something like eslint-find-rules --unused --no-extends .eslintrc.yaml minus eslint-find-rules --enabled --only-extends .eslintrc.yaml

Hopefully that makes sense? Now that I look closer at the eslint API I'm not even sure if it's possible to do this, but it's kind of hard for me to tell without diving in and having a go at it.

wolfgang42 avatar Oct 18 '16 05:10 wolfgang42

It will eventually be possible, once getRules() is exposed by ESLint's API (see #172 and issues linked within).

ta2edchimp avatar Oct 18 '16 06:10 ta2edchimp

I think that if you want the recommended set to only list the rules it's enabling, that perhaps that's a change that should be made upstream in eslint itself?

ljharb avatar Oct 18 '16 06:10 ljharb

@jfmengels did you open an issue upstream? I couldn't find one. Seems like a reasonable request to me, and I'm in the same boat as you trying to find unused rules.

Edit: @jfmengels just thumbs-up'ed it. Didn't scroll back up far enough to see that @wolfgang42 was the one who opened originally.

IanVS avatar Dec 29 '16 15:12 IanVS

No, I haven't. I could probably in a few days (a bit busy lately), but go ahead if you feel like it in the meantime.

jfmengels avatar Dec 29 '16 15:12 jfmengels

@ta2edchimp Are you guys considering this?

alexilyaev avatar Sep 04 '17 15:09 alexilyaev

Definitely.

But as I do not have the perfect idea about how to approach this, I'd recommend to use eslint-diff-rules in verbose mode as a workaround in the meanwhile:

eslint-diff-rules [your own config] ./node_modles/eslint/conf/eslint-recommended.js -v

ta2edchimp avatar Sep 04 '17 15:09 ta2edchimp