From e935acfa5c8240305119372a596bd563b0b0fb2c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Esteban=20K=C3=BCber?= Date: Fri, 2 Jun 2017 10:15:13 -0700 Subject: [PATCH] Use multiline note for trait suggestion --- src/librustc_typeck/check/method/suggest.rs | 57 +++-- .../no-method-suggested-traits.rs | 134 ----------- .../auxiliary/no_method_suggested_traits.rs | 0 ...issue-21659-show-relevant-trait-impls-3.rs | 0 ...e-21659-show-relevant-trait-impls-3.stderr | 11 + .../method-suggestion-no-duplication.rs | 0 .../method-suggestion-no-duplication.stderr | 13 ++ .../impl-trait/no-method-suggested-traits.rs | 133 +++++++++++ .../no-method-suggested-traits.stderr | 212 ++++++++++++++++++ src/test/ui/span/issue-7575.stderr | 8 +- 10 files changed, 401 insertions(+), 167 deletions(-) delete mode 100644 src/test/compile-fail/no-method-suggested-traits.rs rename src/test/{compile-fail => ui/impl-trait}/auxiliary/no_method_suggested_traits.rs (100%) rename src/test/{compile-fail => ui/impl-trait}/issue-21659-show-relevant-trait-impls-3.rs (100%) create mode 100644 src/test/ui/impl-trait/issue-21659-show-relevant-trait-impls-3.stderr rename src/test/{compile-fail => ui/impl-trait}/method-suggestion-no-duplication.rs (100%) create mode 100644 src/test/ui/impl-trait/method-suggestion-no-duplication.stderr create mode 100644 src/test/ui/impl-trait/no-method-suggested-traits.rs create mode 100644 src/test/ui/impl-trait/no-method-suggested-traits.stderr diff --git a/src/librustc_typeck/check/method/suggest.rs b/src/librustc_typeck/check/method/suggest.rs index 594f1813a5a..51f16f8a49f 100644 --- a/src/librustc_typeck/check/method/suggest.rs +++ b/src/librustc_typeck/check/method/suggest.rs @@ -228,7 +228,7 @@ impl<'a, 'gcx, 'tcx> FnCtxt<'a, 'gcx, 'tcx> { macro_rules! report_function { ($span:expr, $name:expr) => { err.note(&format!("{} is a function, perhaps you wish to call it", - $name)); + $name)); } } @@ -315,9 +315,9 @@ impl<'a, 'gcx, 'tcx> FnCtxt<'a, 'gcx, 'tcx> { let mut candidates = valid_out_of_scope_traits; candidates.sort(); candidates.dedup(); - let msg = format!("items from traits can only be used if the trait is in scope; the \ - following {traits_are} implemented but not in scope, perhaps add \ - a `use` for {one_of_them}:", + let mut msg = format!("items from traits can only be used if the trait is in scope; \ + the following {traits_are} implemented but not in scope, \ + perhaps add a `use` for {one_of_them}:", traits_are = if candidates.len() == 1 { "trait is" } else { @@ -329,17 +329,17 @@ impl<'a, 'gcx, 'tcx> FnCtxt<'a, 'gcx, 'tcx> { "one of them" }); - err.help(&msg[..]); - let limit = if candidates.len() == 5 { 5 } else { 4 }; for (i, trait_did) in candidates.iter().take(limit).enumerate() { - err.help(&format!("candidate #{}: `use {};`", - i + 1, - self.tcx.item_path_str(*trait_did))); + msg.push_str(&format!("\ncandidate #{}: `use {};`", + i + 1, + self.tcx.item_path_str(*trait_did))); } if candidates.len() > limit { - err.note(&format!("and {} others", candidates.len() - limit)); + msg.push_str(&format!("\nand {} others", candidates.len() - limit)); } + err.help(&msg[..]); + return; } @@ -369,28 +369,27 @@ impl<'a, 'gcx, 'tcx> FnCtxt<'a, 'gcx, 'tcx> { // FIXME #21673 this help message could be tuned to the case // of a type parameter: suggest adding a trait bound rather // than implementing. - let msg = format!("items from traits can only be used if the trait is implemented \ - and in scope; the following {traits_define} an item `{name}`, \ - perhaps you need to implement {one_of_them}:", - traits_define = if candidates.len() == 1 { - "trait defines" - } else { - "traits define" - }, - one_of_them = if candidates.len() == 1 { - "it" - } else { - "one of them" - }, - name = item_name); - - err.help(&msg[..]); + let mut msg = format!("items from traits can only be used if the trait is implemented \ + and in scope; the following {traits_define} an item `{name}`, \ + perhaps you need to implement {one_of_them}:", + traits_define = if candidates.len() == 1 { + "trait defines" + } else { + "traits define" + }, + one_of_them = if candidates.len() == 1 { + "it" + } else { + "one of them" + }, + name = item_name); for (i, trait_info) in candidates.iter().enumerate() { - err.help(&format!("candidate #{}: `{}`", - i + 1, - self.tcx.item_path_str(trait_info.def_id))); + msg.push_str(&format!("\ncandidate #{}: `{}`", + i + 1, + self.tcx.item_path_str(trait_info.def_id))); } + err.help(&msg[..]); } } diff --git a/src/test/compile-fail/no-method-suggested-traits.rs b/src/test/compile-fail/no-method-suggested-traits.rs deleted file mode 100644 index a8d97d4674c..00000000000 --- a/src/test/compile-fail/no-method-suggested-traits.rs +++ /dev/null @@ -1,134 +0,0 @@ -// 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 or the MIT license -// , at your -// option. This file may not be copied, modified, or distributed -// except according to those terms. - -// aux-build:no_method_suggested_traits.rs - -extern crate no_method_suggested_traits; - -struct Foo; -enum Bar { X } - -mod foo { - pub trait Bar { - fn method(&self) {} - - fn method2(&self) {} - } - - impl Bar for u32 {} - - impl Bar for char {} -} - -fn main() { - // test the values themselves, and autoderef. - - - 1u32.method(); - //~^ HELP following traits are implemented but not in scope, perhaps add a `use` for one of them - //~^^ ERROR no method named - //~^^^ HELP `use foo::Bar;` - //~^^^^ HELP `use no_method_suggested_traits::foo::PubPub;` - std::rc::Rc::new(&mut Box::new(&1u32)).method(); - //~^ HELP following traits are implemented but not in scope, perhaps add a `use` for one of them - //~^^ ERROR no method named - //~^^^ HELP `use foo::Bar;` - //~^^^^ HELP `use no_method_suggested_traits::foo::PubPub;` - - 'a'.method(); - //~^ ERROR no method named - //~^^ HELP the following trait is implemented but not in scope, perhaps add a `use` for it: - //~^^^ HELP `use foo::Bar;` - std::rc::Rc::new(&mut Box::new(&'a')).method(); - //~^ ERROR no method named - //~^^ HELP the following trait is implemented but not in scope, perhaps add a `use` for it: - //~^^^ HELP `use foo::Bar;` - - 1i32.method(); - //~^ ERROR no method named - //~^^ HELP the following trait is implemented but not in scope, perhaps add a `use` for it: - //~^^^ HELP `use no_method_suggested_traits::foo::PubPub;` - std::rc::Rc::new(&mut Box::new(&1i32)).method(); - //~^ ERROR no method named - //~^^ HELP the following trait is implemented but not in scope, perhaps add a `use` for it: - //~^^^ HELP `use no_method_suggested_traits::foo::PubPub;` - - Foo.method(); - //~^ ERROR no method named - //~^^ HELP following traits define an item `method`, perhaps you need to implement one of them - //~^^^ HELP `foo::Bar` - //~^^^^ HELP `no_method_suggested_traits::foo::PubPub` - //~^^^^^ HELP `no_method_suggested_traits::Reexported` - //~^^^^^^ HELP `no_method_suggested_traits::bar::PubPriv` - //~^^^^^^^ HELP `no_method_suggested_traits::qux::PrivPub` - //~^^^^^^^^ HELP `no_method_suggested_traits::quz::PrivPriv` - std::rc::Rc::new(&mut Box::new(&Foo)).method(); - //~^ ERROR no method named - //~^^ HELP following traits define an item `method`, perhaps you need to implement one of them - //~^^^ HELP `foo::Bar` - //~^^^^ HELP `no_method_suggested_traits::foo::PubPub` - //~^^^^^ HELP `no_method_suggested_traits::Reexported` - //~^^^^^^ HELP `no_method_suggested_traits::bar::PubPriv` - //~^^^^^^^ HELP `no_method_suggested_traits::qux::PrivPub` - //~^^^^^^^^ HELP `no_method_suggested_traits::quz::PrivPriv` - - 1u64.method2(); - //~^ ERROR no method named - //~^^ HELP the following trait defines an item `method2`, perhaps you need to implement it - //~^^^ HELP `foo::Bar` - std::rc::Rc::new(&mut Box::new(&1u64)).method2(); - //~^ ERROR no method named - //~^^ HELP the following trait defines an item `method2`, perhaps you need to implement it - //~^^^ HELP `foo::Bar` - - no_method_suggested_traits::Foo.method2(); - //~^ ERROR no method named - //~^^ HELP following trait defines an item `method2`, perhaps you need to implement it - //~^^^ HELP `foo::Bar` - std::rc::Rc::new(&mut Box::new(&no_method_suggested_traits::Foo)).method2(); - //~^ ERROR no method named - //~^^ HELP following trait defines an item `method2`, perhaps you need to implement it - //~^^^ HELP `foo::Bar` - no_method_suggested_traits::Bar::X.method2(); - //~^ ERROR no method named - //~^^ HELP following trait defines an item `method2`, perhaps you need to implement it - //~^^^ HELP `foo::Bar` - std::rc::Rc::new(&mut Box::new(&no_method_suggested_traits::Bar::X)).method2(); - //~^ ERROR no method named - //~^^ HELP following trait defines an item `method2`, perhaps you need to implement it - //~^^^ HELP `foo::Bar` - - Foo.method3(); - //~^ ERROR no method named - //~^^ HELP following trait defines an item `method3`, perhaps you need to implement it - //~^^^ HELP `no_method_suggested_traits::foo::PubPub` - std::rc::Rc::new(&mut Box::new(&Foo)).method3(); - //~^ ERROR no method named - //~^^ HELP following trait defines an item `method3`, perhaps you need to implement it - //~^^^ HELP `no_method_suggested_traits::foo::PubPub` - Bar::X.method3(); - //~^ ERROR no method named - //~^^ HELP following trait defines an item `method3`, perhaps you need to implement it - //~^^^ HELP `no_method_suggested_traits::foo::PubPub` - std::rc::Rc::new(&mut Box::new(&Bar::X)).method3(); - //~^ ERROR no method named - //~^^ HELP following trait defines an item `method3`, perhaps you need to implement it - //~^^^ HELP `no_method_suggested_traits::foo::PubPub` - - // should have no help: - 1_usize.method3(); //~ ERROR no method named - std::rc::Rc::new(&mut Box::new(&1_usize)).method3(); //~ ERROR no method named - no_method_suggested_traits::Foo.method3(); //~ ERROR no method named - std::rc::Rc::new(&mut Box::new(&no_method_suggested_traits::Foo)).method3(); - //~^ ERROR no method named - no_method_suggested_traits::Bar::X.method3(); //~ ERROR no method named - std::rc::Rc::new(&mut Box::new(&no_method_suggested_traits::Bar::X)).method3(); - //~^ ERROR no method named -} diff --git a/src/test/compile-fail/auxiliary/no_method_suggested_traits.rs b/src/test/ui/impl-trait/auxiliary/no_method_suggested_traits.rs similarity index 100% rename from src/test/compile-fail/auxiliary/no_method_suggested_traits.rs rename to src/test/ui/impl-trait/auxiliary/no_method_suggested_traits.rs diff --git a/src/test/compile-fail/issue-21659-show-relevant-trait-impls-3.rs b/src/test/ui/impl-trait/issue-21659-show-relevant-trait-impls-3.rs similarity index 100% rename from src/test/compile-fail/issue-21659-show-relevant-trait-impls-3.rs rename to src/test/ui/impl-trait/issue-21659-show-relevant-trait-impls-3.rs diff --git a/src/test/ui/impl-trait/issue-21659-show-relevant-trait-impls-3.stderr b/src/test/ui/impl-trait/issue-21659-show-relevant-trait-impls-3.stderr new file mode 100644 index 00000000000..38a1337c9b9 --- /dev/null +++ b/src/test/ui/impl-trait/issue-21659-show-relevant-trait-impls-3.stderr @@ -0,0 +1,11 @@ +error[E0599]: no method named `foo` found for type `Bar` in the current scope + --> $DIR/issue-21659-show-relevant-trait-impls-3.rs:30:8 + | +30 | f1.foo(1usize); + | ^^^ + | + = help: items from traits can only be used if the trait is implemented and in scope; the following trait defines an item `foo`, perhaps you need to implement it: + candidate #1: `Foo` + +error: aborting due to previous error(s) + diff --git a/src/test/compile-fail/method-suggestion-no-duplication.rs b/src/test/ui/impl-trait/method-suggestion-no-duplication.rs similarity index 100% rename from src/test/compile-fail/method-suggestion-no-duplication.rs rename to src/test/ui/impl-trait/method-suggestion-no-duplication.rs diff --git a/src/test/ui/impl-trait/method-suggestion-no-duplication.stderr b/src/test/ui/impl-trait/method-suggestion-no-duplication.stderr new file mode 100644 index 00000000000..a548924815a --- /dev/null +++ b/src/test/ui/impl-trait/method-suggestion-no-duplication.stderr @@ -0,0 +1,13 @@ +error[E0599]: no method named `is_empty` found for type `Foo` in the current scope + --> $DIR/method-suggestion-no-duplication.rs:19:15 + | +19 | foo(|s| s.is_empty()); + | ^^^^^^^^ + | + = help: items from traits can only be used if the trait is implemented and in scope; the following traits define an item `is_empty`, perhaps you need to implement one of them: + candidate #1: `std::iter::ExactSizeIterator` + candidate #2: `core::slice::SliceExt` + candidate #3: `core::str::StrExt` + +error: aborting due to previous error(s) + diff --git a/src/test/ui/impl-trait/no-method-suggested-traits.rs b/src/test/ui/impl-trait/no-method-suggested-traits.rs new file mode 100644 index 00000000000..15891b00028 --- /dev/null +++ b/src/test/ui/impl-trait/no-method-suggested-traits.rs @@ -0,0 +1,133 @@ +// 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// aux-build:no_method_suggested_traits.rs +extern crate no_method_suggested_traits; + +struct Foo; +enum Bar { X } + +mod foo { + pub trait Bar { + fn method(&self) {} + + fn method2(&self) {} + } + + impl Bar for u32 {} + + impl Bar for char {} +} + +fn main() { + // test the values themselves, and autoderef. + + + 1u32.method(); + //~^ HELP following traits are implemented but not in scope, perhaps add a `use` for one of them + //~| ERROR no method named + //~| HELP `use foo::Bar;` + //~| HELP `use no_method_suggested_traits::foo::PubPub;` + std::rc::Rc::new(&mut Box::new(&1u32)).method(); + //~^ HELP following traits are implemented but not in scope, perhaps add a `use` for one of them + //~| ERROR no method named + //~| HELP `use foo::Bar;` + //~| HELP `use no_method_suggested_traits::foo::PubPub;` + + 'a'.method(); + //~^ ERROR no method named + //~| HELP the following trait is implemented but not in scope, perhaps add a `use` for it: + //~| HELP `use foo::Bar;` + std::rc::Rc::new(&mut Box::new(&'a')).method(); + //~^ ERROR no method named + //~| HELP the following trait is implemented but not in scope, perhaps add a `use` for it: + //~| HELP `use foo::Bar;` + + 1i32.method(); + //~^ ERROR no method named + //~| HELP the following trait is implemented but not in scope, perhaps add a `use` for it: + //~| HELP `use no_method_suggested_traits::foo::PubPub;` + std::rc::Rc::new(&mut Box::new(&1i32)).method(); + //~^ ERROR no method named + //~| HELP the following trait is implemented but not in scope, perhaps add a `use` for it: + //~| HELP `use no_method_suggested_traits::foo::PubPub;` + + Foo.method(); + //~^ ERROR no method named + //~| HELP following traits define an item `method`, perhaps you need to implement one of them + //~| HELP `foo::Bar` + //~| HELP `no_method_suggested_traits::foo::PubPub` + //~| HELP `no_method_suggested_traits::Reexported` + //~| HELP `no_method_suggested_traits::bar::PubPriv` + //~| HELP `no_method_suggested_traits::qux::PrivPub` + //~| HELP `no_method_suggested_traits::quz::PrivPriv` + std::rc::Rc::new(&mut Box::new(&Foo)).method(); + //~^ ERROR no method named + //~| HELP following traits define an item `method`, perhaps you need to implement one of them + //~| HELP `foo::Bar` + //~| HELP `no_method_suggested_traits::foo::PubPub` + //~| HELP `no_method_suggested_traits::Reexported` + //~| HELP `no_method_suggested_traits::bar::PubPriv` + //~| HELP `no_method_suggested_traits::qux::PrivPub` + //~| HELP `no_method_suggested_traits::quz::PrivPriv` + + 1u64.method2(); + //~^ ERROR no method named + //~| HELP the following trait defines an item `method2`, perhaps you need to implement it + //~| HELP `foo::Bar` + std::rc::Rc::new(&mut Box::new(&1u64)).method2(); + //~^ ERROR no method named + //~| HELP the following trait defines an item `method2`, perhaps you need to implement it + //~| HELP `foo::Bar` + + no_method_suggested_traits::Foo.method2(); + //~^ ERROR no method named + //~| HELP following trait defines an item `method2`, perhaps you need to implement it + //~| HELP `foo::Bar` + std::rc::Rc::new(&mut Box::new(&no_method_suggested_traits::Foo)).method2(); + //~^ ERROR no method named + //~| HELP following trait defines an item `method2`, perhaps you need to implement it + //~| HELP `foo::Bar` + no_method_suggested_traits::Bar::X.method2(); + //~^ ERROR no method named + //~| HELP following trait defines an item `method2`, perhaps you need to implement it + //~| HELP `foo::Bar` + std::rc::Rc::new(&mut Box::new(&no_method_suggested_traits::Bar::X)).method2(); + //~^ ERROR no method named + //~| HELP following trait defines an item `method2`, perhaps you need to implement it + //~| HELP `foo::Bar` + + Foo.method3(); + //~^ ERROR no method named + //~| HELP following trait defines an item `method3`, perhaps you need to implement it + //~| HELP `no_method_suggested_traits::foo::PubPub` + std::rc::Rc::new(&mut Box::new(&Foo)).method3(); + //~^ ERROR no method named + //~| HELP following trait defines an item `method3`, perhaps you need to implement it + //~| HELP `no_method_suggested_traits::foo::PubPub` + Bar::X.method3(); + //~^ ERROR no method named + //~| HELP following trait defines an item `method3`, perhaps you need to implement it + //~| HELP `no_method_suggested_traits::foo::PubPub` + std::rc::Rc::new(&mut Box::new(&Bar::X)).method3(); + //~^ ERROR no method named + //~| HELP following trait defines an item `method3`, perhaps you need to implement it + //~| HELP `no_method_suggested_traits::foo::PubPub` + + // should have no help: + 1_usize.method3(); //~ ERROR no method named + std::rc::Rc::new(&mut Box::new(&1_usize)).method3(); //~ ERROR no method named + no_method_suggested_traits::Foo.method3(); //~ ERROR no method named + std::rc::Rc::new(&mut Box::new(&no_method_suggested_traits::Foo)).method3(); + //~^ ERROR no method named + no_method_suggested_traits::Bar::X.method3(); //~ ERROR no method named + std::rc::Rc::new(&mut Box::new(&no_method_suggested_traits::Bar::X)).method3(); + //~^ ERROR no method named +} diff --git a/src/test/ui/impl-trait/no-method-suggested-traits.stderr b/src/test/ui/impl-trait/no-method-suggested-traits.stderr new file mode 100644 index 00000000000..ab5f6b6c6c8 --- /dev/null +++ b/src/test/ui/impl-trait/no-method-suggested-traits.stderr @@ -0,0 +1,212 @@ +error[E0599]: no method named `method` found for type `u32` in the current scope + --> $DIR/no-method-suggested-traits.rs:33:10 + | +33 | 1u32.method(); + | ^^^^^^ + | + = help: items from traits can only be used if the trait is in scope; the following traits are implemented but not in scope, perhaps add a `use` for one of them: + candidate #1: `use foo::Bar;` + candidate #2: `use no_method_suggested_traits::foo::PubPub;` + +error[E0599]: no method named `method` found for type `std::rc::Rc<&mut std::boxed::Box<&u32>>` in the current scope + --> $DIR/no-method-suggested-traits.rs:38:44 + | +38 | std::rc::Rc::new(&mut Box::new(&1u32)).method(); + | ^^^^^^ + | + = help: items from traits can only be used if the trait is in scope; the following traits are implemented but not in scope, perhaps add a `use` for one of them: + candidate #1: `use foo::Bar;` + candidate #2: `use no_method_suggested_traits::foo::PubPub;` + +error[E0599]: no method named `method` found for type `char` in the current scope + --> $DIR/no-method-suggested-traits.rs:44:9 + | +44 | 'a'.method(); + | ^^^^^^ + | + = help: items from traits can only be used if the trait is in scope; the following trait is implemented but not in scope, perhaps add a `use` for it: + candidate #1: `use foo::Bar;` + +error[E0599]: no method named `method` found for type `std::rc::Rc<&mut std::boxed::Box<&char>>` in the current scope + --> $DIR/no-method-suggested-traits.rs:48:43 + | +48 | std::rc::Rc::new(&mut Box::new(&'a')).method(); + | ^^^^^^ + | + = help: items from traits can only be used if the trait is in scope; the following trait is implemented but not in scope, perhaps add a `use` for it: + candidate #1: `use foo::Bar;` + +error[E0599]: no method named `method` found for type `i32` in the current scope + --> $DIR/no-method-suggested-traits.rs:53:10 + | +53 | 1i32.method(); + | ^^^^^^ + | + = help: items from traits can only be used if the trait is in scope; the following trait is implemented but not in scope, perhaps add a `use` for it: + candidate #1: `use no_method_suggested_traits::foo::PubPub;` + +error[E0599]: no method named `method` found for type `std::rc::Rc<&mut std::boxed::Box<&i32>>` in the current scope + --> $DIR/no-method-suggested-traits.rs:57:44 + | +57 | std::rc::Rc::new(&mut Box::new(&1i32)).method(); + | ^^^^^^ + | + = help: items from traits can only be used if the trait is in scope; the following trait is implemented but not in scope, perhaps add a `use` for it: + candidate #1: `use no_method_suggested_traits::foo::PubPub;` + +error[E0599]: no method named `method` found for type `Foo` in the current scope + --> $DIR/no-method-suggested-traits.rs:62:9 + | +62 | Foo.method(); + | ^^^^^^ + | + = help: items from traits can only be used if the trait is implemented and in scope; the following traits define an item `method`, perhaps you need to implement one of them: + candidate #1: `foo::Bar` + candidate #2: `no_method_suggested_traits::foo::PubPub` + candidate #3: `no_method_suggested_traits::bar::PubPriv` + candidate #4: `no_method_suggested_traits::qux::PrivPub` + candidate #5: `no_method_suggested_traits::quz::PrivPriv` + candidate #6: `no_method_suggested_traits::Reexported` + +error[E0599]: no method named `method` found for type `std::rc::Rc<&mut std::boxed::Box<&Foo>>` in the current scope + --> $DIR/no-method-suggested-traits.rs:71:43 + | +71 | std::rc::Rc::new(&mut Box::new(&Foo)).method(); + | ^^^^^^ + | + = help: items from traits can only be used if the trait is implemented and in scope; the following traits define an item `method`, perhaps you need to implement one of them: + candidate #1: `foo::Bar` + candidate #2: `no_method_suggested_traits::foo::PubPub` + candidate #3: `no_method_suggested_traits::bar::PubPriv` + candidate #4: `no_method_suggested_traits::qux::PrivPub` + candidate #5: `no_method_suggested_traits::quz::PrivPriv` + candidate #6: `no_method_suggested_traits::Reexported` + +error[E0599]: no method named `method2` found for type `u64` in the current scope + --> $DIR/no-method-suggested-traits.rs:81:10 + | +81 | 1u64.method2(); + | ^^^^^^^ + | + = help: items from traits can only be used if the trait is implemented and in scope; the following trait defines an item `method2`, perhaps you need to implement it: + candidate #1: `foo::Bar` + +error[E0599]: no method named `method2` found for type `std::rc::Rc<&mut std::boxed::Box<&u64>>` in the current scope + --> $DIR/no-method-suggested-traits.rs:85:44 + | +85 | std::rc::Rc::new(&mut Box::new(&1u64)).method2(); + | ^^^^^^^ + | + = help: items from traits can only be used if the trait is implemented and in scope; the following trait defines an item `method2`, perhaps you need to implement it: + candidate #1: `foo::Bar` + +error[E0599]: no method named `method2` found for type `no_method_suggested_traits::Foo` in the current scope + --> $DIR/no-method-suggested-traits.rs:90:37 + | +90 | no_method_suggested_traits::Foo.method2(); + | ^^^^^^^ + | + = help: items from traits can only be used if the trait is implemented and in scope; the following trait defines an item `method2`, perhaps you need to implement it: + candidate #1: `foo::Bar` + +error[E0599]: no method named `method2` found for type `std::rc::Rc<&mut std::boxed::Box<&no_method_suggested_traits::Foo>>` in the current scope + --> $DIR/no-method-suggested-traits.rs:94:71 + | +94 | std::rc::Rc::new(&mut Box::new(&no_method_suggested_traits::Foo)).method2(); + | ^^^^^^^ + | + = help: items from traits can only be used if the trait is implemented and in scope; the following trait defines an item `method2`, perhaps you need to implement it: + candidate #1: `foo::Bar` + +error[E0599]: no method named `method2` found for type `no_method_suggested_traits::Bar` in the current scope + --> $DIR/no-method-suggested-traits.rs:98:40 + | +98 | no_method_suggested_traits::Bar::X.method2(); + | ^^^^^^^ + | + = help: items from traits can only be used if the trait is implemented and in scope; the following trait defines an item `method2`, perhaps you need to implement it: + candidate #1: `foo::Bar` + +error[E0599]: no method named `method2` found for type `std::rc::Rc<&mut std::boxed::Box<&no_method_suggested_traits::Bar>>` in the current scope + --> $DIR/no-method-suggested-traits.rs:102:74 + | +102 | std::rc::Rc::new(&mut Box::new(&no_method_suggested_traits::Bar::X)).method2(); + | ^^^^^^^ + | + = help: items from traits can only be used if the trait is implemented and in scope; the following trait defines an item `method2`, perhaps you need to implement it: + candidate #1: `foo::Bar` + +error[E0599]: no method named `method3` found for type `Foo` in the current scope + --> $DIR/no-method-suggested-traits.rs:107:9 + | +107 | Foo.method3(); + | ^^^^^^^ + | + = help: items from traits can only be used if the trait is implemented and in scope; the following trait defines an item `method3`, perhaps you need to implement it: + candidate #1: `no_method_suggested_traits::foo::PubPub` + +error[E0599]: no method named `method3` found for type `std::rc::Rc<&mut std::boxed::Box<&Foo>>` in the current scope + --> $DIR/no-method-suggested-traits.rs:111:43 + | +111 | std::rc::Rc::new(&mut Box::new(&Foo)).method3(); + | ^^^^^^^ + | + = help: items from traits can only be used if the trait is implemented and in scope; the following trait defines an item `method3`, perhaps you need to implement it: + candidate #1: `no_method_suggested_traits::foo::PubPub` + +error[E0599]: no method named `method3` found for type `Bar` in the current scope + --> $DIR/no-method-suggested-traits.rs:115:12 + | +115 | Bar::X.method3(); + | ^^^^^^^ + | + = help: items from traits can only be used if the trait is implemented and in scope; the following trait defines an item `method3`, perhaps you need to implement it: + candidate #1: `no_method_suggested_traits::foo::PubPub` + +error[E0599]: no method named `method3` found for type `std::rc::Rc<&mut std::boxed::Box<&Bar>>` in the current scope + --> $DIR/no-method-suggested-traits.rs:119:46 + | +119 | std::rc::Rc::new(&mut Box::new(&Bar::X)).method3(); + | ^^^^^^^ + | + = help: items from traits can only be used if the trait is implemented and in scope; the following trait defines an item `method3`, perhaps you need to implement it: + candidate #1: `no_method_suggested_traits::foo::PubPub` + +error[E0599]: no method named `method3` found for type `usize` in the current scope + --> $DIR/no-method-suggested-traits.rs:125:13 + | +125 | 1_usize.method3(); //~ ERROR no method named + | ^^^^^^^ + +error[E0599]: no method named `method3` found for type `std::rc::Rc<&mut std::boxed::Box<&usize>>` in the current scope + --> $DIR/no-method-suggested-traits.rs:126:47 + | +126 | std::rc::Rc::new(&mut Box::new(&1_usize)).method3(); //~ ERROR no method named + | ^^^^^^^ + +error[E0599]: no method named `method3` found for type `no_method_suggested_traits::Foo` in the current scope + --> $DIR/no-method-suggested-traits.rs:127:37 + | +127 | no_method_suggested_traits::Foo.method3(); //~ ERROR no method named + | ^^^^^^^ + +error[E0599]: no method named `method3` found for type `std::rc::Rc<&mut std::boxed::Box<&no_method_suggested_traits::Foo>>` in the current scope + --> $DIR/no-method-suggested-traits.rs:128:71 + | +128 | std::rc::Rc::new(&mut Box::new(&no_method_suggested_traits::Foo)).method3(); + | ^^^^^^^ + +error[E0599]: no method named `method3` found for type `no_method_suggested_traits::Bar` in the current scope + --> $DIR/no-method-suggested-traits.rs:130:40 + | +130 | no_method_suggested_traits::Bar::X.method3(); //~ ERROR no method named + | ^^^^^^^ + +error[E0599]: no method named `method3` found for type `std::rc::Rc<&mut std::boxed::Box<&no_method_suggested_traits::Bar>>` in the current scope + --> $DIR/no-method-suggested-traits.rs:131:74 + | +131 | std::rc::Rc::new(&mut Box::new(&no_method_suggested_traits::Bar::X)).method3(); + | ^^^^^^^ + +error: aborting due to previous error(s) + diff --git a/src/test/ui/span/issue-7575.stderr b/src/test/ui/span/issue-7575.stderr index 9f368f0de96..249dfb15b49 100644 --- a/src/test/ui/span/issue-7575.stderr +++ b/src/test/ui/span/issue-7575.stderr @@ -24,9 +24,9 @@ note: candidate #3 is defined in the trait `UnusedTrait` | ^^^^^^^^^^^^^^^^^^^^^^ = help: to disambiguate the method call, write `UnusedTrait::f9(u, 342)` instead = help: items from traits can only be used if the trait is implemented and in scope; the following traits define an item `f9`, perhaps you need to implement one of them: - = help: candidate #1: `CtxtFn` - = help: candidate #2: `OtherTrait` - = help: candidate #3: `UnusedTrait` + candidate #1: `CtxtFn` + candidate #2: `OtherTrait` + candidate #3: `UnusedTrait` error[E0599]: no method named `fff` found for type `Myisize` in the current scope --> $DIR/issue-7575.rs:74:30 @@ -59,7 +59,7 @@ note: candidate #1 is defined in the trait `ManyImplTrait` | |_____^ = help: to disambiguate the method call, write `ManyImplTrait::is_str(t)` instead = help: items from traits can only be used if the trait is implemented and in scope; the following trait defines an item `is_str`, perhaps you need to implement it: - = help: candidate #1: `ManyImplTrait` + candidate #1: `ManyImplTrait` error: aborting due to previous error(s)