pull/16502/head
ComputerGuy 1 month ago
parent 56bbb3ce62
commit 06024250b2

@ -33,7 +33,7 @@ export function ClassBody(node, context) {
/** @type {Map<string, StateField>} */ /** @type {Map<string, StateField>} */
const state_fields = new Map(); const state_fields = new Map();
/** @type {Map<string, Array<MethodDefinition['kind'] | 'prop'>>} */ /** @type {Map<string, Array<MethodDefinition['kind'] | 'prop' | 'assigned_prop'>>} */
const fields = new Map(); const fields = new Map();
context.state.analysis.classes.set(node, state_fields); context.state.analysis.classes.set(node, state_fields);
@ -60,7 +60,8 @@ export function ClassBody(node, context) {
const _key = (key.type === 'PrivateIdentifier' ? '#' : '') + name; const _key = (key.type === 'PrivateIdentifier' ? '#' : '') + name;
const field = fields.get(_key); const field = fields.get(_key);
if (field) { // if there's already a method or assigned field, error
if (field && !(field.length === 1 && field[0] === 'prop')) {
e.duplicate_class_field(node, _key); e.duplicate_class_field(node, _key);
} }
@ -80,7 +81,7 @@ export function ClassBody(node, context) {
const key = (child.key.type === 'PrivateIdentifier' ? '#' : '') + get_name(child.key); const key = (child.key.type === 'PrivateIdentifier' ? '#' : '') + get_name(child.key);
const field = fields.get(key); const field = fields.get(key);
if (!field) { if (!field) {
fields.set(key, ['prop']); fields.set(key, [child.value ? 'assigned_prop' : 'prop']);
continue; continue;
} }
e.duplicate_class_field(child, key); e.duplicate_class_field(child, key);
@ -96,7 +97,11 @@ export function ClassBody(node, context) {
fields.set(key, [child.kind]); fields.set(key, [child.kind]);
continue; continue;
} }
if (field.includes(child.kind) || field.includes('prop')) { if (
field.includes(child.kind) ||
field.includes('prop') ||
field.includes('assigned_prop')
) {
e.duplicate_class_field(child, key); e.duplicate_class_field(child, key);
} }
if (child.kind === 'get') { if (child.kind === 'get') {

Loading…
Cancel
Save