-
Notifications
You must be signed in to change notification settings - Fork 1.8k
fix significant_drop_tightening
: don't suggest when missing the necessary spans
#15598
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
ada4a
wants to merge
2
commits into
rust-lang:master
Choose a base branch
from
ada4a:significant_drop_tightening
base: master
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
+145
−45
Open
Changes from all commits
Commits
Show all changes
2 commits
Select commit
Hold shift + click to select a range
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
//@no-rustfix | ||
#![warn(clippy::significant_drop_tightening)] | ||
|
||
mod issue_15574 { | ||
use std::io::{BufRead, Read, stdin}; | ||
use std::process; | ||
|
||
// NOTE: this requires `no_rustfix` for multiple reasons: | ||
// | ||
// There should be two suggestions, one to merge the line: | ||
// ``` | ||
// let stdin = stdin.lock(); | ||
// ``` | ||
// into: | ||
// ``` | ||
// let mut stdin = stdin.take(40); | ||
// ``` | ||
// and one to merge the latter into the `if`. | ||
// | ||
// This causes the following problems: | ||
// - the first suggestion lacks the `mut` before `stdin`, which doesn't compile | ||
// - the second suggestion isn't a suggestion but a help message, so the warning isn't gone after | ||
// rustfix | ||
// - when the second help becomes a suggestion, it will overlap with the first one | ||
fn main() { | ||
//Let's read from stdin | ||
println!("Hello, what's your name?"); | ||
let stdin = stdin().lock(); | ||
//~^ significant_drop_tightening | ||
let mut buffer = String::with_capacity(10); | ||
//Here we lock stdin and block to 10 bytes | ||
// Our string is now then only 10 bytes. | ||
//Even if it overflows like expected, it will reallocate. | ||
let mut stdin = stdin.take(40); | ||
//~^ significant_drop_tightening | ||
if stdin.read_line(&mut buffer).is_err() { | ||
eprintln!("An error has occured while reading."); | ||
return; | ||
} //Now we print the result, our data is safe | ||
println!("Our string has a capacity of {}", buffer.capacity()); | ||
println!("Hello {}!", buffer); | ||
//The string is freed automatically. | ||
} | ||
} | ||
|
||
fn main() {} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,54 @@ | ||
error: temporary with significant `Drop` can be early dropped | ||
--> tests/ui/significant_drop_tightening_unfixable.rs:28:13 | ||
| | ||
LL | fn main() { | ||
| _______________- | ||
LL | | //Let's read from stdin | ||
LL | | println!("Hello, what's your name?"); | ||
LL | | let stdin = stdin().lock(); | ||
| | ^^^^^ | ||
... | | ||
LL | | } | ||
| |_____- temporary `stdin` is currently being dropped at the end of its contained scope | ||
| | ||
= note: this might lead to unnecessary resource contention | ||
= note: `-D clippy::significant-drop-tightening` implied by `-D warnings` | ||
= help: to override `-D warnings` add `#[allow(clippy::significant_drop_tightening)]` | ||
help: merge the temporary construction with its single usage | ||
| | ||
LL ~ | ||
LL + let stdin = stdin().lock().take(40); | ||
LL | | ||
... | ||
LL | //Even if it overflows like expected, it will reallocate. | ||
LL ~ | ||
| | ||
|
||
error: temporary with significant `Drop` can be early dropped | ||
--> tests/ui/significant_drop_tightening_unfixable.rs:34:17 | ||
| | ||
LL | fn main() { | ||
| _______________- | ||
LL | | //Let's read from stdin | ||
LL | | println!("Hello, what's your name?"); | ||
LL | | let stdin = stdin().lock(); | ||
... | | ||
LL | | let mut stdin = stdin.take(40); | ||
| | ^^^^^ | ||
... | | ||
LL | | } | ||
| |_____- temporary `stdin` is currently being dropped at the end of its contained scope | ||
| | ||
= help: merge the temporary construction with its single usage | ||
note: single usage here | ||
--> tests/ui/significant_drop_tightening_unfixable.rs:36:9 | ||
| | ||
LL | / if stdin.read_line(&mut buffer).is_err() { | ||
LL | | eprintln!("An error has occured while reading."); | ||
LL | | return; | ||
LL | | } //Now we print the result, our data is safe | ||
| |_________^ | ||
= note: this might lead to unnecessary resource contention | ||
|
||
error: aborting due to 2 previous errors | ||
|
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Since you're changing this the function shouldn't even take an
Option
here.Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think it's appropriate in this case, because
apa.first_bind_ident
is anOption<Ident>
as well, no?