Skip to content

Commit 0602425

Browse files
committed
fix
1 parent 56bbb3c commit 0602425

File tree

1 file changed

+9
-4
lines changed
  • packages/svelte/src/compiler/phases/2-analyze/visitors

1 file changed

+9
-4
lines changed

packages/svelte/src/compiler/phases/2-analyze/visitors/ClassBody.js

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ export function ClassBody(node, context) {
3333
/** @type {Map<string, StateField>} */
3434
const state_fields = new Map();
3535

36-
/** @type {Map<string, Array<MethodDefinition['kind'] | 'prop'>>} */
36+
/** @type {Map<string, Array<MethodDefinition['kind'] | 'prop' | 'assigned_prop'>>} */
3737
const fields = new Map();
3838

3939
context.state.analysis.classes.set(node, state_fields);
@@ -60,7 +60,8 @@ export function ClassBody(node, context) {
6060
const _key = (key.type === 'PrivateIdentifier' ? '#' : '') + name;
6161
const field = fields.get(_key);
6262

63-
if (field) {
63+
// if there's already a method or assigned field, error
64+
if (field && !(field.length === 1 && field[0] === 'prop')) {
6465
e.duplicate_class_field(node, _key);
6566
}
6667

@@ -80,7 +81,7 @@ export function ClassBody(node, context) {
8081
const key = (child.key.type === 'PrivateIdentifier' ? '#' : '') + get_name(child.key);
8182
const field = fields.get(key);
8283
if (!field) {
83-
fields.set(key, ['prop']);
84+
fields.set(key, [child.value ? 'assigned_prop' : 'prop']);
8485
continue;
8586
}
8687
e.duplicate_class_field(child, key);
@@ -96,7 +97,11 @@ export function ClassBody(node, context) {
9697
fields.set(key, [child.kind]);
9798
continue;
9899
}
99-
if (field.includes(child.kind) || field.includes('prop')) {
100+
if (
101+
field.includes(child.kind) ||
102+
field.includes('prop') ||
103+
field.includes('assigned_prop')
104+
) {
100105
e.duplicate_class_field(child, key);
101106
}
102107
if (child.kind === 'get') {

0 commit comments

Comments
 (0)