JoshuaKGoldberg / eslint-plugin-package-json

Rules for consistent, readable, and valid package.json files. ๐Ÿ—‚๏ธ
MIT License
110 stars 20 forks source link

๐Ÿ“Œ Tracking issue: comparison with equivalent other tools #42

Open JoshuaKGoldberg opened 12 months ago

JoshuaKGoldberg commented 12 months ago

Spinning out of #28: I want to make sure that all the nice features that other tools in the ecosystem have are considered in this repository.

๐Ÿ‘‹ If you're a maintainer of any of the referenced packages then please reach out to me (I believe I've emailed you and/or pinged you in your issue tracker). I'd love to work with you on deduplicating rule implementations!

Note that this table is accurate only to my interpretation of each rule's intent - not necessarily their implementation details. For example, this package's valid-package-def might not capture every npm-package-json-lint *-type validation it's mentioned alongside. If you spot a gap in this package I'd encourage you to file a bug or feature request to fill it in.

โš ๏ธ This is a big table and susceptible to human error. Please say something if anything is amiss!

Area emoji key:

Package emoji key:

Area Config This package eslint-plugin-json-files โœ”๏ธ eslint-plugin-node-dependencies fixpack npm-package-json-lint โœ”๏ธ
๐Ÿ—บ๏ธ โœ”๏ธ #48 compat-engines
๐Ÿ—บ๏ธ โœ”๏ธ #49 valid-semver
๐Ÿ—บ๏ธ โœ”๏ธ unique-dependencies require-unique-dependency-names no-dupe-deps no-repeated-dependencies
๐Ÿ—บ๏ธ โœ”๏ธ valid-local-dependency
๐Ÿ—บ๏ธ โœ”๏ธ valid-package-def bin-type
๐Ÿ—บ๏ธ โœ”๏ธ valid-package-def bundledDependencies-type
๐Ÿ—บ๏ธ โœ”๏ธ valid-package-def config-type
๐Ÿ—บ๏ธ โœ”๏ธ valid-package-def cpu-type
๐Ÿ—บ๏ธ โœ”๏ธ valid-package-def dependencies-type
๐Ÿ—บ๏ธ โœ”๏ธ valid-package-def description-type
๐Ÿ—บ๏ธ โœ”๏ธ valid-package-def devDependencies-type
๐Ÿ—บ๏ธ โœ”๏ธ valid-package-def directories-type
๐Ÿ—บ๏ธ โœ”๏ธ valid-package-def engines-type
๐Ÿ—บ๏ธ โœ”๏ธ valid-package-def files-type
๐Ÿ—บ๏ธ โœ”๏ธ valid-package-def homepage-type
๐Ÿ—บ๏ธ โœ”๏ธ valid-package-def keywords-type
๐Ÿ—บ๏ธ โœ”๏ธ valid-package-def license-type
๐Ÿ—บ๏ธ โœ”๏ธ valid-package-def main-type
๐Ÿ—บ๏ธ โœ”๏ธ valid-package-def man-type
๐Ÿ—บ๏ธ โœ”๏ธ valid-package-def name-type
๐Ÿ—บ๏ธ โœ”๏ธ valid-package-def no-duplicate-properties
๐Ÿ—บ๏ธ โœ”๏ธ valid-package-def optionalDependencies-type
๐Ÿ—บ๏ธ โœ”๏ธ valid-package-def os-type
๐Ÿ—บ๏ธ โœ”๏ธ valid-package-def peerDependencies-type
๐Ÿ—บ๏ธ โœ”๏ธ valid-package-def preferGlobal-type
๐Ÿ—บ๏ธ โœ”๏ธ valid-package-def private-type
๐Ÿ—บ๏ธ โœ”๏ธ valid-package-def repository-type
๐Ÿ—บ๏ธ โœ”๏ธ valid-package-def scripts-type
๐Ÿ—บ๏ธ โœ”๏ธ valid-package-def valid-values-author
๐Ÿ—บ๏ธ โœ”๏ธ valid-package-def valid-values-engines
๐Ÿ—บ๏ธ โœ”๏ธ valid-package-def valid-values-license
๐Ÿ—บ๏ธ โœ”๏ธ valid-package-def valid-values-name-scope
๐Ÿ—บ๏ธ โœ”๏ธ valid-package-def valid-values-private
๐Ÿ—บ๏ธ โœ”๏ธ valid-package-def valid-values-publishConfig
๐Ÿ—บ๏ธ โœ”๏ธ valid-package-def version-type
๐Ÿงผ #51 prefer-scripts
๐Ÿงผ #51 require-author
๐Ÿงผ #51 require-bin
๐Ÿงผ #51 require-bundledDependencies
๐Ÿงผ #51 require-config
๐Ÿงผ #51 require-contributors
๐Ÿงผ #51 require-cpu
๐Ÿงผ #51 require-devDependencies
๐Ÿงผ #51 require-directories
๐Ÿงผ #51 require-files
๐Ÿงผ #51 require-funding
๐Ÿงผ #51 require-main
๐Ÿงผ #51 require-man
๐Ÿงผ #51 require-module
๐Ÿงผ #51 require-name
๐Ÿงผ #51 require-optionalDependencies
๐Ÿงผ #51 require-os
๐Ÿงผ #51 require-peerDependencies
๐Ÿงผ #51 require-preferGlobal
๐Ÿงผ #51 require-private
๐Ÿงผ #51 require-publishConfig
๐Ÿงผ #51 require-scripts
๐Ÿงผ #51 require-types
๐Ÿงผ #51 require-typings
๐Ÿงผ #51 require-version
๐Ÿงผ #51 require-version
๐Ÿงผ #51 โœ”๏ธ require-bugs
๐Ÿงผ #51 โœ”๏ธ require-dependencies
๐Ÿงผ #51 โœ”๏ธ require-description
๐Ÿงผ #51 โœ”๏ธ require-homepage
๐Ÿงผ #51 โœ”๏ธ require-keywords
๐Ÿงผ #51 โœ”๏ธ require-repository
๐Ÿงผ #51 ensure-volta-extends
๐Ÿงผ #51 require-engines require-engines
๐Ÿงผ #51 require-license โœ”๏ธ require-license
๐Ÿงผ #52 description-format
๐Ÿงผ โœ”๏ธ valid-name name-format
๐Ÿงผ โœ”๏ธ valid-version version-format
๐Ÿงผ โœ”๏ธ valid-repository-directory ensure-repository-directory require-repository-directory
๐Ÿงผ โœ”๏ธ order-properties prefer-property-order
๐Ÿ—œ๏ธ #54 no-restricted-dependencies
๐Ÿ—œ๏ธ #54 no-restricted-devDependencies
๐Ÿ—œ๏ธ #54 no-restricted-pre-release-dependencies
๐Ÿ—œ๏ธ #54 no-restricted-pre-release-devDependencies
๐Ÿ—œ๏ธ #54 no-branch-in-dependencies
๐Ÿ—œ๏ธ #54 restrict-ranges no-archive-dependencies
๐Ÿ—œ๏ธ #54 restrict-ranges no-archive-devDependencies
๐Ÿ—œ๏ธ #54 restrict-ranges no-caret-version-dependencies
๐Ÿ—œ๏ธ #54 restrict-ranges no-caret-version-devDependencies
๐Ÿ—œ๏ธ #54 restrict-ranges no-file-dependencies
๐Ÿ—œ๏ธ #54 restrict-ranges no-file-devDependencies
๐Ÿ—œ๏ธ #54 restrict-ranges no-git-dependencies
๐Ÿ—œ๏ธ #54 restrict-ranges no-git-devDependencies
๐Ÿ—œ๏ธ #54 restrict-ranges no-tilde-version-dependencies
๐Ÿ—œ๏ธ #54 restrict-ranges no-tilde-version-devDependencies
๐Ÿ—œ๏ธ #54 restrict-ranges prefer-no-version-zero-dependencies
๐Ÿ—œ๏ธ #54 restrict-ranges prefer-no-version-zero-devDependencies
๐Ÿ—œ๏ธ #54 restrict-ranges absolute-version no-absolute-version-dependencies
๐Ÿ—œ๏ธ #54 restrict-ranges absolute-version no-absolute-version-devDependencies
๐Ÿ—œ๏ธ #54 restrict-ranges absolute-version prefer-absolute-version-dependencies
๐Ÿ—œ๏ธ #54 restrict-ranges absolute-version prefer-absolute-version-devDependencies
๐Ÿ—œ๏ธ #54 restrict-ranges prefer-caret-range-version prefer-caret-version-dependencies
๐Ÿ—œ๏ธ #54 restrict-ranges prefer-caret-range-version prefer-caret-version-devDependencies
๐Ÿ—œ๏ธ #54 restrict-ranges prefer-tilde-range-version prefer-tilde-version-dependencies
๐Ÿ—œ๏ธ #54 restrict-ranges prefer-tilde-range-version prefer-tilde-version-devDependencies
๐Ÿ“ โœ”๏ธ sort-collections prefer-alphabetical-bundledDependencies
๐Ÿ“ โœ”๏ธ sort-collections prefer-alphabetical-dependencies
๐Ÿ“ โœ”๏ธ sort-collections prefer-alphabetical-devDependencies
๐Ÿ“ โœ”๏ธ sort-collections prefer-alphabetical-optionalDependencies
๐Ÿ“ โœ”๏ธ sort-collections prefer-alphabetical-peerDependencies
๐Ÿ“ โœ”๏ธ sort-collections prefer-alphabetical-scripts
๐Ÿ™… #51 prefer-no-contributors
๐Ÿ™… #51 prefer-no-dependencies
๐Ÿ™… #51 prefer-no-devDependencies
๐Ÿ™… #51 prefer-no-engineStrict
๐Ÿ™… #51 prefer-no-optionalDependencies
๐Ÿ™… #51 prefer-no-peerDependencies
๐Ÿงน (n/a) โœ”๏ธ

