mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-25 00:03:43 +00:00
Auto merge of #42033 - oli-obk:suggestions, r=petrochenkov
Change some notes into suggestions r? @petrochenkov since you commented on the same edits in #39458
This commit is contained in:
commit
5803f99bd4
@ -991,7 +991,7 @@ impl<'a, 'tcx> BorrowckCtxt<'a, 'tcx> {
|
||||
.span_suggestion(err.span,
|
||||
&format!("to force the closure to take ownership of {} \
|
||||
(and any other referenced variables), \
|
||||
use the `move` keyword, as shown:",
|
||||
use the `move` keyword",
|
||||
cmt_path_or_string),
|
||||
suggestion)
|
||||
.emit();
|
||||
|
@ -211,6 +211,18 @@ impl Diagnostic {
|
||||
|
||||
/// Prints out a message with a suggested edit of the code.
|
||||
///
|
||||
/// In case of short messages and a simple suggestion,
|
||||
/// rustc displays it as a label like
|
||||
///
|
||||
/// "try adding parentheses: `(tup.0).1`"
|
||||
///
|
||||
/// The message
|
||||
/// * should not end in any punctuation (a `:` is added automatically)
|
||||
/// * should not be a question
|
||||
/// * should not contain any parts like "the following", "as shown"
|
||||
/// * may look like "to do xyz, use" or "to do xyz, use abc"
|
||||
/// * may contain a name of a function, variable or type, but not whole expressions
|
||||
///
|
||||
/// See `diagnostic::CodeSuggestion` for more information.
|
||||
pub fn span_suggestion(&mut self, sp: Span, msg: &str, suggestion: String) -> &mut Self {
|
||||
self.suggestions.push(CodeSuggestion {
|
||||
|
@ -51,7 +51,7 @@ impl Emitter for EmitterWriter {
|
||||
// This substitution is only removal, don't show it
|
||||
format!("help: {}", sugg.msg)
|
||||
} else {
|
||||
format!("help: {} `{}`", sugg.msg, substitution)
|
||||
format!("help: {}: `{}`", sugg.msg, substitution)
|
||||
};
|
||||
primary_span.push_span_label(sugg.substitution_spans().next().unwrap(), msg);
|
||||
} else {
|
||||
|
@ -2409,13 +2409,15 @@ impl<'a> Resolver<'a> {
|
||||
.map(|suggestion| import_candidate_to_paths(&suggestion)).collect::<Vec<_>>();
|
||||
enum_candidates.sort();
|
||||
for (sp, variant_path, enum_path) in enum_candidates {
|
||||
let msg = format!("there is an enum variant `{}`, did you mean to use `{}`?",
|
||||
variant_path,
|
||||
enum_path);
|
||||
if sp == DUMMY_SP {
|
||||
let msg = format!("there is an enum variant `{}`, \
|
||||
try using `{}`?",
|
||||
variant_path,
|
||||
enum_path);
|
||||
err.help(&msg);
|
||||
} else {
|
||||
err.span_help(sp, &msg);
|
||||
err.span_suggestion(span, "you can try using the variant's enum",
|
||||
enum_path);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -2424,18 +2426,20 @@ impl<'a> Resolver<'a> {
|
||||
let self_is_available = this.self_value_is_available(path[0].ctxt, span);
|
||||
match candidate {
|
||||
AssocSuggestion::Field => {
|
||||
err.span_label(span, format!("did you mean `self.{}`?", path_str));
|
||||
err.span_suggestion(span, "try",
|
||||
format!("self.{}", path_str));
|
||||
if !self_is_available {
|
||||
err.span_label(span, format!("`self` value is only available in \
|
||||
methods with `self` parameter"));
|
||||
}
|
||||
}
|
||||
AssocSuggestion::MethodWithSelf if self_is_available => {
|
||||
err.span_label(span, format!("did you mean `self.{}(...)`?",
|
||||
path_str));
|
||||
err.span_suggestion(span, "try",
|
||||
format!("self.{}", path_str));
|
||||
}
|
||||
AssocSuggestion::MethodWithSelf | AssocSuggestion::AssocItem => {
|
||||
err.span_label(span, format!("did you mean `Self::{}`?", path_str));
|
||||
err.span_suggestion(span, "try",
|
||||
format!("Self::{}", path_str));
|
||||
}
|
||||
}
|
||||
return err;
|
||||
|
@ -658,9 +658,10 @@ impl<'a> Resolver<'a> {
|
||||
if let Some(suggestion) = suggestion {
|
||||
if suggestion != name {
|
||||
if let MacroKind::Bang = kind {
|
||||
err.help(&format!("did you mean `{}!`?", suggestion));
|
||||
err.span_suggestion(span, "you could try the macro",
|
||||
format!("{}!", suggestion));
|
||||
} else {
|
||||
err.help(&format!("did you mean `{}`?", suggestion));
|
||||
err.span_suggestion(span, "try", suggestion.to_string());
|
||||
}
|
||||
} else {
|
||||
err.help("have you added the `#[macro_use]` on the module/import?");
|
||||
|
@ -253,7 +253,7 @@ impl<'a, 'gcx, 'tcx> CastCheck<'tcx> {
|
||||
match fcx.tcx.sess.codemap().span_to_snippet(self.cast_span) {
|
||||
Ok(s) => {
|
||||
err.span_suggestion(self.cast_span,
|
||||
"try casting to a reference instead:",
|
||||
"try casting to a reference instead",
|
||||
format!("&{}{}", mtstr, s));
|
||||
}
|
||||
Err(_) => {
|
||||
@ -272,7 +272,7 @@ impl<'a, 'gcx, 'tcx> CastCheck<'tcx> {
|
||||
match fcx.tcx.sess.codemap().span_to_snippet(self.cast_span) {
|
||||
Ok(s) => {
|
||||
err.span_suggestion(self.cast_span,
|
||||
"try casting to a `Box` instead:",
|
||||
"try casting to a `Box` instead",
|
||||
format!("Box<{}>", s));
|
||||
}
|
||||
Err(_) => span_help!(err, self.cast_span, "did you mean `Box<{}>`?", tstr),
|
||||
|
@ -320,7 +320,7 @@ impl<'a, 'gcx, 'tcx> FnCtxt<'a, 'gcx, 'tcx> {
|
||||
from a string reference. 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."), suggestion);
|
||||
requires ownership of the string on the left"), suggestion);
|
||||
is_string_addition = true;
|
||||
}
|
||||
|
||||
|
@ -1490,7 +1490,7 @@ impl<'a> Parser<'a> {
|
||||
s.print_bounds(" +", &bounds)?;
|
||||
s.pclose()
|
||||
});
|
||||
err.span_suggestion(sum_span, "try adding parentheses:", sum_with_parens);
|
||||
err.span_suggestion(sum_span, "try adding parentheses", sum_with_parens);
|
||||
}
|
||||
TyKind::Ptr(..) | TyKind::BareFn(..) => {
|
||||
err.span_label(sum_span, "perhaps you forgot parentheses?");
|
||||
@ -5280,7 +5280,7 @@ impl<'a> Parser<'a> {
|
||||
`pub(in path::to::module)`: visible only on the specified path"##;
|
||||
let path = self.parse_path(PathStyle::Mod)?;
|
||||
let path_span = self.prev_span;
|
||||
let help_msg = format!("make this visible only to module `{}` with `in`:", path);
|
||||
let help_msg = format!("make this visible only to module `{}` with `in`", path);
|
||||
self.expect(&token::CloseDelim(token::Paren))?; // `)`
|
||||
let mut err = self.span_fatal_help(path_span, msg, suggestion);
|
||||
err.span_suggestion(path_span, &help_msg, format!("in {}", path));
|
||||
|
@ -12,14 +12,13 @@
|
||||
enum Fruit { //~ HELP possible candidate is found in another module, you can import it into scope
|
||||
//~^ HELP possible candidate is found in another module, you can import it into scope
|
||||
Apple(i64),
|
||||
//~^ HELP there is an enum variant `Fruit::Apple`, did you mean to use `Fruit`?
|
||||
//~| HELP there is an enum variant `Fruit::Apple`, did you mean to use `Fruit`?
|
||||
Orange(i64),
|
||||
}
|
||||
|
||||
fn should_return_fruit() -> Apple {
|
||||
//~^ ERROR cannot find type `Apple` in this scope
|
||||
//~| NOTE not found in this scope
|
||||
//~| HELP you can try using the variant's enum
|
||||
Apple(5)
|
||||
//~^ ERROR cannot find function `Apple` in this scope
|
||||
//~| NOTE not found in this scope
|
||||
@ -27,6 +26,7 @@ fn should_return_fruit() -> Apple {
|
||||
|
||||
fn should_return_fruit_too() -> Fruit::Apple {
|
||||
//~^ ERROR expected type, found variant `Fruit::Apple`
|
||||
//~| HELP you can try using the variant's enum
|
||||
//~| NOTE not a type
|
||||
Apple(5)
|
||||
//~^ ERROR cannot find function `Apple` in this scope
|
||||
@ -43,6 +43,7 @@ fn foo() -> Ok {
|
||||
|
||||
fn bar() -> Variant3 {
|
||||
//~^ ERROR cannot find type `Variant3` in this scope
|
||||
//~| HELP you can try using the variant's enum
|
||||
//~| NOTE not found in this scope
|
||||
}
|
||||
|
||||
@ -61,7 +62,6 @@ mod x {
|
||||
Variant1,
|
||||
Variant2(),
|
||||
Variant3(usize),
|
||||
//~^ HELP there is an enum variant `x::Enum::Variant3`, did you mean to use `x::Enum`?
|
||||
Variant4 {},
|
||||
}
|
||||
}
|
||||
|
23
src/test/ui-fulldeps/auxiliary/attr_proc_macro.rs
Normal file
23
src/test/ui-fulldeps/auxiliary/attr_proc_macro.rs
Normal file
@ -0,0 +1,23 @@
|
||||
// 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.
|
||||
|
||||
// force-host
|
||||
// no-prefer-dynamic
|
||||
#![feature(proc_macro)]
|
||||
#![crate_type = "proc-macro"]
|
||||
|
||||
extern crate proc_macro;
|
||||
|
||||
use proc_macro::TokenStream;
|
||||
|
||||
#[proc_macro_attribute]
|
||||
pub fn attr_proc_macro(_: TokenStream, input: TokenStream) -> TokenStream {
|
||||
input
|
||||
}
|
23
src/test/ui-fulldeps/auxiliary/bang_proc_macro.rs
Normal file
23
src/test/ui-fulldeps/auxiliary/bang_proc_macro.rs
Normal file
@ -0,0 +1,23 @@
|
||||
// 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.
|
||||
|
||||
// force-host
|
||||
// no-prefer-dynamic
|
||||
#![feature(proc_macro)]
|
||||
#![crate_type = "proc-macro"]
|
||||
|
||||
extern crate proc_macro;
|
||||
|
||||
use proc_macro::TokenStream;
|
||||
|
||||
#[proc_macro]
|
||||
pub fn bang_proc_macro(input: TokenStream) -> TokenStream {
|
||||
input
|
||||
}
|
23
src/test/ui-fulldeps/auxiliary/derive-clona.rs
Normal file
23
src/test/ui-fulldeps/auxiliary/derive-clona.rs
Normal file
@ -0,0 +1,23 @@
|
||||
// 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.
|
||||
|
||||
// force-host
|
||||
// no-prefer-dynamic
|
||||
|
||||
#![crate_type = "proc-macro"]
|
||||
|
||||
extern crate proc_macro;
|
||||
|
||||
use proc_macro::TokenStream;
|
||||
|
||||
#[proc_macro_derive(Clona)]
|
||||
pub fn derive_clonea(input: TokenStream) -> TokenStream {
|
||||
"".parse().unwrap()
|
||||
}
|
23
src/test/ui-fulldeps/auxiliary/derive-foo.rs
Normal file
23
src/test/ui-fulldeps/auxiliary/derive-foo.rs
Normal file
@ -0,0 +1,23 @@
|
||||
// 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.
|
||||
|
||||
// force-host
|
||||
// no-prefer-dynamic
|
||||
|
||||
#![crate_type = "proc-macro"]
|
||||
|
||||
extern crate proc_macro;
|
||||
|
||||
use proc_macro::TokenStream;
|
||||
|
||||
#[proc_macro_derive(FooWithLongName)]
|
||||
pub fn derive_foo(input: TokenStream) -> TokenStream {
|
||||
"".parse().unwrap()
|
||||
}
|
@ -35,46 +35,29 @@ macro_rules! attr_proc_mac {
|
||||
}
|
||||
|
||||
#[derive(FooWithLongNan)]
|
||||
//~^ ERROR cannot find derive macro `FooWithLongNan` in this scope
|
||||
//~^^ HELP did you mean `FooWithLongName`?
|
||||
struct Foo;
|
||||
|
||||
#[attr_proc_macra]
|
||||
//~^ ERROR cannot find attribute macro `attr_proc_macra` in this scope
|
||||
//~^^ HELP did you mean `attr_proc_macro`?
|
||||
struct Bar;
|
||||
|
||||
#[FooWithLongNan]
|
||||
//~^ ERROR cannot find attribute macro `FooWithLongNan` in this scope
|
||||
struct Asdf;
|
||||
|
||||
#[derive(Dlone)]
|
||||
//~^ ERROR cannot find derive macro `Dlone` in this scope
|
||||
//~^^ HELP did you mean `Clone`?
|
||||
struct A;
|
||||
|
||||
#[derive(Dlona)]
|
||||
//~^ ERROR cannot find derive macro `Dlona` in this scope
|
||||
//~^^ HELP did you mean `Clona`?
|
||||
struct B;
|
||||
|
||||
#[derive(attr_proc_macra)]
|
||||
//~^ ERROR cannot find derive macro `attr_proc_macra` in this scope
|
||||
struct C;
|
||||
|
||||
fn main() {
|
||||
FooWithLongNama!();
|
||||
//~^ ERROR cannot find macro `FooWithLongNama!` in this scope
|
||||
//~^^ HELP did you mean `FooWithLongNam!`?
|
||||
|
||||
attr_proc_macra!();
|
||||
//~^ ERROR cannot find macro `attr_proc_macra!` in this scope
|
||||
//~^^ HELP did you mean `attr_proc_mac!`?
|
||||
|
||||
Dlona!();
|
||||
//~^ ERROR cannot find macro `Dlona!` in this scope
|
||||
|
||||
bang_proc_macrp!();
|
||||
//~^ ERROR cannot find macro `bang_proc_macrp!` in this scope
|
||||
//~^^ HELP did you mean `bang_proc_macro!`?
|
||||
}
|
62
src/test/ui-fulldeps/resolve-error.stderr
Normal file
62
src/test/ui-fulldeps/resolve-error.stderr
Normal file
@ -0,0 +1,62 @@
|
||||
error: cannot find derive macro `FooWithLongNan` in this scope
|
||||
--> $DIR/resolve-error.rs:37:10
|
||||
|
|
||||
37 | #[derive(FooWithLongNan)]
|
||||
| ^^^^^^^^^^^^^^ help: try: `FooWithLongName`
|
||||
|
||||
error: cannot find attribute macro `attr_proc_macra` in this scope
|
||||
--> $DIR/resolve-error.rs:40:3
|
||||
|
|
||||
40 | #[attr_proc_macra]
|
||||
| ^^^^^^^^^^^^^^^ help: try: `attr_proc_macro`
|
||||
|
||||
error: cannot find attribute macro `FooWithLongNan` in this scope
|
||||
--> $DIR/resolve-error.rs:43:3
|
||||
|
|
||||
43 | #[FooWithLongNan]
|
||||
| ^^^^^^^^^^^^^^
|
||||
|
||||
error: cannot find derive macro `Dlone` in this scope
|
||||
--> $DIR/resolve-error.rs:46:10
|
||||
|
|
||||
46 | #[derive(Dlone)]
|
||||
| ^^^^^ help: try: `Clone`
|
||||
|
||||
error: cannot find derive macro `Dlona` in this scope
|
||||
--> $DIR/resolve-error.rs:49:10
|
||||
|
|
||||
49 | #[derive(Dlona)]
|
||||
| ^^^^^ help: try: `Clona`
|
||||
|
||||
error: cannot find derive macro `attr_proc_macra` in this scope
|
||||
--> $DIR/resolve-error.rs:52:10
|
||||
|
|
||||
52 | #[derive(attr_proc_macra)]
|
||||
| ^^^^^^^^^^^^^^^
|
||||
|
||||
error: cannot find macro `FooWithLongNama!` in this scope
|
||||
--> $DIR/resolve-error.rs:56:5
|
||||
|
|
||||
56 | FooWithLongNama!();
|
||||
| ^^^^^^^^^^^^^^^ help: you could try the macro: `FooWithLongNam!`
|
||||
|
||||
error: cannot find macro `attr_proc_macra!` in this scope
|
||||
--> $DIR/resolve-error.rs:58:5
|
||||
|
|
||||
58 | attr_proc_macra!();
|
||||
| ^^^^^^^^^^^^^^^ help: you could try the macro: `attr_proc_mac!`
|
||||
|
||||
error: cannot find macro `Dlona!` in this scope
|
||||
--> $DIR/resolve-error.rs:60:5
|
||||
|
|
||||
60 | Dlona!();
|
||||
| ^^^^^
|
||||
|
||||
error: cannot find macro `bang_proc_macrp!` in this scope
|
||||
--> $DIR/resolve-error.rs:62:5
|
||||
|
|
||||
62 | bang_proc_macrp!();
|
||||
| ^^^^^^^^^^^^^^^ help: you could try the macro: `bang_proc_macro!`
|
||||
|
||||
error: aborting due to 10 previous errors
|
||||
|
@ -10,11 +10,5 @@
|
||||
|
||||
fn main() {
|
||||
&1 as Send;
|
||||
//~^ ERROR cast to unsized type
|
||||
//~| HELP try casting to a reference instead:
|
||||
//~| SUGGESTION &1 as &Send;
|
||||
Box::new(1) as Send;
|
||||
//~^ ERROR cast to unsized type
|
||||
//~| HELP try casting to a `Box` instead:
|
||||
//~| SUGGESTION Box::new(1) as Box<Send>;
|
||||
}
|
18
src/test/ui/cast-to-unsized-trait-object-suggestion.stderr
Normal file
18
src/test/ui/cast-to-unsized-trait-object-suggestion.stderr
Normal file
@ -0,0 +1,18 @@
|
||||
error[E0620]: cast to unsized type: `&{integer}` as `std::marker::Send`
|
||||
--> $DIR/cast-to-unsized-trait-object-suggestion.rs:12:5
|
||||
|
|
||||
12 | &1 as Send;
|
||||
| ^^^^^^----
|
||||
| |
|
||||
| help: try casting to a reference instead: `&Send`
|
||||
|
||||
error[E0620]: cast to unsized type: `std::boxed::Box<{integer}>` as `std::marker::Send`
|
||||
--> $DIR/cast-to-unsized-trait-object-suggestion.rs:13:5
|
||||
|
|
||||
13 | Box::new(1) as Send;
|
||||
| ^^^^^^^^^^^^^^^----
|
||||
| |
|
||||
| help: try casting to a `Box` instead: `Box<Send>`
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
51
src/test/ui/issue-35675.rs
Normal file
51
src/test/ui/issue-35675.rs
Normal file
@ -0,0 +1,51 @@
|
||||
// Copyright 2017 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.
|
||||
|
||||
// these two HELPs are actually in a new line between this line and the `enum Fruit` line
|
||||
enum Fruit { //~ HELP possible candidate is found in another module, you can import it into scope
|
||||
//~^ HELP possible candidate is found in another module, you can import it into scope
|
||||
Apple(i64),
|
||||
//~^ HELP there is an enum variant `Fruit::Apple`, did you mean to use `Fruit`?
|
||||
//~| HELP there is an enum variant `Fruit::Apple`, did you mean to use `Fruit`?
|
||||
Orange(i64),
|
||||
}
|
||||
|
||||
fn should_return_fruit() -> Apple {
|
||||
//~^ ERROR cannot find type `Apple` in this scope
|
||||
//~| NOTE not found in this scope
|
||||
Apple(5)
|
||||
//~^ ERROR cannot find function `Apple` in this scope
|
||||
//~| NOTE not found in this scope
|
||||
}
|
||||
|
||||
fn should_return_fruit_too() -> Fruit::Apple {
|
||||
//~^ ERROR expected type, found variant `Fruit::Apple`
|
||||
//~| NOTE not a type
|
||||
Apple(5)
|
||||
//~^ ERROR cannot find function `Apple` in this scope
|
||||
//~| NOTE not found in this scope
|
||||
}
|
||||
|
||||
fn bar() -> Variant3 {
|
||||
//~^ ERROR cannot find type `Variant3` in this scope
|
||||
//~| NOTE not found in this scope
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
|
||||
mod x {
|
||||
enum Enum {
|
||||
Variant1,
|
||||
Variant2(),
|
||||
Variant3(usize),
|
||||
//~^ HELP there is an enum variant `x::Enum::Variant3`, did you mean to use `x::Enum`?
|
||||
Variant4 {},
|
||||
}
|
||||
}
|
51
src/test/ui/issue-35675.stderr
Normal file
51
src/test/ui/issue-35675.stderr
Normal file
@ -0,0 +1,51 @@
|
||||
error[E0412]: cannot find type `Apple` in this scope
|
||||
--> $DIR/issue-35675.rs:20:29
|
||||
|
|
||||
20 | fn should_return_fruit() -> Apple {
|
||||
| ^^^^^
|
||||
| |
|
||||
| not found in this scope
|
||||
| help: you can try using the variant's enum: `Fruit`
|
||||
|
||||
error[E0425]: cannot find function `Apple` in this scope
|
||||
--> $DIR/issue-35675.rs:23:5
|
||||
|
|
||||
23 | Apple(5)
|
||||
| ^^^^^ not found in this scope
|
||||
|
|
||||
help: possible candidate is found in another module, you can import it into scope
|
||||
|
|
||||
12 | use Fruit::Apple;
|
||||
|
|
||||
|
||||
error[E0573]: expected type, found variant `Fruit::Apple`
|
||||
--> $DIR/issue-35675.rs:28:33
|
||||
|
|
||||
28 | fn should_return_fruit_too() -> Fruit::Apple {
|
||||
| ^^^^^^^^^^^^
|
||||
| |
|
||||
| not a type
|
||||
| help: you can try using the variant's enum: `Fruit`
|
||||
|
||||
error[E0425]: cannot find function `Apple` in this scope
|
||||
--> $DIR/issue-35675.rs:31:5
|
||||
|
|
||||
31 | Apple(5)
|
||||
| ^^^^^ not found in this scope
|
||||
|
|
||||
help: possible candidate is found in another module, you can import it into scope
|
||||
|
|
||||
12 | use Fruit::Apple;
|
||||
|
|
||||
|
||||
error[E0412]: cannot find type `Variant3` in this scope
|
||||
--> $DIR/issue-35675.rs:36:13
|
||||
|
|
||||
36 | fn bar() -> Variant3 {
|
||||
| ^^^^^^^^
|
||||
| |
|
||||
| not found in this scope
|
||||
| help: you can try using the variant's enum: `x::Enum`
|
||||
|
||||
error: aborting due to 5 previous errors
|
||||
|
@ -4,7 +4,7 @@ error[E0507]: cannot move out of indexed content
|
||||
19 | let e = f.v[0];
|
||||
| ^^^^^^
|
||||
| |
|
||||
| help: consider using a reference instead `&f.v[0]`
|
||||
| help: consider using a reference instead: `&f.v[0]`
|
||||
| cannot move out of indexed content
|
||||
|
||||
error: aborting due to previous error
|
||||
|
@ -10,6 +10,4 @@
|
||||
|
||||
fn main() {
|
||||
printlx!("oh noes!");
|
||||
//~^ ERROR cannot find macro
|
||||
//~^^ HELP did you mean `println!`?
|
||||
}
|
8
src/test/ui/macros/macro-name-typo.stderr
Normal file
8
src/test/ui/macros/macro-name-typo.stderr
Normal file
@ -0,0 +1,8 @@
|
||||
error: cannot find macro `printlx!` in this scope
|
||||
--> $DIR/macro-name-typo.rs:12:5
|
||||
|
|
||||
12 | printlx!("oh noes!");
|
||||
| ^^^^^^^ help: you could try the macro: `println!`
|
||||
|
||||
error: aborting due to previous error
|
||||
|
@ -19,9 +19,5 @@ mod m {
|
||||
|
||||
fn main() {
|
||||
k!();
|
||||
//~^ ERROR cannot find macro `k!` in this scope
|
||||
//~^^ HELP did you mean `kl!`?
|
||||
kl!();
|
||||
//~^ ERROR cannot find macro `kl!` in this scope
|
||||
//~^^ HELP have you added the `#[macro_use]` on the module/import?
|
||||
}
|
16
src/test/ui/macros/macro_undefined.stderr
Normal file
16
src/test/ui/macros/macro_undefined.stderr
Normal file
@ -0,0 +1,16 @@
|
||||
error: cannot find macro `kl!` in this scope
|
||||
--> $DIR/macro_undefined.rs:22:5
|
||||
|
|
||||
22 | kl!();
|
||||
| ^^
|
||||
|
|
||||
= help: have you added the `#[macro_use]` on the module/import?
|
||||
|
||||
error: cannot find macro `k!` in this scope
|
||||
--> $DIR/macro_undefined.rs:21:5
|
||||
|
|
||||
21 | k!();
|
||||
| ^ help: you could try the macro: `kl!`
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
@ -2,7 +2,7 @@ error[E0308]: mismatched types
|
||||
--> $DIR/issue-19109.rs:14:5
|
||||
|
|
||||
13 | fn function(t: &mut Trait) {
|
||||
| - help: possibly return type missing here? `-> *mut Trait `
|
||||
| - help: possibly return type missing here?: `-> *mut Trait `
|
||||
14 | t as *mut Trait
|
||||
| ^^^^^^^^^^^^^^^ expected (), found *-ptr
|
||||
|
|
||||
|
62
src/test/ui/resolve-error.stderr
Normal file
62
src/test/ui/resolve-error.stderr
Normal file
@ -0,0 +1,62 @@
|
||||
error: cannot find derive macro `FooWithLongNan` in this scope
|
||||
--> $DIR/resolve-error.rs:37:10
|
||||
|
|
||||
37 | #[derive(FooWithLongNan)]
|
||||
| ^^^^^^^^^^^^^^ help: try: `FooWithLongName`
|
||||
|
||||
error: cannot find attribute macro `attr_proc_macra` in this scope
|
||||
--> $DIR/resolve-error.rs:40:3
|
||||
|
|
||||
40 | #[attr_proc_macra]
|
||||
| ^^^^^^^^^^^^^^^ help: try: `attr_proc_macro`
|
||||
|
||||
error: cannot find attribute macro `FooWithLongNan` in this scope
|
||||
--> $DIR/resolve-error.rs:43:3
|
||||
|
|
||||
43 | #[FooWithLongNan]
|
||||
| ^^^^^^^^^^^^^^
|
||||
|
||||
error: cannot find derive macro `Dlone` in this scope
|
||||
--> $DIR/resolve-error.rs:46:10
|
||||
|
|
||||
46 | #[derive(Dlone)]
|
||||
| ^^^^^ help: try: `Clone`
|
||||
|
||||
error: cannot find derive macro `Dlona` in this scope
|
||||
--> $DIR/resolve-error.rs:49:10
|
||||
|
|
||||
49 | #[derive(Dlona)]
|
||||
| ^^^^^ help: try: `Clona`
|
||||
|
||||
error: cannot find derive macro `attr_proc_macra` in this scope
|
||||
--> $DIR/resolve-error.rs:52:10
|
||||
|
|
||||
52 | #[derive(attr_proc_macra)]
|
||||
| ^^^^^^^^^^^^^^^
|
||||
|
||||
error: cannot find macro `FooWithLongNama!` in this scope
|
||||
--> $DIR/resolve-error.rs:56:5
|
||||
|
|
||||
56 | FooWithLongNama!();
|
||||
| ^^^^^^^^^^^^^^^ help: you could try the macro: `FooWithLongNam!`
|
||||
|
||||
error: cannot find macro `attr_proc_macra!` in this scope
|
||||
--> $DIR/resolve-error.rs:58:5
|
||||
|
|
||||
58 | attr_proc_macra!();
|
||||
| ^^^^^^^^^^^^^^^ help: you could try the macro: `attr_proc_mac!`
|
||||
|
||||
error: cannot find macro `Dlona!` in this scope
|
||||
--> $DIR/resolve-error.rs:60:5
|
||||
|
|
||||
60 | Dlona!();
|
||||
| ^^^^^
|
||||
|
||||
error: cannot find macro `bang_proc_macrp!` in this scope
|
||||
--> $DIR/resolve-error.rs:62:5
|
||||
|
|
||||
62 | bang_proc_macrp!();
|
||||
| ^^^^^^^^^^^^^^^ help: you could try the macro: `bang_proc_macro!`
|
||||
|
||||
error: aborting due to previous error(s)
|
||||
|
@ -2,7 +2,7 @@ error[E0425]: cannot find function `baz` in this scope
|
||||
--> $DIR/issue-14254.rs:29:9
|
||||
|
|
||||
29 | baz();
|
||||
| ^^^ did you mean `self.baz(...)`?
|
||||
| ^^^ help: try: `self.baz`
|
||||
|
||||
error[E0425]: cannot find value `a` in this scope
|
||||
--> $DIR/issue-14254.rs:32:9
|
||||
@ -14,19 +14,19 @@ error[E0425]: cannot find function `baz` in this scope
|
||||
--> $DIR/issue-14254.rs:40:9
|
||||
|
|
||||
40 | baz();
|
||||
| ^^^ did you mean `self.baz(...)`?
|
||||
| ^^^ help: try: `self.baz`
|
||||
|
||||
error[E0425]: cannot find value `x` in this scope
|
||||
--> $DIR/issue-14254.rs:43:9
|
||||
|
|
||||
43 | x;
|
||||
| ^ did you mean `self.x`?
|
||||
| ^ help: try: `self.x`
|
||||
|
||||
error[E0425]: cannot find value `y` in this scope
|
||||
--> $DIR/issue-14254.rs:46:9
|
||||
|
|
||||
46 | y;
|
||||
| ^ did you mean `self.y`?
|
||||
| ^ help: try: `self.y`
|
||||
|
||||
error[E0425]: cannot find value `a` in this scope
|
||||
--> $DIR/issue-14254.rs:49:9
|
||||
@ -38,7 +38,7 @@ error[E0425]: cannot find value `bah` in this scope
|
||||
--> $DIR/issue-14254.rs:52:9
|
||||
|
|
||||
52 | bah;
|
||||
| ^^^ did you mean `Self::bah`?
|
||||
| ^^^ help: try: `Self::bah`
|
||||
|
||||
error[E0425]: cannot find value `b` in this scope
|
||||
--> $DIR/issue-14254.rs:55:9
|
||||
@ -50,19 +50,19 @@ error[E0425]: cannot find function `baz` in this scope
|
||||
--> $DIR/issue-14254.rs:63:9
|
||||
|
|
||||
63 | baz();
|
||||
| ^^^ did you mean `self.baz(...)`?
|
||||
| ^^^ help: try: `self.baz`
|
||||
|
||||
error[E0425]: cannot find value `x` in this scope
|
||||
--> $DIR/issue-14254.rs:66:9
|
||||
|
|
||||
66 | x;
|
||||
| ^ did you mean `self.x`?
|
||||
| ^ help: try: `self.x`
|
||||
|
||||
error[E0425]: cannot find value `y` in this scope
|
||||
--> $DIR/issue-14254.rs:69:9
|
||||
|
|
||||
69 | y;
|
||||
| ^ did you mean `self.y`?
|
||||
| ^ help: try: `self.y`
|
||||
|
||||
error[E0425]: cannot find value `a` in this scope
|
||||
--> $DIR/issue-14254.rs:72:9
|
||||
@ -74,7 +74,7 @@ error[E0425]: cannot find value `bah` in this scope
|
||||
--> $DIR/issue-14254.rs:75:9
|
||||
|
|
||||
75 | bah;
|
||||
| ^^^ did you mean `Self::bah`?
|
||||
| ^^^ help: try: `Self::bah`
|
||||
|
||||
error[E0425]: cannot find value `b` in this scope
|
||||
--> $DIR/issue-14254.rs:78:9
|
||||
@ -86,61 +86,61 @@ error[E0425]: cannot find function `baz` in this scope
|
||||
--> $DIR/issue-14254.rs:86:9
|
||||
|
|
||||
86 | baz();
|
||||
| ^^^ did you mean `self.baz(...)`?
|
||||
| ^^^ help: try: `self.baz`
|
||||
|
||||
error[E0425]: cannot find value `bah` in this scope
|
||||
--> $DIR/issue-14254.rs:89:9
|
||||
|
|
||||
89 | bah;
|
||||
| ^^^ did you mean `Self::bah`?
|
||||
| ^^^ help: try: `Self::bah`
|
||||
|
||||
error[E0425]: cannot find function `baz` in this scope
|
||||
--> $DIR/issue-14254.rs:97:9
|
||||
|
|
||||
97 | baz();
|
||||
| ^^^ did you mean `self.baz(...)`?
|
||||
| ^^^ help: try: `self.baz`
|
||||
|
||||
error[E0425]: cannot find value `bah` in this scope
|
||||
--> $DIR/issue-14254.rs:100:9
|
||||
|
|
||||
100 | bah;
|
||||
| ^^^ did you mean `Self::bah`?
|
||||
| ^^^ help: try: `Self::bah`
|
||||
|
||||
error[E0425]: cannot find function `baz` in this scope
|
||||
--> $DIR/issue-14254.rs:108:9
|
||||
|
|
||||
108 | baz();
|
||||
| ^^^ did you mean `self.baz(...)`?
|
||||
| ^^^ help: try: `self.baz`
|
||||
|
||||
error[E0425]: cannot find value `bah` in this scope
|
||||
--> $DIR/issue-14254.rs:111:9
|
||||
|
|
||||
111 | bah;
|
||||
| ^^^ did you mean `Self::bah`?
|
||||
| ^^^ help: try: `Self::bah`
|
||||
|
||||
error[E0425]: cannot find function `baz` in this scope
|
||||
--> $DIR/issue-14254.rs:119:9
|
||||
|
|
||||
119 | baz();
|
||||
| ^^^ did you mean `self.baz(...)`?
|
||||
| ^^^ help: try: `self.baz`
|
||||
|
||||
error[E0425]: cannot find value `bah` in this scope
|
||||
--> $DIR/issue-14254.rs:122:9
|
||||
|
|
||||
122 | bah;
|
||||
| ^^^ did you mean `Self::bah`?
|
||||
| ^^^ help: try: `Self::bah`
|
||||
|
||||
error[E0425]: cannot find function `baz` in this scope
|
||||
--> $DIR/issue-14254.rs:130:9
|
||||
|
|
||||
130 | baz();
|
||||
| ^^^ did you mean `self.baz(...)`?
|
||||
| ^^^ help: try: `self.baz`
|
||||
|
||||
error[E0425]: cannot find value `bah` in this scope
|
||||
--> $DIR/issue-14254.rs:133:9
|
||||
|
|
||||
133 | bah;
|
||||
| ^^^ did you mean `Self::bah`?
|
||||
| ^^^ help: try: `Self::bah`
|
||||
|
||||
error[E0601]: main function not found
|
||||
|
||||
|
@ -8,13 +8,13 @@ error[E0425]: cannot find function `clone` in this scope
|
||||
--> $DIR/issue-2356.rs:35:5
|
||||
|
|
||||
35 | clone();
|
||||
| ^^^^^ did you mean `self.clone(...)`?
|
||||
| ^^^^^ help: try: `self.clone`
|
||||
|
||||
error[E0425]: cannot find function `default` in this scope
|
||||
--> $DIR/issue-2356.rs:43:5
|
||||
|
|
||||
43 | default();
|
||||
| ^^^^^^^ did you mean `Self::default`?
|
||||
| ^^^^^^^ help: try: `Self::default`
|
||||
|
||||
error[E0425]: cannot find value `whiskers` in this scope
|
||||
--> $DIR/issue-2356.rs:52:5
|
||||
@ -22,14 +22,14 @@ error[E0425]: cannot find value `whiskers` in this scope
|
||||
52 | whiskers -= other;
|
||||
| ^^^^^^^^
|
||||
| |
|
||||
| did you mean `self.whiskers`?
|
||||
| help: try: `self.whiskers`
|
||||
| `self` value is only available in methods with `self` parameter
|
||||
|
||||
error[E0425]: cannot find function `shave` in this scope
|
||||
--> $DIR/issue-2356.rs:57:5
|
||||
|
|
||||
57 | shave(4);
|
||||
| ^^^^^ did you mean `Self::shave`?
|
||||
| ^^^^^ help: try: `Self::shave`
|
||||
|
||||
error[E0425]: cannot find function `purr` in this scope
|
||||
--> $DIR/issue-2356.rs:60:5
|
||||
@ -83,7 +83,7 @@ error[E0425]: cannot find value `whiskers` in this scope
|
||||
--> $DIR/issue-2356.rs:104:5
|
||||
|
|
||||
104 | whiskers = 0;
|
||||
| ^^^^^^^^ did you mean `self.whiskers`?
|
||||
| ^^^^^^^^ help: try: `self.whiskers`
|
||||
|
||||
error[E0425]: cannot find value `whiskers` in this scope
|
||||
--> $DIR/issue-2356.rs:110:5
|
||||
@ -91,7 +91,7 @@ error[E0425]: cannot find value `whiskers` in this scope
|
||||
110 | whiskers = 4;
|
||||
| ^^^^^^^^
|
||||
| |
|
||||
| did you mean `self.whiskers`?
|
||||
| help: try: `self.whiskers`
|
||||
| `self` value is only available in methods with `self` parameter
|
||||
|
||||
error[E0425]: cannot find function `purr_louder` in this scope
|
||||
|
@ -14,13 +14,13 @@ error[E0425]: cannot find value `field` in this scope
|
||||
--> $DIR/resolve-assoc-suggestions.rs:32:9
|
||||
|
|
||||
32 | field;
|
||||
| ^^^^^ did you mean `self.field`?
|
||||
| ^^^^^ help: try: `self.field`
|
||||
|
||||
error[E0412]: cannot find type `Type` in this scope
|
||||
--> $DIR/resolve-assoc-suggestions.rs:36:16
|
||||
|
|
||||
36 | let _: Type;
|
||||
| ^^^^ did you mean `Self::Type`?
|
||||
| ^^^^ help: try: `Self::Type`
|
||||
|
||||
error[E0531]: cannot find tuple struct/variant `Type` in this scope
|
||||
--> $DIR/resolve-assoc-suggestions.rs:39:13
|
||||
@ -50,7 +50,7 @@ error[E0425]: cannot find value `method` in this scope
|
||||
--> $DIR/resolve-assoc-suggestions.rs:52:9
|
||||
|
|
||||
52 | method;
|
||||
| ^^^^^^ did you mean `self.method(...)`?
|
||||
| ^^^^^^ help: try: `self.method`
|
||||
|
||||
error: aborting due to 9 previous errors
|
||||
|
||||
|
@ -14,13 +14,13 @@ error[E0425]: cannot find value `field` in this scope
|
||||
--> $DIR/resolve-speculative-adjustment.rs:35:9
|
||||
|
|
||||
35 | field;
|
||||
| ^^^^^ did you mean `self.field`?
|
||||
| ^^^^^ help: try: `self.field`
|
||||
|
||||
error[E0425]: cannot find function `method` in this scope
|
||||
--> $DIR/resolve-speculative-adjustment.rs:38:9
|
||||
|
|
||||
38 | method();
|
||||
| ^^^^^^ did you mean `self.method(...)`?
|
||||
| ^^^^^^ help: try: `self.method`
|
||||
|
||||
error: aborting due to 4 previous errors
|
||||
|
||||
|
@ -35,7 +35,7 @@ error[E0308]: mismatched types
|
||||
--> $DIR/token-error-correct-3.rs:25:13
|
||||
|
|
||||
25 | fs::create_dir_all(path.as_ref()).map(|()| true) //~ ERROR: mismatched types
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^- help: did you mean to add a semicolon here? `;`
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^- help: did you mean to add a semicolon here?: `;`
|
||||
| |
|
||||
| expected (), found enum `std::result::Result`
|
||||
|
|
||||
|
@ -4,7 +4,7 @@ error[E0425]: cannot find value `cx` in this scope
|
||||
19 | f(cx);
|
||||
| ^^
|
||||
| |
|
||||
| did you mean `self.cx`?
|
||||
| help: try: `self.cx`
|
||||
| `self` value is only available in methods with `self` parameter
|
||||
|
||||
error: aborting due to previous error
|
||||
|
@ -4,7 +4,7 @@ error[E0369]: binary operation `+` cannot be applied to type `&'static str`
|
||||
12 | let x = "Hello " + "World!";
|
||||
| ^^^^^^^^^^^^^^^^^^^ `+` can't be used to concatenate two `&str` strings
|
||||
|
|
||||
help: `to_owned()` can be used to create an owned `String` from a string reference. 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.
|
||||
help: `to_owned()` can be used to create an owned `String` from a string reference. 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
|
||||
|
|
||||
12 | let x = "Hello ".to_owned() + "World!";
|
||||
| ^^^^^^^^^^^^^^^^^^^
|
||||
|
@ -2,7 +2,7 @@ error[E0608]: cannot index into a value of type `({integer},)`
|
||||
--> $DIR/suggestion-non-ascii.rs:14:21
|
||||
|
|
||||
14 | println!("☃{}", tup[0]);
|
||||
| ^^^^^^ help: to access tuple elements, use `tup.0`
|
||||
| ^^^^^^ help: to access tuple elements, use: `tup.0`
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
|
@ -5,7 +5,7 @@ error: unexpected token: `1.1`
|
||||
| ------------^^^
|
||||
| | |
|
||||
| | unexpected token
|
||||
| help: try parenthesizing the first index `((1, (2, 3)).1).1`
|
||||
| help: try parenthesizing the first index: `((1, (2, 3)).1).1`
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
|
@ -4,7 +4,7 @@ error[E0308]: mismatched types
|
||||
25 | if x = x {
|
||||
| ^^^^^
|
||||
| |
|
||||
| help: did you mean to compare equality? `x == x`
|
||||
| help: did you mean to compare equality?: `x == x`
|
||||
| expected bool, found ()
|
||||
|
|
||||
= note: expected type `bool`
|
||||
@ -16,7 +16,7 @@ error[E0308]: mismatched types
|
||||
31 | if (x = x) {
|
||||
| ^^^^^^^
|
||||
| |
|
||||
| help: did you mean to compare equality? `x == x`
|
||||
| help: did you mean to compare equality?: `x == x`
|
||||
| expected bool, found ()
|
||||
|
|
||||
= note: expected type `bool`
|
||||
@ -28,7 +28,7 @@ error[E0308]: mismatched types
|
||||
37 | if y = (Foo { foo: x }) {
|
||||
| ^^^^^^^^^^^^^^^^^^^^
|
||||
| |
|
||||
| help: did you mean to compare equality? `y == (Foo { foo: x })`
|
||||
| help: did you mean to compare equality?: `y == (Foo { foo: x })`
|
||||
| expected bool, found ()
|
||||
|
|
||||
= note: expected type `bool`
|
||||
@ -40,7 +40,7 @@ error[E0308]: mismatched types
|
||||
43 | if 3 = x {
|
||||
| ^^^^^
|
||||
| |
|
||||
| help: did you mean to compare equality? `3 == x`
|
||||
| help: did you mean to compare equality?: `3 == x`
|
||||
| expected bool, found ()
|
||||
|
|
||||
= note: expected type `bool`
|
||||
|
Loading…
Reference in New Issue
Block a user