Suggest correct comparison against negative literal
When parsing as emplacement syntax (`x<-1`), suggest the correct syntax for comparison against a negative value (`x< -1`).
This commit is contained in:
parent
5d95db34a4
commit
23d59d00be
@ -172,12 +172,27 @@ impl<'a> Visitor<'a> for AstValidator<'a> {
|
|||||||
ExprKind::InlineAsm(..) if !self.session.target.target.options.allow_asm => {
|
ExprKind::InlineAsm(..) if !self.session.target.target.options.allow_asm => {
|
||||||
span_err!(self.session, expr.span, E0472, "asm! is unsupported on this target");
|
span_err!(self.session, expr.span, E0472, "asm! is unsupported on this target");
|
||||||
}
|
}
|
||||||
ExprKind::ObsoleteInPlace(..) => {
|
ExprKind::ObsoleteInPlace(ref place, ref val) => {
|
||||||
self.err_handler()
|
let mut err = self.err_handler().struct_span_err(
|
||||||
.struct_span_err(expr.span, "emplacement syntax is obsolete (for now, anyway)")
|
expr.span,
|
||||||
.note("for more information, see \
|
"emplacement syntax is obsolete (for now, anyway)",
|
||||||
<https://github.com/rust-lang/rust/issues/27779#issuecomment-378416911>")
|
);
|
||||||
.emit();
|
err.note(
|
||||||
|
"for more information, see \
|
||||||
|
<https://github.com/rust-lang/rust/issues/27779#issuecomment-378416911>"
|
||||||
|
);
|
||||||
|
match val.node {
|
||||||
|
ExprKind::Lit(ref v) if v.node.is_numeric() => {
|
||||||
|
err.span_suggestion(
|
||||||
|
place.span.between(val.span),
|
||||||
|
"if you meant to write a comparison against a negative value, add a \
|
||||||
|
space in between `<` and `-`",
|
||||||
|
"< -".to_string(),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
_ => {}
|
||||||
|
}
|
||||||
|
err.emit();
|
||||||
}
|
}
|
||||||
_ => {}
|
_ => {}
|
||||||
}
|
}
|
||||||
|
@ -1298,6 +1298,16 @@ impl LitKind {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Returns true if this is a numeric literal.
|
||||||
|
pub fn is_numeric(&self) -> bool {
|
||||||
|
match *self {
|
||||||
|
LitKind::Int(..) |
|
||||||
|
LitKind::Float(..) |
|
||||||
|
LitKind::FloatUnsuffixed(..) => true,
|
||||||
|
_ => false,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Returns true if this literal has no suffix. Note: this will return true
|
/// Returns true if this literal has no suffix. Note: this will return true
|
||||||
/// for literals with prefixes such as raw strings and byte strings.
|
/// for literals with prefixes such as raw strings and byte strings.
|
||||||
pub fn is_unsuffixed(&self) -> bool {
|
pub fn is_unsuffixed(&self) -> bool {
|
||||||
|
17
src/test/ui/suggestions/placement-syntax.rs
Normal file
17
src/test/ui/suggestions/placement-syntax.rs
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
// Copyright 2018 The Rust Project Developers. See the COPYRIGHT
|
||||||
|
// file at the top-level directory of this distribution and at
|
||||||
|
// http://rust-lang.org/COPYRIGHT.
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||||
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
|
// option. This file may not be copied, modified, or distributed
|
||||||
|
// except according to those terms.
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let x = -5;
|
||||||
|
if x<-1 {
|
||||||
|
//~^ ERROR emplacement syntax is obsolete
|
||||||
|
println!("ok");
|
||||||
|
}
|
||||||
|
}
|
14
src/test/ui/suggestions/placement-syntax.stderr
Normal file
14
src/test/ui/suggestions/placement-syntax.stderr
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
error: emplacement syntax is obsolete (for now, anyway)
|
||||||
|
--> $DIR/placement-syntax.rs:13:8
|
||||||
|
|
|
||||||
|
LL | if x<-1 {
|
||||||
|
| ^^^^
|
||||||
|
|
|
||||||
|
= note: for more information, see <https://github.com/rust-lang/rust/issues/27779#issuecomment-378416911>
|
||||||
|
help: if you meant to write a comparison against a negative value, add a space in between `<` and `-`
|
||||||
|
|
|
||||||
|
LL | if x< -1 {
|
||||||
|
| ^^^
|
||||||
|
|
||||||
|
error: aborting due to previous error
|
||||||
|
|
Loading…
Reference in New Issue
Block a user