Victor 59516e9a7e
Modify rule S4124: Adapt to LaYC (#2692)
Co-authored-by: Yassin Kammoun <52890329+yassin-kammoun-sonarsource@users.noreply.github.com>
2023-07-28 07:10:53 +00:00

42 lines
1.8 KiB
Plaintext

== Why is this an issue?
JavaScript and TypeScript classes may define a `constructor` method that is executed when a new instance is created. TypeScript allows interfaces that describe a static class object to define a `new()` method. Using these terms to name methods in other contexts can lead to confusion and make the code unclear and harder to understand.
This rule reports when:
* A class defines a method named `new`. The `new` keyword is used to create new instances of the class. If a method with the same name is defined, it can be unclear whether the method is intended to create new instances or perform some other action.
* An interface defines a method named `constructor`. The constructor method is used to define the constructor function for a class that implements the interface. If a method with the same name is defined in the interface, it can be unclear whether the method is intended to define the constructor function or perform some other action.
[source,javascript,diff-id=1,diff-type=noncompliant]
----
interface I {
constructor(): void; // Noncompliant
new(): I;
}
declare class C {
constructor();
new(): C; // Noncompliant
}
----
Do not define methods named `constructor` on TypeScript interfaces. Similarly, avoid defining class methods called `new`.
[source,javascript,diff-id=1,diff-type=compliant]
----
interface I {
new(): I;
}
declare class C {
constructor();
}
----
== Resources
=== Documentation
* https://www.typescriptlang.org/docs/handbook/2/everyday-types.html#interfaces[TypeScript - Interfaces]
* https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes[MDN - Classes]
* https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes/constructor[MDN - `constructor`]
* https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/new[MDN - `new` operator]