I also looked at:

JoshuaKGoldberg commented 7 months ago

As of merging #135, I believe all the recommended-preset-level rules from eslint-plugin-json-files and npm-package-json-lint are implemented here! ๐Ÿ™Œ

That means https://github.com/JoshuaKGoldberg/create-typescript-app/issues/839 is now unblocked.

KristjanESPERANTO commented 7 months ago

Just an idea: I'm using normalize-package-data in one project. It is not an ESLint package, but it makes some interesting things from which one might draw inspiration :slightly_smiling_face: Or would it be possible to create rules that use this package?

JoshuaKGoldberg commented 7 months ago

Ooh interesting, I hadn't seen that package. Looks useful!

There might be some use in standardizing files, yeah. #85 is another example of an equivalent package being mentioned as something we may want in this repo. I'd suggest the same thing for any new tool: file an issue with the suggested new rules.

Some initial thoughts looking through its README: it looks like a lot of the rules are around standardization and data validity checking. For standardization, I think it'd be reasonable to take any where the standardized version is objectively cleaner (e.g. #71). For validity, as long as it's a clearly more-valid form (e.g. #134). But I haven't put much thought into this - definitely interested in other points of view!

tommy-mitchell commented 7 months ago

Another one is pkg-ok, which for example ensures that files referenced in package.json exist.

JoshuaKGoldberg commented 5 months ago

Ah sorry I dropped responding to pkg-ok note. It's a nice idea but the tricky thing is that a lot of packages refer to files that don't exist during development. I'm going to hold off adding that to this table - but if you want to talk about adding it in, I'd be interested in seeing a separate issue. Thanks!