Fixing span manipulation and indentation of the suggestion introduced by #126187
According to comments: https://github.com/rust-lang/rust/pull/128084#issuecomment-2295254576 https://github.com/rust-lang/rust/pull/126187/files#r1634897691
This commit is contained in:
parent
739b1fdb15
commit
8750e24247
@ -4667,10 +4667,15 @@ fn choose_suggest_items<'tcx, 'hir>(
|
||||
if let hir::ExprKind::Block(b, _) = body.value.kind
|
||||
&& b.expr.is_none()
|
||||
{
|
||||
// The span of '}' in the end of block.
|
||||
let span = self.tcx.sess.source_map().end_point(b.span);
|
||||
sugg_spans.push((
|
||||
// The span will point to the closing curly brace `}` of the block.
|
||||
b.span.shrink_to_hi().with_lo(b.span.hi() - BytePos(1)),
|
||||
"\n Ok(())\n}".to_string(),
|
||||
span.shrink_to_lo(),
|
||||
format!(
|
||||
"{}{}",
|
||||
" Ok(())\n",
|
||||
self.tcx.sess.source_map().indentation_before(span).unwrap_or_default(),
|
||||
),
|
||||
));
|
||||
}
|
||||
err.multipart_suggestion_verbose(
|
||||
|
@ -9,7 +9,6 @@ use std::io::prelude::*;
|
||||
fn test1() -> Result<(), Box<dyn std::error::Error>> {
|
||||
let mut _file = File::create("foo.txt")?;
|
||||
//~^ ERROR the `?` operator can only be used in a function
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
@ -17,7 +16,6 @@ fn test2() -> Result<(), Box<dyn std::error::Error>> {
|
||||
let mut _file = File::create("foo.txt")?;
|
||||
//~^ ERROR the `?` operator can only be used in a function
|
||||
println!();
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
@ -27,9 +25,8 @@ macro_rules! mac {
|
||||
let mut _file = File::create("foo.txt")?;
|
||||
//~^ ERROR the `?` operator can only be used in a function
|
||||
println!();
|
||||
|
||||
Ok(())
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@ -39,23 +36,20 @@ impl A {
|
||||
fn test4(&self) -> Result<(), Box<dyn std::error::Error>> {
|
||||
let mut _file = File::create("foo.txt")?;
|
||||
//~^ ERROR the `?` operator can only be used in a method
|
||||
|
||||
Ok(())
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn test5(&self) -> Result<(), Box<dyn std::error::Error>> {
|
||||
let mut _file = File::create("foo.txt")?;
|
||||
//~^ ERROR the `?` operator can only be used in a method
|
||||
println!();
|
||||
|
||||
Ok(())
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||
let mut _file = File::create("foo.txt")?;
|
||||
//~^ ERROR the `?` operator can only be used in a function
|
||||
mac!();
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
@ -12,9 +12,7 @@ help: consider adding return type
|
||||
LL ~ fn test1() -> Result<(), Box<dyn std::error::Error>> {
|
||||
LL | let mut _file = File::create("foo.txt")?;
|
||||
LL |
|
||||
LL +
|
||||
LL + Ok(())
|
||||
LL + }
|
||||
|
|
||||
|
||||
error[E0277]: the `?` operator can only be used in a function that returns `Result` or `Option` (or another type that implements `FromResidual`)
|
||||
@ -32,9 +30,7 @@ LL ~ fn test2() -> Result<(), Box<dyn std::error::Error>> {
|
||||
LL | let mut _file = File::create("foo.txt")?;
|
||||
LL |
|
||||
LL | println!();
|
||||
LL +
|
||||
LL + Ok(())
|
||||
LL + }
|
||||
|
|
||||
|
||||
error[E0277]: the `?` operator can only be used in a method that returns `Result` or `Option` (or another type that implements `FromResidual`)
|
||||
@ -51,9 +47,8 @@ help: consider adding return type
|
||||
LL ~ fn test4(&self) -> Result<(), Box<dyn std::error::Error>> {
|
||||
LL | let mut _file = File::create("foo.txt")?;
|
||||
LL |
|
||||
LL ~
|
||||
LL + Ok(())
|
||||
LL + }
|
||||
LL ~ Ok(())
|
||||
LL ~ }
|
||||
|
|
||||
|
||||
error[E0277]: the `?` operator can only be used in a method that returns `Result` or `Option` (or another type that implements `FromResidual`)
|
||||
@ -71,9 +66,8 @@ LL ~ fn test5(&self) -> Result<(), Box<dyn std::error::Error>> {
|
||||
LL | let mut _file = File::create("foo.txt")?;
|
||||
LL |
|
||||
LL | println!();
|
||||
LL ~
|
||||
LL + Ok(())
|
||||
LL + }
|
||||
LL ~ Ok(())
|
||||
LL ~ }
|
||||
|
|
||||
|
||||
error[E0277]: the `?` operator can only be used in a function that returns `Result` or `Option` (or another type that implements `FromResidual`)
|
||||
@ -91,9 +85,7 @@ LL ~ fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||
LL | let mut _file = File::create("foo.txt")?;
|
||||
LL |
|
||||
LL | mac!();
|
||||
LL +
|
||||
LL + Ok(())
|
||||
LL + }
|
||||
|
|
||||
|
||||
error[E0277]: the `?` operator can only be used in a function that returns `Result` or `Option` (or another type that implements `FromResidual`)
|
||||
@ -115,9 +107,8 @@ LL ~ fn test3() -> Result<(), Box<dyn std::error::Error>> {
|
||||
LL | let mut _file = File::create("foo.txt")?;
|
||||
LL |
|
||||
LL | println!();
|
||||
LL ~
|
||||
LL + Ok(())
|
||||
LL + }
|
||||
LL ~ Ok(())
|
||||
LL ~ }
|
||||
|
|
||||
|
||||
error: aborting due to 6 previous errors
|
||||
|
@ -14,9 +14,7 @@ LL ~ fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||
LL | // error for a `Try` type on a non-`Try` fn
|
||||
...
|
||||
LL | try_trait_generic::<()>();
|
||||
LL +
|
||||
LL + Ok(())
|
||||
LL + }
|
||||
|
|
||||
|
||||
error[E0277]: the `?` operator can only be applied to values that implement `Try`
|
||||
|
Loading…
Reference in New Issue
Block a user