eslint-plugin-package-json icon indicating copy to clipboard operation
eslint-plugin-package-json copied to clipboard

Bring in a "require-*"/"no-*" kind of rule

Open JoshuaKGoldberg opened this issue 1 year ago • 2 comments

https://npmpackagejsonlint.org/docs/rules#require-node-rules has a bunch of require-* rules for requiring properties to exist, such as require-author, require-bin.

This seems like it'd do well as a general-purpose ESLint rule. It could:

  • By default: enforce the required properties that will prompt a warning if missing
  • By configuration: be extended to any arbitrary property

Maybe, package-json/require-properties or package-json/require-package-properties as a name? The latter seems a little overly specific, so I'm leaning towards require-properties maybe?

But, what about https://npmpackagejsonlint.org/docs/rules/#disallowed-node-rules? Should we unify into one big rule for requiring which properties do or don't exist?

I also think that https://npmpackagejsonlint.org/docs/rules/required-node/require-scripts can be treated as a subset of https://npmpackagejsonlint.org/docs/rules/scripts/prefer-scripts for this rule. As in, this same rule can require both that scripts exists and what values it contains. Someone please yell at me if that's not ideal.

~Blocked on #40, but once that PR is merged this will be good to go.~ ✅

JoshuaKGoldberg avatar Sep 20 '23 14:09 JoshuaKGoldberg

If I am understanding correctly, this way I can lint against adding useless properties for private apps, like author, name, version etc. Is this correct? I am basically trying to come up with the smallest possible package.json scheme for an app.

MrHBS avatar Feb 08 '24 16:02 MrHBS

Yup! You'd have to configure the list yourself, as what constitutes as "useless" changes depending on the context.

JoshuaKGoldberg avatar Feb 09 '24 13:02 JoshuaKGoldberg