Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork2.8k
feat(eslint-plugin): [switch-exhaustiveness-check] add support for "no default" comment#10218
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 ourterms of service andprivacy statement. We’ll occasionally send you account related emails.
Already on GitHub?Sign in to your account
Uh oh!
There was an error while loading.Please reload this page.
Conversation
Thanks for the PR,@developer-bandi! typescript-eslint is a 100% community driven project, and we are incredibly grateful that you are contributing to that community. The core maintainers work on this in their personal time, so please understand that it may not be possible for them to review your work immediately. Thanks again! 🙏Please, if you or your company is finding typescript-eslint valuable, help us sustain the project by sponsoring it transparently onhttps://opencollective.com/typescript-eslint. |
netlifybot commentedOct 27, 2024 • edited
Loading Uh oh!
There was an error while loading.Please reload this page.
edited
Uh oh!
There was an error while loading.Please reload this page.
✅ Deploy Preview fortypescript-eslint ready!
To edit notification comments on pull requests, go to yourNetlify site configuration. |
nx-cloudbot commentedOct 27, 2024 • edited
Loading Uh oh!
There was an error while loading.Please reload this page.
edited
Uh oh!
There was an error while loading.Please reload this page.
codecovbot commentedOct 27, 2024 • edited
Loading Uh oh!
There was an error while loading.Please reload this page.
edited
Uh oh!
There was an error while loading.Please reload this page.
Codecov ReportAll modified and coverable lines are covered by tests ✅
Additional details and impacted files@@ Coverage Diff @@## main #10218 +/- ##======================================= Coverage 86.77% 86.78% ======================================= Files 444 444 Lines 15320 15328 +8 Branches 4461 4465 +4 =======================================+ Hits 13294 13302 +8 Misses 1672 1672 Partials 354 354
Flags with carried forward coverage won't be shown.Click here to find out more.
|
Uh oh!
There was an error while loading.Please reload this page.
I will resolve the conflict by merging the changes to the considerDefaultExhaustiveForUnions option currently reflected in the main branch and request a review again. |
…eslint into feature/switch-exhaustiveness-check-nodefaultcomment
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 took a quick initial pass and think there should be an option added to maintain parity with ESLint core. I can take a deeper look once that's in (or if I'm wrong about that). Thanks!
Uh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.
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.
A few necessities aren't filled in: docs and tests for the option. If you fill those in we can review more deeply. Thanks!
Uh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.
packages/eslint-plugin/tests/rules/switch-exhaustiveness-check.test.ts OutdatedShow resolvedHide resolved
Uh oh!
There was an error while loading.Please reload this page.
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.
Progress! 🚀
I'm not sure we want theno default
as a default - so you might want to hold off changes until the discussion there resolves.
packages/eslint-plugin/docs/rules/switch-exhaustiveness-check.mdx OutdatedShow resolvedHide resolved
Uh oh!
There was an error while loading.Please reload this page.
packages/eslint-plugin/docs/rules/switch-exhaustiveness-check.mdx OutdatedShow resolvedHide resolved
Uh oh!
There was an error while loading.Please reload this page.
packages/eslint-plugin/docs/rules/switch-exhaustiveness-check.mdx OutdatedShow resolvedHide resolved
Uh oh!
There was an error while loading.Please reload this page.
packages/eslint-plugin/docs/rules/switch-exhaustiveness-check.mdx OutdatedShow resolvedHide resolved
Uh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.
…eslint into feature/switch-exhaustiveness-check-nodefaultcomment
6e0b96c
toe8ed38f
Compare@@ -14,9 +14,11 @@ import { | |||
requiresQuoting, | |||
} from '../util'; | |||
const DEFAULT_COMMENT_PATTERN = /^no default$/iu; |
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.
If there's a default value, please specify it indefaultOptions
.
developer-bandiDec 7, 2024 • edited
Loading Uh oh!
There was an error while loading.Please reload this page.
edited
Uh oh!
There was an error while loading.Please reload this page.
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.
�In order to put a default value in defaultOptions, the defaultCaseCommentPattern option must be able to receive a flag. Therefore, this option should be in the form of an array, with an expression at the first index and a flag at the second index.
defaultCaseCommentPattern:["no default", "iu"]
Previously, the default value was treated as a separate variable because of equivalence with eslint rules. Would there be any problem with implementing it like this?
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.
As much as I would love to keep things to thedefaultOptions
plumbing, I don't think this is doable. I think this PR is fine as-is.
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.
LGTM, thanks for all the iteration on this! Your hard work is paying off 🔥
packages/eslint-plugin/docs/rules/switch-exhaustiveness-check.mdx OutdatedShow resolvedHide resolved
Uh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.
47f1ab3
intotypescript-eslint:mainUh oh!
There was an error while loading.Please reload this page.
##### [v8.18.0](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8180-2024-12-09)##### 🚀 Features- **eslint-plugin:** \[switch-exhaustiveness-check] add support for "no default" comment ([#10218](typescript-eslint/typescript-eslint#10218))- **eslint-plugin:** \[no-deprecated] report on super call of deprecated constructor ([#10397](typescript-eslint/typescript-eslint#10397))##### 🩹 Fixes- **eslint-plugin:** \[use-unknown-in-catch-callback-variable] only flag function literals ([#10436](typescript-eslint/typescript-eslint#10436))- **eslint-plugin:** \[no-base-to-string] handle more robustly when multiple `toString()` declarations are present for a type ([#10432](typescript-eslint/typescript-eslint#10432))- **eslint-plugin:** \[no-deprecated] check if a JSX attribute is deprecated ([#10374](typescript-eslint/typescript-eslint#10374))- typescript peer dependency ([#10373](typescript-eslint/typescript-eslint#10373))##### ❤️ Thank You- Kim Sang Du [@developer-bandi](https://github.com/developer-bandi)- Kirk Waiblinger [@kirkwaiblinger](https://github.com/kirkwaiblinger)- mdm317- rtrittoYou can read about our [versioning strategy](https://main--typescript-eslint.netlify.app/users/versioning) and [releases](https://main--typescript-eslint.netlify.app/users/releases) on our website.
| datasource | package | from | to || ---------- | -------------------------------- | ------ | ------ || npm | @typescript-eslint/eslint-plugin | 8.17.0 | 8.18.0 || npm | @typescript-eslint/parser | 8.17.0 | 8.18.0 |## [v8.18.0](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8180-2024-12-09)##### 🚀 Features- **eslint-plugin:** \[switch-exhaustiveness-check] add support for "no default" comment ([#10218](typescript-eslint/typescript-eslint#10218))- **eslint-plugin:** \[no-deprecated] report on super call of deprecated constructor ([#10397](typescript-eslint/typescript-eslint#10397))##### 🩹 Fixes- **eslint-plugin:** \[use-unknown-in-catch-callback-variable] only flag function literals ([#10436](typescript-eslint/typescript-eslint#10436))- **eslint-plugin:** \[no-base-to-string] handle more robustly when multiple `toString()` declarations are present for a type ([#10432](typescript-eslint/typescript-eslint#10432))- **eslint-plugin:** \[no-deprecated] check if a JSX attribute is deprecated ([#10374](typescript-eslint/typescript-eslint#10374))- typescript peer dependency ([#10373](typescript-eslint/typescript-eslint#10373))##### ❤️ Thank You- Kim Sang Du [@developer-bandi](https://github.com/developer-bandi)- Kirk Waiblinger [@kirkwaiblinger](https://github.com/kirkwaiblinger)- mdm317- rtrittoYou can read about our [versioning strategy](https://main--typescript-eslint.netlify.app/users/versioning) and [releases](https://main--typescript-eslint.netlify.app/users/releases) on our website.
| datasource | package | from | to || ---------- | -------------------------------- | ------ | ------ || npm | @typescript-eslint/eslint-plugin | 8.17.0 | 8.18.0 || npm | @typescript-eslint/parser | 8.17.0 | 8.18.0 |## [v8.18.0](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8180-2024-12-09)##### 🚀 Features- **eslint-plugin:** \[switch-exhaustiveness-check] add support for "no default" comment ([#10218](typescript-eslint/typescript-eslint#10218))- **eslint-plugin:** \[no-deprecated] report on super call of deprecated constructor ([#10397](typescript-eslint/typescript-eslint#10397))##### 🩹 Fixes- **eslint-plugin:** \[use-unknown-in-catch-callback-variable] only flag function literals ([#10436](typescript-eslint/typescript-eslint#10436))- **eslint-plugin:** \[no-base-to-string] handle more robustly when multiple `toString()` declarations are present for a type ([#10432](typescript-eslint/typescript-eslint#10432))- **eslint-plugin:** \[no-deprecated] check if a JSX attribute is deprecated ([#10374](typescript-eslint/typescript-eslint#10374))- typescript peer dependency ([#10373](typescript-eslint/typescript-eslint#10373))##### ❤️ Thank You- Kim Sang Du [@developer-bandi](https://github.com/developer-bandi)- Kirk Waiblinger [@kirkwaiblinger](https://github.com/kirkwaiblinger)- mdm317- rtrittoYou can read about our [versioning strategy](https://main--typescript-eslint.netlify.app/users/versioning) and [releases](https://main--typescript-eslint.netlify.app/users/releases) on our website.
PR Checklist
Overview
similar to eslint's default-case rule, i modified to have the same effect as writing a default clause by specifying the
no default
comment. In the allowDefaultCaseForExhaustiveSwitch option, if no default is specified, an error may occur in the annotation in some cases, so it is necessary to review whether it is okay.one additional work is left The option considerDefaultExhaustiveForUnions in PR#9954 is in preparation for merging, so you will need to write a test case for that option once this PR is merged.