noClassAssign (since v12.0.0)
Disallow reassigning class members.
A class declaration creates a variable that we can modify, however, the modification is a mistake in most cases.
Examples
Invalid
class A {}
A = 0;
nursery/noClassAssign.js:2:1 lint/nursery/noClassAssign ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✖ 'A' is a class.
1 │ class A {}
> 2 │ A = 0;
│ ^
3 │
ℹ 'A' is defined here.
> 1 │ class A {}
│ ^
2 │ A = 0;
3 │
A = 0;
class A {}
nursery/noClassAssign.js:1:1 lint/nursery/noClassAssign ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✖ 'A' is a class.
> 1 │ A = 0;
│ ^
2 │ class A {}
3 │
ℹ 'A' is defined here.
1 │ A = 0;
> 2 │ class A {}
│ ^
3 │
class A {
b() {
A = 0;
}
}
nursery/noClassAssign.js:3:3 lint/nursery/noClassAssign ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✖ 'A' is a class.
1 │ class A {
2 │ b() {
> 3 │ A = 0;
│ ^
4 │ }
5 │ }
ℹ 'A' is defined here.
> 1 │ class A {
│ ^
2 │ b() {
3 │ A = 0;
let A = class A {
b() {
A = 0;
// `let A` is shadowed by the class name.
}
}
nursery/noClassAssign.js:3:3 lint/nursery/noClassAssign ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✖ 'A' is a class.
1 │ let A = class A {
2 │ b() {
> 3 │ A = 0;
│ ^
4 │ // `let A` is shadowed by the class name.
5 │ }
ℹ 'A' is defined here.
> 1 │ let A = class A {
│ ^
2 │ b() {
3 │ A = 0;
Valid
let A = class A {}
A = 0; // A is a variable.
let A = class {
b() {
A = 0; // A is a variable.
}
}
class A {
b(A) {
A = 0; // A is a parameter.
}
}