-
-
Notifications
You must be signed in to change notification settings - Fork 4.8k
fix: add @eslint/core
, @types/estree
, & @types/json-schema
deps
#18938
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
✅ Deploy Preview for docs-eslint canceled.
|
938dd39
to
8c19eef
Compare
knip.jsonc
Outdated
// Optional peer dependencies used inside types | ||
"@eslint/core", | ||
"@types/estree", | ||
"@types/json-schema" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I actually agree with knip that these should not be optional peerDependencies
. Optional peers are not installed by default by npm install
, they only instruct npm to raise an error if another package tries to install those dependencies in a version that is out of the specified range. I'm not sure this is even desirable in this case.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
These should be optional because only a subset of users who want types would be using them.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I agree with @fasttime, I think @eslint/core
, @types/estree
and @types/json-schema
should just be dependencies
. It especially makes sense for @types/estree
and @types/json-schema
since they were previously dependencies
of @types/eslint
which has now been merged with eslint
.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
For users it would be easier if ESLint depended on those packages as regular dependencies, but if we are going to ask them to install the packages manually in the docs, then we don't need to add anything to our own package.json
. We could also include those packages as optional peer dependencies with version "*"
so that they don't cause version conflicts like we did for jiti
.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm running ESLint v9.11.0, and I'm having TS related issues because I need to manually install @eslint/core
. I think it'll make more sense if the packages we are directly deriving types from to be dependencies
. Since we can't really throw a runtime error to let them know to install them like we did with jiti
.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Peer dependencies are automatically installed with npm install
. Is there a reason we'd prefer dependencies over that?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@nzakas Peer dependencies can clash between different modules and are harder to get updated through eg. Renovate and Dependabot – only reason to add these as peer dependencies is if they are considered too heavy to ship with ESLint by standard, making it an optional opt in for those who want to use types
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We can make these direct dependencies the only downside is that it would increase some bundle size, but I think it should be fine because in most cases ESlint would be installed as a dev dependency only. Similarly, packages like webpack and webpack-dev-serve have also mentioned @types/*
directly in dependencies.
Suggestion: Change this: Lines 28 to 30 in 2738322
To: // @ts-ignore
import * as ESTree from "estree";
// @ts-ignore
import { Language } from "@eslint/core";
// @ts-ignore
import { JSONSchema4 } from "json-schema"; That way the types will be included if the types are available and else it will gracefully degrade and still work. |
@@ -511,14 +511,14 @@ You need to enable this feature through the `unstable_ts_config` feature flag: | |||
npx eslint --flag unstable_ts_config | |||
``` | |||
|
|||
For Deno and Bun, TypeScript configuration files are natively supported; for Node.js, you must install the optional dev dependency [`jiti`](https://github.com/unjs/jiti) in your project (this dependency is not automatically installed by ESLint): | |||
For Deno and Bun, TypeScript configuration files are natively supported; for Node.js, you must install the following optional dev dependencies in your project (these dependencies are not automatically installed by ESLint): |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
npm automatically installs peer dependencies. If we're adding these packages as peer dependencies, then I don't think we need to ask people to install them here?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The suggestion in this PR is to add them as optionals:
"peerDependenciesMeta": {
"jiti": {
"optional": true
},
"@types/estree": {
"optional": true
},
"@eslint/core": {
"optional": true
},
"@types/json-schema": {
"optional": true
}
},
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
So that means npm wouldn't install them automatically?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
And then wouldn't we also need to install these on Deno and Bun?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@nzakas Exactly, only way to make truly optional dependencies, unlike optionalDependencies
From npm docs:
allows peer dependencies to be marked as optional. Npm will not automatically install optional peer dependencies
Whereas optionalDependencies
are only through npm install --omit=optional
or when:
you would like npm to proceed if it cannot be found or fails to install
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
And then wouldn't we also need to install these on Deno and Bun?
Yes, as mentioned by #18938 (comment) this is not tied to TypeScript config files but rather to everyone that run type checks that relies on eslint
– which can happen on js-files, ts-files and possibly also eg. VSCode IntelliSense
knip.jsonc
Outdated
// Optional peer dependencies used inside types | ||
"@eslint/core", | ||
"@types/estree", | ||
"@types/json-schema" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Peer dependencies are automatically installed with npm install
. Is there a reason we'd prefer dependencies over that?
I think asking people to manually install multiple packages like this is a lousy experience. They'll need to do it not just to use the TypeScript config files but also if they're building on top of the API. So, I think I agree with @aryaemami59 that we should add these as dependencies to avoid this mess. |
Yes, I'll update the PR and add them to dependencies. #18938 (comment) |
peerDependencies
& peerDependenciesMeta
fields@eslint/core
, @types/estree
, & @types/json-schema
as dependencies
@eslint/core
, @types/estree
, & @types/json-schema
as dependencies@eslint/core
, @types/estree
, & @types/json-schema
deps
8ba2392
to
88f4bac
Compare
Can we also add an integration test for This can be added to the |
Looks like the integration test is failing. |
👍 from me on adding as A nice side effect of enforcing types packages be installed is that everyone who uses an IDE with TypeScript enabled will get nice autocompletions even in their JS files. Note that this is different from the situation in eslint/rewrite#104 (comment), I think. Over in |
The one alternative would be to add them as dev dependencies and use a bundler to bundle the needed types into the final type file – but that adds a needless build step |
@nzakas yes, npm install is failing I think that's because |
Yes, that's because of the old types, I'll update it once the patch version is released. |
This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [@eslint/js](https://eslint.org) ([source](https://github.com/eslint/eslint/tree/HEAD/packages/js)) | devDependencies | minor | [`9.10.0` -> `9.13.0`](https://renovatebot.com/diffs/npm/@eslint%2fjs/9.10.0/9.13.0) | --- ### Release Notes <details> <summary>eslint/eslint (@​eslint/js)</summary> ### [`v9.13.0`](https://github.com/eslint/eslint/releases/tag/v9.13.0) [Compare Source](eslint/eslint@v9.12.0...v9.13.0) #### Features - [`381c32b`](eslint/eslint@381c32b) feat: Allow languages to provide `defaultLanguageOptions` ([#​19003](eslint/eslint#19003)) (Milos Djermanovic) - [`bf723bd`](eslint/eslint@bf723bd) feat: Improve eslintrc warning message ([#​19023](eslint/eslint#19023)) (Milos Djermanovic) - [`1def4cd`](eslint/eslint@1def4cd) feat: drop support for jiti v1.21 ([#​18996](eslint/eslint#18996)) (Francesco Trotta) - [`f879be2`](eslint/eslint@f879be2) feat: export `ESLint.defaultConfig` ([#​18983](eslint/eslint#18983)) (Nitin Kumar) #### Bug Fixes - [`78836d4`](eslint/eslint@78836d4) fix: update the `complexity` rule type ([#​19027](eslint/eslint#19027)) (Nitin Kumar) - [`064c8b6`](eslint/eslint@064c8b6) fix: update rule types ([#​18925](eslint/eslint#18925)) (Nitin Kumar) #### Documentation - [`abdbfa8`](eslint/eslint@abdbfa8) docs: mark `LintMessage#nodeType` as deprecated ([#​19019](eslint/eslint#19019)) (Nitin Kumar) - [`19e68d3`](eslint/eslint@19e68d3) docs: update deprecated rules type definitions ([#​19018](eslint/eslint#19018)) (Nitin Kumar) - [`7dd402d`](eslint/eslint@7dd402d) docs: Update examples of passing multiple values to a CLI option ([#​19006](eslint/eslint#19006)) (Milos Djermanovic) - [`5dcbc51`](eslint/eslint@5dcbc51) docs: Add example with side-effect imports to no-restricted-imports ([#​18997](eslint/eslint#18997)) (Milos Djermanovic) - [`1ee87ca`](eslint/eslint@1ee87ca) docs: Update README (GitHub Actions Bot) - [`2c3dbdc`](eslint/eslint@2c3dbdc) docs: Use prerendered sponsors for README ([#​18988](eslint/eslint#18988)) (Milos Djermanovic) #### Chores - [`68d2d9d`](eslint/eslint@68d2d9d) chore: upgrade to `@eslint/js@9.13.0` and `@eslint/core@^0.7.0` ([#​19034](eslint/eslint#19034)) (Francesco Trotta) - [`2211f0a`](eslint/eslint@2211f0a) chore: package.json update for [@​eslint/js](https://github.com/eslint/js) release (Jenkins) - [`c7abaef`](eslint/eslint@c7abaef) perf: using Node.js compile cache ([#​19012](eslint/eslint#19012)) (唯然) - [`1d7c077`](eslint/eslint@1d7c077) chore: add pkg.type "commonjs" ([#​19011](eslint/eslint#19011)) (唯然) - [`468e3bd`](eslint/eslint@468e3bd) test: fix `ESLint` tests ([#​19021](eslint/eslint#19021)) (Francesco Trotta) - [`ed4635f`](eslint/eslint@ed4635f) ci: upgrade knip@5.32.0 ([#​18992](eslint/eslint#18992)) (Milos Djermanovic) - [`efad767`](eslint/eslint@efad767) chore: remove unused ignore dependency ([#​18993](eslint/eslint#18993)) (Amaresh S M) ### [`v9.12.0`](https://github.com/eslint/eslint/releases/tag/v9.12.0) [Compare Source](eslint/eslint@v9.11.1...v9.12.0) #### Features - [`5a6a053`](eslint/eslint@5a6a053) feat: update to `jiti` v2 ([#​18954](eslint/eslint#18954)) (Arya Emami) - [`17a07fb`](eslint/eslint@17a07fb) feat: Hooks for test cases (RuleTester) ([#​18771](eslint/eslint#18771)) (Anna Bocharova) - [`2ff0e51`](eslint/eslint@2ff0e51) feat: Implement alternate config lookup ([#​18742](eslint/eslint#18742)) (Nicholas C. Zakas) - [`2d17453`](eslint/eslint@2d17453) feat: Implement modified cyclomatic complexity ([#​18896](eslint/eslint#18896)) (Dmitry Pashkevich) #### Bug Fixes - [`ea380ca`](eslint/eslint@ea380ca) fix: Upgrade retry to avoid EMFILE errors ([#​18986](eslint/eslint#18986)) (Nicholas C. Zakas) - [`fdd6319`](eslint/eslint@fdd6319) fix: Issues with type definitions ([#​18940](eslint/eslint#18940)) (Arya Emami) #### Documentation - [`ecbd522`](eslint/eslint@ecbd522) docs: Mention code explorer ([#​18978](eslint/eslint#18978)) (Nicholas C. Zakas) - [`7ea4ecc`](eslint/eslint@7ea4ecc) docs: Clarifying the Use of Meta Objects ([#​18697](eslint/eslint#18697)) (Amaresh S M) - [`d3e4b2e`](eslint/eslint@d3e4b2e) docs: Clarify how to exclude `.js` files ([#​18976](eslint/eslint#18976)) (Milos Djermanovic) - [`57232ff`](eslint/eslint@57232ff) docs: Mention plugin-kit in language docs ([#​18973](eslint/eslint#18973)) (Nicholas C. Zakas) - [`b80ed00`](eslint/eslint@b80ed00) docs: Update README (GitHub Actions Bot) - [`cb69ab3`](eslint/eslint@cb69ab3) docs: Update README (GitHub Actions Bot) - [`7fb0d95`](eslint/eslint@7fb0d95) docs: Update README (GitHub Actions Bot) - [`493348a`](eslint/eslint@493348a) docs: Update README (GitHub Actions Bot) - [`87a582c`](eslint/eslint@87a582c) docs: fix typo in `id-match` rule ([#​18944](eslint/eslint#18944)) (Jay) #### Chores - [`555aafd`](eslint/eslint@555aafd) chore: upgrade to `@eslint/js@9.12.0` ([#​18987](eslint/eslint#18987)) (Francesco Trotta) - [`873ae60`](eslint/eslint@873ae60) chore: package.json update for [@​eslint/js](https://github.com/eslint/js) release (Jenkins) - [`d0a5414`](eslint/eslint@d0a5414) refactor: replace strip-ansi with native module ([#​18982](eslint/eslint#18982)) (Cristopher) - [`b827029`](eslint/eslint@b827029) chore: Enable JSON5 linting ([#​18979](eslint/eslint#18979)) (Milos Djermanovic) - [`8f55ca2`](eslint/eslint@8f55ca2) chore: Upgrade espree, eslint-visitor-keys, eslint-scope ([#​18962](eslint/eslint#18962)) (Nicholas C. Zakas) - [`c1a2725`](eslint/eslint@c1a2725) chore: update dependency mocha to ^10.7.3 ([#​18945](eslint/eslint#18945)) (Milos Djermanovic) ### [`v9.11.1`](https://github.com/eslint/eslint/releases/tag/v9.11.1) [Compare Source](eslint/eslint@v9.11.0...v9.11.1) #### Bug Fixes - [`20fd916`](eslint/eslint@20fd916) fix: add `@eslint/core`, `@types/estree`, & `@types/json-schema` deps ([#​18938](eslint/eslint#18938)) (Nitin Kumar) - [`2738322`](eslint/eslint@2738322) fix: add missing types for `require-atomic-updates` rule ([#​18937](eslint/eslint#18937)) (Kristóf Poduszló) - [`d71ff30`](eslint/eslint@d71ff30) fix: add missing types for `object-shorthand` rule ([#​18935](eslint/eslint#18935)) (Kristóf Poduszló) - [`561cadc`](eslint/eslint@561cadc) fix: add missing types for `no-unsafe-negation` rule ([#​18932](eslint/eslint#18932)) (Kristóf Poduszló) - [`8843656`](eslint/eslint@8843656) fix: add missing types for `no-underscore-dangle` rule ([#​18931](eslint/eslint#18931)) (Kristóf Poduszló) - [`92cde5c`](eslint/eslint@92cde5c) fix: add missing types for `no-shadow` rule ([#​18930](eslint/eslint#18930)) (Kristóf Poduszló) - [`b3cbe11`](eslint/eslint@b3cbe11) fix: add missing types for `no-sequences` rule ([#​18929](eslint/eslint#18929)) (Kristóf Poduszló) - [`976f77f`](eslint/eslint@976f77f) fix: add missing types for `no-unused-expressions` rule ([#​18933](eslint/eslint#18933)) (Kristóf Poduszló) #### Documentation - [`3eff709`](eslint/eslint@3eff709) docs: replace deprecated `Linter.FlatConfig` type with `Linter.Config` ([#​18941](eslint/eslint#18941)) (Carlos Meira) #### Chores - [`df4a859`](eslint/eslint@df4a859) chore: upgrade [@​eslint/js](https://github.com/eslint/js)[@​9](https://github.com/9).11.1 ([#​18943](eslint/eslint#18943)) (Milos Djermanovic) - [`36d8095`](eslint/eslint@36d8095) chore: package.json update for [@​eslint/js](https://github.com/eslint/js) release (Jenkins) ### [`v9.11.0`](https://github.com/eslint/eslint/releases/tag/v9.11.0) [Compare Source](eslint/eslint@v9.10.0...v9.11.0) #### Features - [`ec30c73`](eslint/eslint@ec30c73) feat: add "eslint/universal" to export `Linter` ([#​18883](eslint/eslint#18883)) (唯然) - [`c591da6`](eslint/eslint@c591da6) feat: Add language to types ([#​18917](eslint/eslint#18917)) (Nicholas C. Zakas) - [`492eb8f`](eslint/eslint@492eb8f) feat: limit the name given to `ImportSpecifier` in `id-length` ([#​18861](eslint/eslint#18861)) (Tanuj Kanti) - [`19c6856`](eslint/eslint@19c6856) feat: Add `no-useless-constructor` suggestion ([#​18799](eslint/eslint#18799)) (Jordan Thomson) - [`a48f8c2`](eslint/eslint@a48f8c2) feat: add type `FormatterFunction`, update `LoadedFormatter` ([#​18872](eslint/eslint#18872)) (Francesco Trotta) #### Bug Fixes - [`5e5f39b`](eslint/eslint@5e5f39b) fix: add missing types for `no-restricted-exports` rule ([#​18914](eslint/eslint#18914)) (Kristóf Poduszló) - [`8f630eb`](eslint/eslint@8f630eb) fix: add missing types for `no-param-reassign` options ([#​18906](eslint/eslint#18906)) (Kristóf Poduszló) - [`d715781`](eslint/eslint@d715781) fix: add missing types for `no-extra-boolean-cast` options ([#​18902](eslint/eslint#18902)) (Kristóf Poduszló) - [`2de5742`](eslint/eslint@2de5742) fix: add missing types for `no-misleading-character-class` options ([#​18905](eslint/eslint#18905)) (Kristóf Poduszló) - [`c153084`](eslint/eslint@c153084) fix: add missing types for `no-implicit-coercion` options ([#​18903](eslint/eslint#18903)) (Kristóf Poduszló) - [`fa11b2e`](eslint/eslint@fa11b2e) fix: add missing types for `no-empty-function` options ([#​18901](eslint/eslint#18901)) (Kristóf Poduszló) - [`a0deed1`](eslint/eslint@a0deed1) fix: add missing types for `camelcase` options ([#​18897](eslint/eslint#18897)) (Kristóf Poduszló) #### Documentation - [`e4e5709`](eslint/eslint@e4e5709) docs: correct `prefer-object-has-own` type definition comment ([#​18924](eslint/eslint#18924)) (Nitin Kumar) - [`91cbd18`](eslint/eslint@91cbd18) docs: add unicode abbreviations in no-irregular-whitespace rule ([#​18894](eslint/eslint#18894)) (Alix Royere) - [`59cfc0f`](eslint/eslint@59cfc0f) docs: clarify `resultsMeta` in `LoadedFormatter` type ([#​18881](eslint/eslint#18881)) (Milos Djermanovic) - [`adcc50d`](eslint/eslint@adcc50d) docs: Update README (GitHub Actions Bot) - [`4edac1a`](eslint/eslint@4edac1a) docs: Update README (GitHub Actions Bot) #### Build Related - [`959d360`](eslint/eslint@959d360) build: Support updates to previous major versions ([#​18871](eslint/eslint#18871)) (Milos Djermanovic) #### Chores - [`ca21a64`](eslint/eslint@ca21a64) chore: upgrade [@​eslint/js](https://github.com/eslint/js)[@​9](https://github.com/9).11.0 ([#​18927](eslint/eslint#18927)) (Milos Djermanovic) - [`a10f90a`](eslint/eslint@a10f90a) chore: package.json update for [@​eslint/js](https://github.com/eslint/js) release (Jenkins) - [`e4e02cc`](eslint/eslint@e4e02cc) refactor: Extract processor logic into ProcessorService ([#​18818](eslint/eslint#18818)) (Nicholas C. Zakas) - [`6d4484d`](eslint/eslint@6d4484d) chore: updates for v8.57.1 release (Jenkins) - [`71f37c5`](eslint/eslint@71f37c5) refactor: use optional chaining when validating config rules ([#​18893](eslint/eslint#18893)) (lucasrmendonca) - [`2c2805f`](eslint/eslint@2c2805f) chore: Add PR note to all templates ([#​18892](eslint/eslint#18892)) (Nicholas C. Zakas) - [`7b852ce`](eslint/eslint@7b852ce) refactor: use `Directive` class from `@eslint/plugin-kit` ([#​18884](eslint/eslint#18884)) (Milos Djermanovic) - [`d594ddd`](eslint/eslint@d594ddd) chore: update dependency [@​eslint/core](https://github.com/eslint/core) to ^0.6.0 ([#​18863](eslint/eslint#18863)) (renovate\[bot]) - [`78b2421`](eslint/eslint@78b2421) chore: Update change.yml ([#​18882](eslint/eslint#18882)) (Nicholas C. Zakas) - [`a416f0a`](eslint/eslint@a416f0a) chore: enable `$ExpectType` comments in .ts files ([#​18869](eslint/eslint#18869)) (Francesco Trotta) </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOC44MC4wIiwidXBkYXRlZEluVmVyIjoiMzguODAuMCIsInRhcmdldEJyYW5jaCI6ImRldmVsb3AiLCJsYWJlbHMiOlsidHlwZS9kZXBlbmRlbmNpZXMiXX0=--> Reviewed-on: https://git.vylpes.xyz/RabbitLabs/random-bunny/pulls/231 Reviewed-by: Vylpes <ethan@vylpes.com> Co-authored-by: Renovate Bot <renovate@vylpes.com> Co-committed-by: Renovate Bot <renovate@vylpes.com>
Prerequisites checklist
What is the purpose of this pull request? (put an "X" next to an item)
[x] Documentation update
[x] Bug fix (template)
[ ] New rule (template)
[ ] Changes an existing rule (template)
[ ] Add autofix to a rule
[ ] Add a CLI option
[ ] Add something to the core
[ ] Other, please explain:
What changes did you make? (Give an overview)
Fix #18936
Mention
@types/estree
,@eslint/core
, &@types/json-schema
as optional peer dependencies and mention to install them in the docsIs there anything you'd like reviewers to focus on?
No