Skip to content

Commit

Permalink
not use offset when there is not ends with brace
Browse files Browse the repository at this point in the history
  • Loading branch information
bvanjoi committed Jun 23, 2024
1 parent c3d7fb3 commit 594fa01
Show file tree
Hide file tree
Showing 3 changed files with 56 additions and 5 deletions.
17 changes: 12 additions & 5 deletions compiler/rustc_hir_analysis/src/check/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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());
Expand Down
13 changes: 13 additions & 0 deletions tests/ui/suggestions/missing-impl-trait-block-but-not-ascii.rs
Original file line number Diff line number Diff line change
@@ -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() {}
31 changes: 31 additions & 0 deletions tests/ui/suggestions/missing-impl-trait-block-but-not-ascii.stderr
Original file line number Diff line number Diff line change
@@ -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`.

0 comments on commit 594fa01

Please sign in to comment.