Skip to content
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

Update: Check member expressions with `this` in operator-assignment #12495

merged 1 commit into from Nov 22, 2019


Copy link

mdjermanovic commented Oct 27, 2019

What is the purpose of this pull request? (put an "X" next to item)

[X] Bug fix
[X] Changes an existing rule

I believe this is a bug fix, but it produces more warnings.

This PR fixes two things in the operator-assignment rule:

  • The default always option was ignoring this member expressions, such as this.x = this.x + y.
  • The never option was reporting this member expressions, but didn't auto-fix in some cases where it seems to be safe, such as this.x += y.

What rule do you want to change?


Does this change cause the rule to produce more or fewer warnings?


How will the change be implemented? (New option, new default behavior, etc.)?

new default behavior

Please provide some example code that this change will affect:

/* eslint operator-assignment: ["error", "always"] */ = + bar

What does the rule currently do for this code?

No errors

What will the rule do after it's changed?

Error and autofix to:

/* eslint operator-assignment: ["error", "always"] */ += bar

What changes did you make? (Give an overview)

Account for ThisExpression in the function that compares two expressions. Also in the function that determines whether the autofix is safe.

Is there anything you'd like reviewers to focus on?

All added tests in valid were valid before, those are just regression tests.

The following tests with the never option had the same behavior (which is an error without autofix) before this PR, and that isn't changed. += baz
this[foo] >>>= bar

The following test with the never option was already an error, but wasn't being auto-fixed. That's changed now. += bar

The following tests with the default always options are new warnings: = + bar = + baz
this[foo] = this[foo] + bar
this[5] = this[5] / foo

Can this be treated as a semver-minor bug fix that produces more warnings? There was a similar case in #12279.

@eslint eslint bot added the triage label Oct 27, 2019
@kaicataldo kaicataldo added accepted and removed evaluating labels Nov 1, 2019
Copy link

kaicataldo left a comment

LGTM, thanks!

Copy link

btmills left a comment

LGTM, thanks @mdjermanovic! Agree this is a semver-minor bugfix.

@btmills btmills merged commit 0f01f3d into master Nov 22, 2019
16 checks passed
16 checks passed
Verify Files
Test (ubuntu-latest, 8.x)
Test (ubuntu-latest, 10.x)
Test (ubuntu-latest, 12.x)
Test (windows-latest, 12.x)
Test (macOS-latest, 12.x)
Browser Test
commit-message Commit message follows guidelines
continuous-integration Build #20191027.1 succeeded
continuous-integration (Test on Node.js 10 (Linux)) Test on Node.js 10 (Linux) succeeded
continuous-integration (Test on Node.js 12 (Linux)) Test on Node.js 12 (Linux) succeeded
continuous-integration (Test on Node.js 12 (Windows)) Test on Node.js 12 (Windows) succeeded
continuous-integration (Test on Node.js 12 (macOS)) Test on Node.js 12 (macOS) succeeded
continuous-integration (Test on Node.js 8 (Linux)) Test on Node.js 8 (Linux) succeeded
licence/cla Contributor License Agreement is signed.
release-monitor No patch release is pending
@btmills btmills deleted the operatorassignment-this branch Nov 22, 2019
@medikoo medikoo mentioned this pull request Nov 25, 2019
@eslint eslint bot locked and limited conversation to collaborators May 22, 2020
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
None yet
Linked issues

Successfully merging this pull request may close these issues.

None yet

3 participants
You can’t perform that action at this time.