not use offset when there is not ends with brace

This commit is contained in:
bohan 2024-06-23 23:44:22 +08:00
parent c3d7fb3985
commit 594fa01aba
3 changed files with 56 additions and 5 deletions

View File

@ -211,11 +211,18 @@ fn missing_items_err(
.collect::<Vec<_>>()
.join("`, `");
// `Span` before impl block closing brace.
let hi = full_impl_span.hi() - BytePos(1);
// Point at the place right before the closing brace of the relevant `impl` to suggest
// adding the associated item at the end of its body.
let sugg_sp = full_impl_span.with_lo(hi).with_hi(hi);
let sugg_sp = if let Ok(snippet) = tcx.sess.source_map().span_to_snippet(full_impl_span)
&& snippet.ends_with("}")
{
// `Span` before impl block closing brace.
let hi = full_impl_span.hi() - BytePos(1);
// Point at the place right before the closing brace of the relevant `impl` to suggest
// adding the associated item at the end of its body.
full_impl_span.with_lo(hi).with_hi(hi)
} else {
full_impl_span.shrink_to_hi()
};
// Obtain the level of indentation ending in `sugg_sp`.
let padding =
tcx.sess.source_map().indentation_before(sugg_sp).unwrap_or_else(|| String::new());

View File

@ -0,0 +1,13 @@
// issue#126764
struct S;
trait T {
fn f();
}
impl T for S
//~^ ERROR: unknown start of token
//~| ERROR: expected `{}`
//~| ERROR: not all trait items implemented, missing: `f`
fn main() {}

View File

@ -0,0 +1,31 @@
error: unknown start of token: \u{ff1b}
--> $DIR/missing-impl-trait-block-but-not-ascii.rs:8:13
|
LL | impl T for S
| ^^
|
help: Unicode character '' (Fullwidth Semicolon) looks like ';' (Semicolon), but it is not
|
LL | impl T for S;
| ~
error: expected `{}`, found `;`
--> $DIR/missing-impl-trait-block-but-not-ascii.rs:8:13
|
LL | impl T for S
| ^^
|
= help: try using `{}` instead
error[E0046]: not all trait items implemented, missing: `f`
--> $DIR/missing-impl-trait-block-but-not-ascii.rs:8:1
|
LL | fn f();
| ------- `f` from trait
LL | }
LL | impl T for S
| ^^^^^^^^^^^^ missing `f` in implementation
error: aborting due to 3 previous errors
For more information about this error, try `rustc --explain E0046`.