9962: Add empty-body check to replace_match_with_if_let and re-prioritize choices r=elkowar a=elkowar This PR changes some behaviour of the `replace_match_with_if_let` ide-assist. Concretely, it makes two changes: it introduces a check for empty expression bodies. This means that checks of the shape ```rs match x { A => {} B => { println!("hi"); } } ``` will prefer to use the B branch as the first (and only) variant. It also reprioritizes the importance of "happy" and "sad" patterns. Concretely, if there are reasons to prefer having the sad pattern be the first (/only) pattern, it will follow these. This means that in the case of ```rs match x { Ok(_) => { println!("Success"); } Err(e) => { println!("Failure: {}", e); } } ``` the `Err` variant will correctly be used as the first expression in the generated if. Up until now, the generated code was actually invalid, as it would generate ```rs if let Ok(_) = x { println!("Success"); } else { println!("Failure: {}", e); } ``` where `e` in the else branch is not defined. Co-authored-by: elkowar <5300871+elkowar@users.noreply.github.com>
rust-analyzer is a modular compiler frontend for the Rust language. It is a part of a larger rls-2.0 effort to create excellent IDE support for Rust.
Work on rust-analyzer is sponsored by
Quick Start
https://rust-analyzer.github.io/manual.html#installation
Documentation
If you want to contribute to rust-analyzer or are just curious about how things work under the hood, check the ./docs/dev folder.
If you want to use rust-analyzer's language server with your editor of choice, check the manual folder. It also contains some tips & tricks to help you be more productive when using rust-analyzer.
Security and Privacy
See the corresponding sections of the manual.
Communication
For usage and troubleshooting requests, please use "IDEs and Editors" category of the Rust forum:
https://users.rust-lang.org/c/ide/14
For questions about development and implementation, join rust-analyzer working group on Zulip:
https://rust-lang.zulipchat.com/#narrow/stream/185405-t-compiler.2Frust-analyzer
Quick Links
- Website: https://rust-analyzer.github.io/
- Metrics: https://rust-analyzer.github.io/metrics/
- API docs: https://rust-analyzer.github.io/rust-analyzer/ide/
- Changelog: https://rust-analyzer.github.io/thisweek
License
Rust analyzer is primarily distributed under the terms of both the MIT license and the Apache License (Version 2.0).
See LICENSE-APACHE and LICENSE-MIT for details.