eslint-config-prettier icon indicating copy to clipboard operation
eslint-config-prettier copied to clipboard

add support for `@stylistic/eslint-plugin`

Open abrahamguo opened this issue 1 year ago • 20 comments

Since formatting rules have been deprecated from core ESLint and moved to @stylistic/eslint-plugin, this PR adds support for all the same rules in @stylistic/eslint-plugin. Despite its name, @stylistic/eslint-plugin still has rules that can be used with prettier:

  • function-call-spacing
  • lines-between-class-members
  • padding-line-between-statements
  • spaced-comment
  • jsx-curly-brace-presence
  • jsx-self-closing-comp
  • jsx-sort-props
  • lines-around-comment
  • max-len
  • no-confusing-arrow
  • no-mixed-operators
  • no-tabs
  • quotes

This PR also updates package-lock.json to lockfileVersion: 3 (the version used by the current versions of npm) and ignores the .idea folder created by JetBrains IDEs.

abrahamguo avatar Dec 04 '23 13:12 abrahamguo

Hi!

Can you describe what your motivating use case is for this?

lydell avatar Dec 04 '23 15:12 lydell

Sure thing! I'd like to be able to use the stylistic rules from @stylistic/eslint-plugin that are unaffected by Prettier (the specific rules are listed above), while still using this to turn off all rules that conflict with Prettier.

I think this makes sense from a comprehensive purpose — since eslint-config-prettier disables rules from eslint, @typescript-eslint, and eslint-plugin-react, and those rules have been moved (in eslint) or copied (in @typescript-eslint and eslint-plugin-react) to @stylistic/eslint-plugin, I think it makes sense that eslint-config-prettier is able to disable those same rules, no matter which package they come from.

abrahamguo avatar Dec 04 '23 18:12 abrahamguo

Thanks! Just so that I understand what you’re doing correctly: Why don’t you enable just the rules from @stylistic/eslint-plugin that don’t conflict? Is this PR about having a place that lists the ones that do conflict, so people can know which ones are safe?

lydell avatar Dec 04 '23 18:12 lydell

Great question! Two answers:

  1. Yes, I think it'd be good to have an exhaustive list of the ones that do conflict, especially since the list is the same as what's in eslint, @typescript-eslint, and react.
  2. My preferred way to discover rules when I begin using a new ESLint plugin is to turn on all rules provided by that plugin, then turn off ones that I disagree with, as they report issues in my code. By adding the @stylistic/eslint-plugin rules here, I am able to do the same thing for this plugin - turn on all rules, then rest assured that all rules that conflict with Prettier, will be turned off.

abrahamguo avatar Dec 04 '23 19:12 abrahamguo

Aha, turning on all rules from a plugin and then disabling the ones that conflict – I can see that being a thing. :+1:

Then I have a request: I would rather have all the @stylistic stuff duplicated than using that helper function, so we can handle deprecations correctly. I don’t mind the duplication. They are forked rules after all, and may change over time, while the rules they replace are basically frozen in time.

lydell avatar Dec 04 '23 19:12 lydell

Totally fair, makes sense! I anticipated you might comment about that, since it was a very different style than what was in that file before. I'll go ahead and do that in a bit!

abrahamguo avatar Dec 04 '23 19:12 abrahamguo

I've mostly completed this — I just need to figure out how to get the tests working properly. It's very confusing because there are five different stylistic plugins — js, ts, tsx, plus, and all, which contains all of the other 4.

abrahamguo avatar Dec 22 '23 17:12 abrahamguo

Any news? Would love to have this built-in

TheDelta avatar Jul 14 '24 16:07 TheDelta

I will see if I can get this finished up!

abrahamguo avatar Jul 14 '24 19:07 abrahamguo

⚠️ No Changeset found

Latest commit: 278db1de4cabcae658bff19c11e4b834fd8769bd

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

changeset-bot[bot] avatar Jul 14 '24 19:07 changeset-bot[bot]

Any update on the merge?

thomaslecoeur avatar Aug 02 '24 21:08 thomaslecoeur

No updates, I will probably need someone else to take this over. The logic is done, I simply need help finishing up the unit tests.

Further complicating this is that ESLint Stylistic plans to merge their various packages (default, JavaScript, TypeScript, JSX) into one.

abrahamguo avatar Aug 03 '24 02:08 abrahamguo

For those wanting this and banging their heads against the unit tests, note:

the testing setup is overdue some simplification

https://github.com/prettier/eslint-config-prettier/issues/275#issuecomment-1868093670

(I’m not involved in the project anymore, I just occasionally read notifications on the repo.)

lydell avatar Aug 03 '24 08:08 lydell