Skip to content

Commit 1f32400

Browse files
authored
Merge pull request #28877 from ProvableHQ/trigger-integration-tetektoza-leo-fix/better_duplicate_member_span_targeting
Target specific duplicate member span in error reporting
2 parents 4654995 + 3cda42e commit 1f32400

3 files changed

Lines changed: 13 additions & 33 deletions

File tree

compiler/passes/src/type_checking/program.rs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -225,17 +225,17 @@ impl ProgramVisitor for TypeCheckingVisitor<'_> {
225225

226226
// Check for conflicting struct/record member names.
227227
let mut used = HashSet::new();
228-
// TODO: Better span to target duplicate member.
229-
if !input.members.iter().all(|Member { identifier, type_, span, .. }| {
228+
for Member { identifier, type_, span, .. } in &input.members {
230229
// Check that the member types are defined.
231230
self.assert_type_is_valid(type_, *span);
232-
used.insert(identifier.name)
233-
}) {
234-
self.emit_err(if input.is_record {
235-
TypeCheckerError::duplicate_record_variable(input.name(), input.span())
236-
} else {
237-
TypeCheckerError::duplicate_struct_member(input.name(), input.span())
238-
});
231+
232+
if !used.insert(identifier.name) {
233+
self.emit_err(if input.is_record {
234+
TypeCheckerError::duplicate_record_variable(input.name(), *span)
235+
} else {
236+
TypeCheckerError::duplicate_struct_member(input.name(), *span)
237+
});
238+
}
239239
}
240240

241241
// For records, enforce presence of the `owner: Address` member.

tests/expectations/compiler/records/duplicate_var_fail.out

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,8 @@
11
Error [ETYC0372016]: Record Token defined with more than one variable with the same name.
2-
--> compiler-test:3:5
2+
--> compiler-test:7:9
33
|
4-
3 | record Token {
5-
| ^^^^^^^^^^^^^^
6-
4 | // The token owner.
7-
| ^^^^^^^^^^^^^^^^^^^
8-
5 | owner: address,
9-
| ^^^^^^^^^^^^^^^
10-
6 | // The token owner.
11-
| ^^^^^^^^^^^^^^^^^^^
124
7 | owner: address, // Cannot define two record variables with the same name.
13-
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
14-
8 | // The token amount.
15-
| ^^^^^^^^^^^^^^^^^^^^
16-
9 | amount: u64,
17-
| ^^^^^^^^^^^^
18-
10 | }
19-
| ^
5+
| ^^^^^^^^^^^^^^
206
Error [ETYC0372083]: A program must have at least one transition function.
217
--> compiler-test:2:9
228
|

tests/expectations/compiler/structs/duplicate_struct_variable.out

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,8 @@
11
Error [ETYC0372015]: Struct Bar defined with more than one member with the same name.
2-
--> compiler-test:3:5
2+
--> compiler-test:5:9
33
|
4-
3 | struct Bar {
5-
| ^^^^^^^^^^^^
6-
4 | x: u32,
7-
| ^^^^^^^
84
5 | x: u32,
9-
| ^^^^^^^
10-
6 | }
11-
| ^
5+
| ^^^^^^
126
Error [ETYC0372083]: A program must have at least one transition function.
137
--> compiler-test:2:9
148
|

0 commit comments

Comments
 (0)