]>
git.proxmox.com Git - pve-eslint.git/blob - eslint/lib/rules/no-dupe-class-members.js
ae61f164ca9218a2d7a9dd49c391c0e4fb43b9c2
2 * @fileoverview A rule to disallow duplicate name in class members.
3 * @author Toru Nagashima
8 const astUtils
= require("./utils/ast-utils");
10 //------------------------------------------------------------------------------
12 //------------------------------------------------------------------------------
14 /** @type {import('../shared/types').Rule} */
20 description
: "disallow duplicate class members",
22 url
: "https://eslint.org/docs/rules/no-dupe-class-members"
28 unexpected
: "Duplicate name '{{name}}'."
36 * Gets state of a given member name.
37 * @param {string} name A name of a member.
38 * @param {boolean} isStatic A flag which specifies that is a static member.
39 * @returns {Object} A state of a given member name.
40 * - retv.init {boolean} A flag which shows the name is declared as normal member.
41 * - retv.get {boolean} A flag which shows the name is declared as getter.
42 * - retv.set {boolean} A flag which shows the name is declared as setter.
44 function getState(name
, isStatic
) {
45 const stateMap
= stack
[stack
.length
- 1];
46 const key
= `$${name}`; // to avoid "__proto__".
50 nonStatic
: { init
: false, get: false, set: false },
51 static: { init
: false, get: false, set: false }
55 return stateMap
[key
][isStatic
? "static" : "nonStatic"];
60 // Initializes the stack of state of member declarations.
65 // Initializes state of member declarations for the class.
67 stack
.push(Object
.create(null));
70 // Disposes the state for the class.
75 // Reports the node if its name has been declared already.
76 "MethodDefinition, PropertyDefinition"(node
) {
77 const name
= astUtils
.getStaticPropertyName(node
);
78 const kind
= node
.type
=== "MethodDefinition" ? node
.kind
: "field";
80 if (name
=== null || kind
=== "constructor") {
84 const state
= getState(name
, node
.static);
85 let isDuplicate
= false;
88 isDuplicate
= (state
.init
|| state
.get);
90 } else if (kind
=== "set") {
91 isDuplicate
= (state
.init
|| state
.set);
94 isDuplicate
= (state
.init
|| state
.get || state
.set);
99 context
.report({ node
, messageId
: "unexpected", data
: { name
} });