-
-
Notifications
You must be signed in to change notification settings - Fork 4.5k
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
feat: add rule logical-assignment-operators #16102
feat: add rule logical-assignment-operators #16102
Conversation
|
✅ Deploy Preview for docs-eslint canceled.
|
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.
Thanks for doing this! I left a few small comments but otherwise looks really good. Would like @mdjermanovic to review before merging.
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.
Very nice work! I left a few comments about things that should be fixed in the code that I noticed on the first pass.
- State the concept of the rule clearer - Increase the heading level for options
Thanks for the reviews. I pushed the suggested fixes / features as separate commits for easier reviewing.
|
Co-authored-by: Milos Djermanovic <milos.djermanovic@gmail.com>
@DMartens it seems that #16102 (comment) hasn't been addressed. For example, the following /* eslint logical-assignment-operators: ["error", "always", { enforceForIfStatements: true }] */
(a) => {
if (a.b) a.b = foo;
} |
@mdjermanovic I fixed this locally. But I have two questions regarding when to fix/suggest the fix:
|
This is different from
I agree, it seems that these cases can be safely autofixed. |
@DMartens are you still working on this? |
…p correct with incorrect sections
…e assignment pattern
Thanks for the thorough review. All the suggestions should be implemented as separate commits. |
Co-authored-by: Milos Djermanovic <milos.djermanovic@gmail.com>
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 small suggestions, then LGTM.
…tions for test case
…ing for a single property access
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! Great work.
I'll leave this open for a few days in case someone else wants to review it before merging.
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.
Great work on this. Thank you for contributing ⭐
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
This rule is a great addition, but it's a shame that it didn't end up being named |
@amitbeck thanks for the input! We considered your suggestion but decided on the |
@mdjermanovic Good to know, thanks for the clarification. It still bothers me that the other rule's name is misaligned with this one but nothing can truly be perfect 🥲 |
This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [eslint](https://eslint.org) ([source](https://github.com/eslint/eslint)) | devDependencies | minor | [`8.23.1` -> `8.24.0`](https://renovatebot.com/diffs/npm/eslint/8.23.1/8.24.0) | --- ### Release Notes <details> <summary>eslint/eslint</summary> ### [`v8.24.0`](https://github.com/eslint/eslint/releases/tag/v8.24.0) [Compare Source](eslint/eslint@v8.23.1...v8.24.0) #### Features - [`1729f9e`](eslint/eslint@1729f9e) feat: account for `sourceType: "commonjs"` in the strict rule ([#​16308](eslint/eslint#16308)) (Milos Djermanovic) - [`b0d72c9`](eslint/eslint@b0d72c9) feat: add rule logical-assignment-operators ([#​16102](eslint/eslint#16102)) (fnx) - [`f02bcd9`](eslint/eslint@f02bcd9) feat: `array-callback-return` support `findLast` and `findLastIndex` ([#​16314](eslint/eslint#16314)) (Sosuke Suzuki) #### Documentation - [`2c152ff`](eslint/eslint@2c152ff) docs: note false positive `Object.getOwnPropertyNames` in prefer-reflect ([#​16317](eslint/eslint#16317)) (AnnAngela) - [`bf7bd88`](eslint/eslint@bf7bd88) docs: fix warn severity description for new config files ([#​16324](eslint/eslint#16324)) (Nitin Kumar) - [`8cc0bbe`](eslint/eslint@8cc0bbe) docs: use more clean link syntax ([#​16309](eslint/eslint#16309)) (Percy Ma) - [`6ba269e`](eslint/eslint@6ba269e) docs: fix typo ([#​16288](eslint/eslint#16288)) (jjangga0214) #### Chores - [`131e646`](eslint/eslint@131e646) chore: Upgrade [@​humanwhocodes/config-array](https://github.com/humanwhocodes/config-array) for perf ([#​16339](eslint/eslint#16339)) (Nicholas C. Zakas) - [`504fe59`](eslint/eslint@504fe59) perf: switch from object spread to `Object.assign` when merging globals ([#​16311](eslint/eslint#16311)) (Milos Djermanovic) </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, click this checkbox. --- This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzMi4yMDIuMSIsInVwZGF0ZWRJblZlciI6IjMyLjIwMi4zIn0=--> Co-authored-by: cabr2-bot <cabr2.help@gmail.com> Reviewed-on: https://codeberg.org/Calciumdibromid/CaBr2/pulls/1560 Reviewed-by: Epsilon_02 <epsilon_02@noreply.codeberg.org> Co-authored-by: Calciumdibromid Bot <cabr2_bot@noreply.codeberg.org> Co-committed-by: Calciumdibromid Bot <cabr2_bot@noreply.codeberg.org>
@DMartens we'd like to pay you for this contribution, but I couldn't find an email address to contact you at. Can you please email contact (at) eslint (dot) org so we can give you instructions? Thanks! |
Fixes #13689
Prerequisites checklist
What is the purpose of this pull request? (put an "X" next to an item)
[ ] Documentation update
[ ] Bug fix (template)
[x] 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:
Fixes #13689
What changes did you make? (Give an overview)
Added the rule according to the proposal
Compared to the proposal the if test condition also checks for
!!value
andBoolean(value)
and the check if the problem is fixable also checks for with blocks.I used the existing
operator-shorthand
as a template for the documentation and wording of the messages.Is there anything you'd like reviewers to focus on?
The most important thing is more fix scenarios. I tried to cover all I could think of (comments, parenthesis, whether it should be autofixed).
Also the logic of "isUndefined" is duplicated as ast-utils only has a "isNullOrUndefined", maybe this should be moved to ast-utils.