rust-lang / rust-lang/rust-clippy
collapsible_match ignore "else" when fixing an if statement
Open
@Souradip121 is already working on this.
Since Apr 25, 2026.
C-bug
- Dominant language
- Rust
- Stars
- 13.5k
- Forks
- 2.2k
- Avg merge
- 2d 10h
- Merged PRs (30d)
- 32
Description
Summary
The fix proposed by the lint drops the else statement.
Reproducer
Code is from https://github.com/jaemk/self_update/blob/cad8bb9c5efa64ff9131c424bcd20c84463b32f2/src/lib.rs#L591-L614
Code:
match self.temp {
None => {
fs::rename(self.source, dest)?;
}
Some(temp) => {
if dest.exists() {
// Move the existing dest to a temp location so we can move it
// back it there's an error. If the existing `dest` file is a
// long running program, this may prevent the temp dir from
// being cleaned up.
fs::rename(dest, temp)?;
if let Err(e) = fs::rename(self.source, dest) {
fs::rename(temp, dest)?;
return Err(Error::from(e));
}
} else {
fs::rename(self.source, dest)?;
}
}
};
Current fix:
match self.temp {
None => {
fs::rename(self.source, dest)?;
}
Some(temp)
if dest.exists() => {
// Move the existing dest to a temp location so we can move it
// back it there's an error. If the existing `dest` file is a
// long running program, this may prevent the temp dir from
// being cleaned up.
fs::rename(dest, temp)?;
if let Err(e) = fs::rename(self.source, dest) {
fs::rename(temp, dest)?;
return Err(Error::from(e));
}
}
};
Desired output:
The lint should either not report this or propose a fix that also includes the else statement.
Version
rustc 1.95.0 (59807616e 2026-04-14)
binary: rustc
commit-hash: 59807616e1fa2540724bfbac14d7976d7e4a3860
commit-date: 2026-04-14
host: x86_64-unknown-linux-gnu
release: 1.95.0
LLVM version: 22.1.2
Additional Labels
No response
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Assessment
This issue has not been assessed yet.