if let Some(sugg) = db.suggestion.clone() {
assert_eq!(sugg.msp.primary_spans().len(), sugg.substitutes.len());
- if sugg.substitutes.len() == 1 && // don't display multispans as labels
- sugg.msg.split_whitespace().count() < 10 && // don't display long messages as labels
- sugg.substitutes[0].find('\n').is_none() { // don't display multiline suggestions as labels
+ // don't display multispans as labels
+ if sugg.substitutes.len() == 1 &&
+ // don't display long messages as labels
+ sugg.msg.split_whitespace().count() < 10 &&
+ // don't display multiline suggestions as labels
+ sugg.substitutes[0].find('\n').is_none() {
let msg = format!("{} `{}`", sugg.msg, sugg.substitutes[0]);
primary_span.push_span_label(sugg.msp.primary_spans()[0], msg);
} else {
String concatenation appends the string on the right to the string on the
left and may require reallocation. This requires ownership of the string
on the left. If something should be added to a string literal, move the
-literal to the heap by allocating it with `to_owned()` like in
+literal to the heap by allocating it with `to_owned()` like in
`"Your text".to_owned()`.
"##,
let bounds = self.parse_ty_param_bounds()?;
let sum_span = ty.span.to(self.prev_span);
- let mut err = struct_span_err!(self.sess.span_diagnostic, ty.span, E0178,
+ let mut err = struct_span_err!(self.sess.span_diagnostic, sum_span, E0178,
"expected a path on the left-hand side of `+`, not `{}`", pprust::ty_to_string(&ty));
- err.span_label(ty.span, &format!("expected a path"));
match ty.node {
TyKind::Rptr(ref lifetime, ref mut_ty) => {
err.span_suggestion(sum_span, "try adding parentheses:", sum_with_parens);
}
TyKind::Ptr(..) | TyKind::BareFn(..) => {
- help!(&mut err, "perhaps you forgot parentheses?");
+ err.span_label(sum_span, &"perhaps you forgot parentheses?");
}
- _ => {}
+ _ => {
+ err.span_label(sum_span, &"expected a path");
+ },
}
err.emit();
Ok(())
+++ /dev/null
-// Copyright 2016 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.
-
-trait Foo {}
-
-struct Bar<'a> {
- w: &'a Foo + Copy,
- //~^ ERROR E0178
- //~| NOTE expected a path
- x: &'a Foo + 'a,
- //~^ ERROR E0178
- //~| NOTE expected a path
- y: &'a mut Foo + 'a,
- //~^ ERROR E0178
- //~| NOTE expected a path
- z: fn() -> Foo + 'a,
- //~^ ERROR E0178
- //~| NOTE expected a path
-}
-
-fn main() {
-}
+++ /dev/null
-// Copyright 2015 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 _: &Copy + 'static;
- //~^ ERROR expected a path
- //~| HELP try adding parentheses
- //~| SUGGESTION let _: &(Copy + 'static);
- //~| ERROR the trait `std::marker::Copy` cannot be made into an object
- let _: &'static Copy + 'static;
- //~^ ERROR expected a path
- //~| HELP try adding parentheses
- //~| SUGGESTION let _: &'static (Copy + 'static);
-}
--- /dev/null
+// Copyright 2016 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.
+
+trait Foo {}
+
+struct Bar<'a> {
+ w: &'a Foo + Copy,
+ x: &'a Foo + 'a,
+ y: &'a mut Foo + 'a,
+ z: fn() -> Foo + 'a,
+}
+
+fn main() {
+}
--- /dev/null
+error[E0178]: expected a path on the left-hand side of `+`, not `&'a Foo`
+ --> $DIR/E0178.rs:14:8
+ |
+14 | w: &'a Foo + Copy,
+ | ^^^^^^^^^^^^^^ try adding parentheses: `&'a (Foo + Copy)`
+
+error[E0178]: expected a path on the left-hand side of `+`, not `&'a Foo`
+ --> $DIR/E0178.rs:15:8
+ |
+15 | x: &'a Foo + 'a,
+ | ^^^^^^^^^^^^ try adding parentheses: `&'a (Foo + 'a)`
+
+error[E0178]: expected a path on the left-hand side of `+`, not `&'a mut Foo`
+ --> $DIR/E0178.rs:16:8
+ |
+16 | y: &'a mut Foo + 'a,
+ | ^^^^^^^^^^^^^^^^ try adding parentheses: `&'a mut (Foo + 'a)`
+
+error[E0178]: expected a path on the left-hand side of `+`, not `fn() -> Foo`
+ --> $DIR/E0178.rs:17:8
+ |
+17 | z: fn() -> Foo + 'a,
+ | ^^^^^^^^^^^^^^^^ perhaps you forgot parentheses?
+
+error: aborting due to 4 previous errors
+
--- /dev/null
+// Copyright 2015 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 _: &Copy + 'static;
+ let _: &'static Copy + 'static;
+}
--- /dev/null
+error[E0178]: expected a path on the left-hand side of `+`, not `&Copy`
+ --> $DIR/trait-object-reference-without-parens-suggestion.rs:12:12
+ |
+12 | let _: &Copy + 'static;
+ | ^^^^^^^^^^^^^^^ try adding parentheses: `&(Copy + 'static)`
+
+error[E0178]: expected a path on the left-hand side of `+`, not `&'static Copy`
+ --> $DIR/trait-object-reference-without-parens-suggestion.rs:13:12
+ |
+13 | let _: &'static Copy + 'static;
+ | ^^^^^^^^^^^^^^^^^^^^^^^ try adding parentheses: `&'static (Copy + 'static)`
+
+error[E0038]: the trait `std::marker::Copy` cannot be made into an object
+ --> $DIR/trait-object-reference-without-parens-suggestion.rs:12:12
+ |
+12 | let _: &Copy + 'static;
+ | ^^^^^ the trait `std::marker::Copy` cannot be made into an object
+ |
+ = note: the trait cannot require that `Self : Sized`
+
+error: aborting due to previous error
+