diff options
| author | bors <bors@rust-lang.org> | 2024-09-28 20:16:10 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2024-09-28 20:16:10 +0000 |
| commit | 7b566c214e701f93ddeedd5b60ea1290a9e8aa36 (patch) | |
| tree | a6374370c21e9f29db1c7f37b287c8a520e379ef /compiler/rustc_llvm/llvm-wrapper/CoverageMappingWrapper.cpp | |
| parent | 897f0e4749ce1d2d2d2857c31417432f8b53d455 (diff) | |
| parent | 10e02cf8e3e8b46d3bc7f8194c9224755604eac4 (diff) | |
| download | rust-7b566c214e701f93ddeedd5b60ea1290a9e8aa36.tar.gz rust-7b566c214e701f93ddeedd5b60ea1290a9e8aa36.zip | |
Auto merge of #13336 - nyurik:ref-option-sig, r=llogiq
Suggest `Option<&T>` instead of `&Option<T>`
closes #13054
```rust
// bad code
fn foo(a: &Option<T>) {}
fn bar(&self) -> &Option<T> {}
// Use instead
fn foo(a: Option<&T>) {}
fn bar(&self) -> Option<&T> {}
```
Handles argument types and return types in functions, methods, and closures with explicit types. Honors `avoid_breaking_exported_api` parameter.
See this great [YouTube video](https://www.youtube.com/watch?v=6c7pZYP_iIE) with the in-depth explanation.
### Open Questions
These are not blocking, and could be done in separate PRs if needed.
* [ ] Should `&Option<Box<T>>` be suggested as `Option<&T>` -- without the box? Handled by [clippy::borrowed_box](https://rust-lang.github.io/rust-clippy/master/index.html#/borrowed_box)
* [ ] Should `&Option<String>` be suggested as `Option<&str>` -- using de-refed type?
### Possible Future Improvements
These cases might also be good to handle, probably in a separate PR.
```rust
fn lambdas() {
let x = |a: &Option<String>| {};
let x = |a: &Option<String>| -> &Option<String> { todo!() };
}
fn mut_ref_to_ref(a: &mut &Option<u8>) {}
```
changelog: [`ref_option`]: Suggest `Option<&T>` instead of `&Option<T>`
Diffstat (limited to 'compiler/rustc_llvm/llvm-wrapper/CoverageMappingWrapper.cpp')
0 files changed, 0 insertions, 0 deletions
