Don't use bytepos offsets when computing semicolon span for removal
This commit is contained in:
parent
033becf83c
commit
a439eb259d
@ -15,7 +15,7 @@
|
|||||||
};
|
};
|
||||||
use rustc_middle::ty::print::with_no_trimmed_paths;
|
use rustc_middle::ty::print::with_no_trimmed_paths;
|
||||||
use rustc_middle::ty::{self as ty, GenericArgKind, IsSuggestable, Ty, TypeVisitableExt};
|
use rustc_middle::ty::{self as ty, GenericArgKind, IsSuggestable, Ty, TypeVisitableExt};
|
||||||
use rustc_span::{sym, BytePos, Span};
|
use rustc_span::{sym, Span};
|
||||||
|
|
||||||
use crate::errors::{
|
use crate::errors::{
|
||||||
ConsiderAddingAwait, FnConsiderCasting, FnItemsAreDistinct, FnUniqTypes,
|
ConsiderAddingAwait, FnConsiderCasting, FnItemsAreDistinct, FnUniqTypes,
|
||||||
@ -763,8 +763,15 @@ pub fn could_remove_semicolon(
|
|||||||
let mac_call = rustc_span::source_map::original_sp(last_stmt.span, blk.span);
|
let mac_call = rustc_span::source_map::original_sp(last_stmt.span, blk.span);
|
||||||
self.tcx.sess.source_map().mac_call_stmt_semi_span(mac_call)?
|
self.tcx.sess.source_map().mac_call_stmt_semi_span(mac_call)?
|
||||||
} else {
|
} else {
|
||||||
last_stmt.span.with_lo(last_stmt.span.hi() - BytePos(1))
|
self.tcx
|
||||||
|
.sess
|
||||||
|
.source_map()
|
||||||
|
.span_extend_while(last_expr.span, |c| c.is_whitespace())
|
||||||
|
.ok()?
|
||||||
|
.shrink_to_hi()
|
||||||
|
.with_hi(last_stmt.span.hi())
|
||||||
};
|
};
|
||||||
|
|
||||||
Some((span, needs_box))
|
Some((span, needs_box))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
11
tests/ui/typeck/remove-semi-but-confused-char.rs
Normal file
11
tests/ui/typeck/remove-semi-but-confused-char.rs
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
// Ensures our "remove semicolon" suggestion isn't hardcoded with a character width,
|
||||||
|
// in case it was accidentally mixed up with a greek question mark.
|
||||||
|
// issue: rust-lang/rust#123607
|
||||||
|
|
||||||
|
pub fn square(num: i32) -> i32 {
|
||||||
|
//~^ ERROR mismatched types
|
||||||
|
num * num;
|
||||||
|
//~^ ERROR unknown start of token
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {}
|
25
tests/ui/typeck/remove-semi-but-confused-char.stderr
Normal file
25
tests/ui/typeck/remove-semi-but-confused-char.stderr
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
error: unknown start of token: \u{37e}
|
||||||
|
--> $DIR/remove-semi-but-confused-char.rs:7:14
|
||||||
|
|
|
||||||
|
LL | num * num;
|
||||||
|
| ^
|
||||||
|
|
|
||||||
|
help: Unicode character ';' (Greek Question Mark) looks like ';' (Semicolon), but it is not
|
||||||
|
|
|
||||||
|
LL | num * num;
|
||||||
|
| ~
|
||||||
|
|
||||||
|
error[E0308]: mismatched types
|
||||||
|
--> $DIR/remove-semi-but-confused-char.rs:5:28
|
||||||
|
|
|
||||||
|
LL | pub fn square(num: i32) -> i32 {
|
||||||
|
| ------ ^^^ expected `i32`, found `()`
|
||||||
|
| |
|
||||||
|
| implicitly returns `()` as its body has no tail or `return` expression
|
||||||
|
LL |
|
||||||
|
LL | num * num;
|
||||||
|
| - help: remove this semicolon to return this value
|
||||||
|
|
||||||
|
error: aborting due to 2 previous errors
|
||||||
|
|
||||||
|
For more information about this error, try `rustc --explain E0308`.
|
Loading…
Reference in New Issue
Block a user