Skip to content

noClassAssign (since v1.0.0)

Diagnostic Category: lint/suspicious/noClassAssign

Sources:

Disallow reassigning class members.

A class declaration creates a variable that we can modify, however, the modification is a mistake in most cases.

class A {}
A = 0;
suspicious/noClassAssign.js:2:1 lint/suspicious/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 {}
suspicious/noClassAssign.js:1:1 lint/suspicious/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;
}
}
suspicious/noClassAssign.js:3:3 lint/suspicious/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.
}
}
suspicious/noClassAssign.js:3:3 lint/suspicious/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;
  
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.
}
}