Skip to content

Commit 91ac1d6

Browse files
Ryan Mehrirmehri01
authored andcommitted
fix: initializing struct multiple times
1 parent 83196fd commit 91ac1d6

File tree

1 file changed

+41
-0
lines changed

1 file changed

+41
-0
lines changed

crates/ide-assists/src/handlers/bool_to_enum.rs

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,7 @@ fn replace_usages(edit: &mut SourceChangeBuilder, usages: &UsageSearchResult) {
194194
ast::NameLike::NameRef(name) => Some((*range, name)),
195195
_ => None,
196196
})
197+
.rev()
197198
.for_each(|(range, name_ref)| {
198199
if let Some(initializer) = find_assignment_usage(name_ref) {
199200
cov_mark::hit!(replaces_assignment);
@@ -615,6 +616,46 @@ mod foo {
615616
)
616617
}
617618

619+
#[test]
620+
fn field_multiple_initializations() {
621+
check_assist(
622+
bool_to_enum,
623+
r#"
624+
struct Foo {
625+
$0bar: bool,
626+
baz: bool,
627+
}
628+
629+
fn main() {
630+
let foo1 = Foo { bar: true, baz: false };
631+
let foo2 = Foo { bar: false, baz: false };
632+
633+
if foo1.bar && foo2.bar {
634+
println!("foo");
635+
}
636+
}
637+
"#,
638+
r#"
639+
#[derive(PartialEq, Eq)]
640+
enum $0Bool { True, False }
641+
642+
struct Foo {
643+
bar: Bool,
644+
baz: bool,
645+
}
646+
647+
fn main() {
648+
let foo1 = Foo { bar: Bool::True, baz: false };
649+
let foo2 = Foo { bar: Bool::False, baz: false };
650+
651+
if foo1.bar == Bool::True && foo2.bar == Bool::True {
652+
println!("foo");
653+
}
654+
}
655+
"#,
656+
)
657+
}
658+
618659
#[test]
619660
fn field_non_bool() {
620661
cov_mark::check!(not_applicable_non_bool_field);

0 commit comments

Comments
 (0)