let field_ty = field.ty(tcx, substs);
if self.is_fn_ty(&field_ty, span) {
- err.span_note(span,
- &format!("use `({0}.{1})(...)` if you \
- meant to call the function \
- stored in the `{1}` field",
- expr_string,
- item_name));
+ err.help(&format!("use `({0}.{1})(...)` if you \
+ meant to call the function \
+ stored in the `{1}` field",
+ expr_string,
+ item_name));
} else {
- err.span_note(span,
- &format!("did you mean to write `{0}.{1}`?",
- expr_string,
- item_name));
+ err.help(&format!("did you mean to write `{0}.{1}` \
+ instead of `{0}.{1}(...)`?",
+ expr_string,
+ item_name));
}
+ err.span_label(span, &"field, not a method");
break;
}
}
+++ /dev/null
-// Copyright 2014 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.
-
-struct Obj<F> where F: FnMut() -> u32 {
- closure: F,
-}
-
-fn main() {
- let o = Obj { closure: || 42 };
- o.closure(); //~ ERROR no method named `closure` found
- //~^ NOTE use `(o.closure)(...)` if you meant to call the function stored in the `closure` field
-}
+++ /dev/null
-// Copyright 2014 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.
-
-#![feature(core, fnbox)]
-
-use std::boxed::FnBox;
-
-struct FuncContainer {
- f1: fn(data: u8),
- f2: extern "C" fn(data: u8),
- f3: unsafe fn(data: u8),
-}
-
-struct FuncContainerOuter {
- container: Box<FuncContainer>
-}
-
-struct Obj<F> where F: FnOnce() -> u32 {
- closure: F,
- not_closure: usize,
-}
-
-struct BoxedObj {
- boxed_closure: Box<FnBox() -> u32>,
-}
-
-struct Wrapper<F> where F: FnMut() -> u32 {
- wrap: Obj<F>,
-}
-
-fn func() -> u32 {
- 0
-}
-
-fn check_expression() -> Obj<Box<FnBox() -> u32>> {
- Obj { closure: Box::new(|| 42_u32) as Box<FnBox() -> u32>, not_closure: 42 }
-}
-
-fn main() {
- // test variations of function
-
- let o_closure = Obj { closure: || 42, not_closure: 42 };
- o_closure.closure(); //~ ERROR no method named `closure` found
- //~^ NOTE use `(o_closure.closure)(...)` if you meant to call the function stored
-
- o_closure.not_closure(); //~ ERROR no method named `not_closure` found
- //~^ NOTE did you mean to write `o_closure.not_closure`?
-
- let o_func = Obj { closure: func, not_closure: 5 };
- o_func.closure(); //~ ERROR no method named `closure` found
- //~^ NOTE use `(o_func.closure)(...)` if you meant to call the function stored
-
- let boxed_fn = BoxedObj { boxed_closure: Box::new(func) };
- boxed_fn.boxed_closure();//~ ERROR no method named `boxed_closure` found
- //~^ NOTE use `(boxed_fn.boxed_closure)(...)` if you meant to call the function stored
-
- let boxed_closure = BoxedObj { boxed_closure: Box::new(|| 42_u32) as Box<FnBox() -> u32> };
- boxed_closure.boxed_closure();//~ ERROR no method named `boxed_closure` found
- //~^ NOTE use `(boxed_closure.boxed_closure)(...)` if you meant to call the function stored
-
- // test expression writing in the notes
-
- let w = Wrapper { wrap: o_func };
- w.wrap.closure();//~ ERROR no method named `closure` found
- //~^ NOTE use `(w.wrap.closure)(...)` if you meant to call the function stored
-
- w.wrap.not_closure();//~ ERROR no method named `not_closure` found
- //~^ NOTE did you mean to write `w.wrap.not_closure`?
-
- check_expression().closure();//~ ERROR no method named `closure` found
- //~^ NOTE use `(check_expression().closure)(...)` if you meant to call the function stored
-}
-
-impl FuncContainerOuter {
- fn run(&self) {
- unsafe {
- (*self.container).f1(1); //~ ERROR no method named `f1` found
- //~^ NOTE use `((*self.container).f1)(...)`
- (*self.container).f2(1); //~ ERROR no method named `f2` found
- //~^ NOTE use `((*self.container).f2)(...)`
- (*self.container).f3(1); //~ ERROR no method named `f3` found
- //~^ NOTE use `((*self.container).f3)(...)`
- }
- }
-}
+++ /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.
-
-struct Example {
- example: Box<Fn(i32) -> i32>
-}
-
-fn main() {
- let demo = Example {
- example: Box::new(|x| {
- x + 1
- })
- };
-
- demo.example(1); //~ ERROR no method named `example`
- //~^ NOTE use `(demo.example)(...)`
- // (demo.example)(1);
-}
+++ /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.
-
-use std::ops::Deref;
-
-struct Obj<F> where F: FnMut() -> u32 {
- fn_ptr: fn() -> (),
- closure: F,
-}
-
-struct C {
- c_fn_ptr: fn() -> (),
-}
-
-struct D(C);
-
-impl Deref for D {
- type Target = C;
- fn deref(&self) -> &C {
- &self.0
- }
-}
-
-
-fn empty() {}
-
-fn main() {
- let o = Obj { fn_ptr: empty, closure: || 42 };
- let p = &o;
- p.closure(); //~ ERROR no method named `closure` found
- //~^ NOTE use `(p.closure)(...)` if you meant to call the function stored in the `closure` field
- let q = &p;
- q.fn_ptr(); //~ ERROR no method named `fn_ptr` found
- //~^ NOTE use `(q.fn_ptr)(...)` if you meant to call the function stored in the `fn_ptr` field
- let r = D(C { c_fn_ptr: empty });
- let s = &r;
- s.c_fn_ptr(); //~ ERROR no method named `c_fn_ptr` found
- //~^ NOTE use `(s.c_fn_ptr)(...)` if you meant to call the function stored in the `c_fn_ptr`
-}
--- /dev/null
+// Copyright 2014 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.
+
+struct Obj<F> where F: FnMut() -> u32 {
+ closure: F,
+}
+
+fn main() {
+ let o = Obj { closure: || 42 };
+ o.closure();
+ //~^ ERROR no method named `closure` found
+ //~| HELP use `(o.closure)(...)` if you meant to call the function stored in the `closure` field
+ //~| NOTE field, not a method
+}
--- /dev/null
+error: no method named `closure` found for type `Obj<[closure@$DIR/issue-18343.rs:16:28: 16:33]>` in the current scope
+ --> $DIR/issue-18343.rs:17:7
+ |
+17 | o.closure();
+ | ^^^^^^^ field, not a method
+ |
+ = help: use `(o.closure)(...)` if you meant to call the function stored in the `closure` field
+
+error: aborting due to previous error
+
--- /dev/null
+// Copyright 2014 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.
+
+#![feature(core, fnbox)]
+
+use std::boxed::FnBox;
+
+struct FuncContainer {
+ f1: fn(data: u8),
+ f2: extern "C" fn(data: u8),
+ f3: unsafe fn(data: u8),
+}
+
+struct FuncContainerOuter {
+ container: Box<FuncContainer>
+}
+
+struct Obj<F> where F: FnOnce() -> u32 {
+ closure: F,
+ not_closure: usize,
+}
+
+struct BoxedObj {
+ boxed_closure: Box<FnBox() -> u32>,
+}
+
+struct Wrapper<F> where F: FnMut() -> u32 {
+ wrap: Obj<F>,
+}
+
+fn func() -> u32 {
+ 0
+}
+
+fn check_expression() -> Obj<Box<FnBox() -> u32>> {
+ Obj { closure: Box::new(|| 42_u32) as Box<FnBox() -> u32>, not_closure: 42 }
+}
+
+fn main() {
+ // test variations of function
+
+ let o_closure = Obj { closure: || 42, not_closure: 42 };
+ o_closure.closure(); //~ ERROR no method named `closure` found
+ //~^ HELP use `(o_closure.closure)(...)` if you meant to call the function stored
+ //~| NOTE field, not a method
+
+ o_closure.not_closure();
+ //~^ ERROR no method named `not_closure` found
+ //~| NOTE field, not a method
+ //~| HELP did you mean to write `o_closure.not_closure` instead of `o_closure.not_closure(...)`?
+
+ let o_func = Obj { closure: func, not_closure: 5 };
+ o_func.closure(); //~ ERROR no method named `closure` found
+ //~^ HELP use `(o_func.closure)(...)` if you meant to call the function stored
+ //~| NOTE field, not a method
+
+ let boxed_fn = BoxedObj { boxed_closure: Box::new(func) };
+ boxed_fn.boxed_closure();//~ ERROR no method named `boxed_closure` found
+ //~^ HELP use `(boxed_fn.boxed_closure)(...)` if you meant to call the function stored
+ //~| NOTE field, not a method
+
+ let boxed_closure = BoxedObj { boxed_closure: Box::new(|| 42_u32) as Box<FnBox() -> u32> };
+ boxed_closure.boxed_closure();//~ ERROR no method named `boxed_closure` found
+ //~^ HELP use `(boxed_closure.boxed_closure)(...)` if you meant to call the function stored
+ //~| NOTE field, not a method
+
+ // test expression writing in the notes
+
+ let w = Wrapper { wrap: o_func };
+ w.wrap.closure();//~ ERROR no method named `closure` found
+ //~^ HELP use `(w.wrap.closure)(...)` if you meant to call the function stored
+ //~| NOTE field, not a method
+
+ w.wrap.not_closure();
+ //~^ ERROR no method named `not_closure` found
+ //~| NOTE field, not a method
+ //~| HELP did you mean to write `w.wrap.not_closure` instead of `w.wrap.not_closure(...)`?
+
+ check_expression().closure();//~ ERROR no method named `closure` found
+ //~^ HELP use `(check_expression().closure)(...)` if you meant to call the function stored
+ //~| NOTE field, not a method
+}
+
+impl FuncContainerOuter {
+ fn run(&self) {
+ unsafe {
+ (*self.container).f1(1); //~ ERROR no method named `f1` found
+ //~^ HELP use `((*self.container).f1)(...)`
+ //~| NOTE field, not a method
+ (*self.container).f2(1); //~ ERROR no method named `f2` found
+ //~^ HELP use `((*self.container).f2)(...)`
+ //~| NOTE field, not a method
+ (*self.container).f3(1); //~ ERROR no method named `f3` found
+ //~^ HELP use `((*self.container).f3)(...)`
+ //~| NOTE field, not a method
+ }
+ }
+}
--- /dev/null
+error: no method named `closure` found for type `Obj<[closure@$DIR/issue-2392.rs:49:36: 49:41]>` in the current scope
+ --> $DIR/issue-2392.rs:50:15
+ |
+50 | o_closure.closure(); //~ ERROR no method named `closure` found
+ | ^^^^^^^ field, not a method
+ |
+ = help: use `(o_closure.closure)(...)` if you meant to call the function stored in the `closure` field
+
+error: no method named `not_closure` found for type `Obj<[closure@$DIR/issue-2392.rs:49:36: 49:41]>` in the current scope
+ --> $DIR/issue-2392.rs:54:15
+ |
+54 | o_closure.not_closure();
+ | ^^^^^^^^^^^ field, not a method
+ |
+ = help: did you mean to write `o_closure.not_closure` instead of `o_closure.not_closure(...)`?
+
+error: no method named `closure` found for type `Obj<fn() -> u32 {func}>` in the current scope
+ --> $DIR/issue-2392.rs:60:12
+ |
+60 | o_func.closure(); //~ ERROR no method named `closure` found
+ | ^^^^^^^ field, not a method
+ |
+ = help: use `(o_func.closure)(...)` if you meant to call the function stored in the `closure` field
+
+error: no method named `boxed_closure` found for type `BoxedObj` in the current scope
+ --> $DIR/issue-2392.rs:65:14
+ |
+65 | boxed_fn.boxed_closure();//~ ERROR no method named `boxed_closure` found
+ | ^^^^^^^^^^^^^ field, not a method
+ |
+ = help: use `(boxed_fn.boxed_closure)(...)` if you meant to call the function stored in the `boxed_closure` field
+
+error: no method named `boxed_closure` found for type `BoxedObj` in the current scope
+ --> $DIR/issue-2392.rs:70:19
+ |
+70 | boxed_closure.boxed_closure();//~ ERROR no method named `boxed_closure` found
+ | ^^^^^^^^^^^^^ field, not a method
+ |
+ = help: use `(boxed_closure.boxed_closure)(...)` if you meant to call the function stored in the `boxed_closure` field
+
+error: no method named `closure` found for type `Obj<fn() -> u32 {func}>` in the current scope
+ --> $DIR/issue-2392.rs:77:12
+ |
+77 | w.wrap.closure();//~ ERROR no method named `closure` found
+ | ^^^^^^^ field, not a method
+ |
+ = help: use `(w.wrap.closure)(...)` if you meant to call the function stored in the `closure` field
+
+error: no method named `not_closure` found for type `Obj<fn() -> u32 {func}>` in the current scope
+ --> $DIR/issue-2392.rs:81:12
+ |
+81 | w.wrap.not_closure();
+ | ^^^^^^^^^^^ field, not a method
+ |
+ = help: did you mean to write `w.wrap.not_closure` instead of `w.wrap.not_closure(...)`?
+
+error: no method named `closure` found for type `Obj<std::boxed::Box<std::boxed::FnBox<(), Output=u32> + 'static>>` in the current scope
+ --> $DIR/issue-2392.rs:86:24
+ |
+86 | check_expression().closure();//~ ERROR no method named `closure` found
+ | ^^^^^^^ field, not a method
+ |
+ = help: use `(check_expression().closure)(...)` if you meant to call the function stored in the `closure` field
+
+error: no method named `f1` found for type `FuncContainer` in the current scope
+ --> $DIR/issue-2392.rs:94:31
+ |
+94 | (*self.container).f1(1); //~ ERROR no method named `f1` found
+ | ^^ field, not a method
+ |
+ = help: use `((*self.container).f1)(...)` if you meant to call the function stored in the `f1` field
+
+error: no method named `f2` found for type `FuncContainer` in the current scope
+ --> $DIR/issue-2392.rs:97:31
+ |
+97 | (*self.container).f2(1); //~ ERROR no method named `f2` found
+ | ^^ field, not a method
+ |
+ = help: use `((*self.container).f2)(...)` if you meant to call the function stored in the `f2` field
+
+error: no method named `f3` found for type `FuncContainer` in the current scope
+ --> $DIR/issue-2392.rs:100:31
+ |
+100 | (*self.container).f3(1); //~ ERROR no method named `f3` found
+ | ^^ field, not a method
+ |
+ = help: use `((*self.container).f3)(...)` if you meant to call the function stored in the `f3` field
+
+error: aborting due to 11 previous errors
+
--- /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.
+
+struct Example {
+ example: Box<Fn(i32) -> i32>
+}
+
+fn main() {
+ let demo = Example {
+ example: Box::new(|x| {
+ x + 1
+ })
+ };
+
+ demo.example(1);
+ //~^ ERROR no method named `example`
+ //~| HELP use `(demo.example)(...)`
+ //~| NOTE field, not a method
+ // (demo.example)(1);
+}
--- /dev/null
+error: no method named `example` found for type `Example` in the current scope
+ --> $DIR/issue-32128.rs:22:10
+ |
+22 | demo.example(1);
+ | ^^^^^^^ field, not a method
+ |
+ = help: use `(demo.example)(...)` if you meant to call the function stored in the `example` field
+
+error: aborting due to previous error
+
--- /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.
+
+use std::ops::Deref;
+
+struct Obj<F> where F: FnMut() -> u32 {
+ fn_ptr: fn() -> (),
+ closure: F,
+}
+
+struct C {
+ c_fn_ptr: fn() -> (),
+}
+
+struct D(C);
+
+impl Deref for D {
+ type Target = C;
+ fn deref(&self) -> &C {
+ &self.0
+ }
+}
+
+
+fn empty() {}
+
+fn main() {
+ let o = Obj { fn_ptr: empty, closure: || 42 };
+ let p = &o;
+ p.closure(); //~ ERROR no method named `closure` found
+ //~^ HELP use `(p.closure)(...)` if you meant to call the function stored in the `closure` field
+ //~| NOTE `closure` is a field storing a function, not a method
+ let q = &p;
+ q.fn_ptr(); //~ ERROR no method named `fn_ptr` found
+ //~^ HELP use `(q.fn_ptr)(...)` if you meant to call the function stored in the `fn_ptr` field
+ //~| NOTE `fn_ptr` is a field storing a function, not a method
+ let r = D(C { c_fn_ptr: empty });
+ let s = &r;
+ s.c_fn_ptr(); //~ ERROR no method named `c_fn_ptr` found
+ //~^ HELP use `(s.c_fn_ptr)(...)` if you meant to call the function stored in the `c_fn_ptr`
+ //~| NOTE `c_fn_ptr` is a field storing a function, not a method
+}
--- /dev/null
+error: no method named `closure` found for type `&Obj<[closure@$DIR/issue-33784.rs:35:43: 35:48]>` in the current scope
+ --> $DIR/issue-33784.rs:37:7
+ |
+37 | p.closure(); //~ ERROR no method named `closure` found
+ | ^^^^^^^ field, not a method
+ |
+ = help: use `(p.closure)(...)` if you meant to call the function stored in the `closure` field
+
+error: no method named `fn_ptr` found for type `&&Obj<[closure@$DIR/issue-33784.rs:35:43: 35:48]>` in the current scope
+ --> $DIR/issue-33784.rs:41:7
+ |
+41 | q.fn_ptr(); //~ ERROR no method named `fn_ptr` found
+ | ^^^^^^ field, not a method
+ |
+ = help: use `(q.fn_ptr)(...)` if you meant to call the function stored in the `fn_ptr` field
+
+error: no method named `c_fn_ptr` found for type `&D` in the current scope
+ --> $DIR/issue-33784.rs:46:7
+ |
+46 | s.c_fn_ptr(); //~ ERROR no method named `c_fn_ptr` found
+ | ^^^^^^^^ field, not a method
+ |
+ = help: use `(s.c_fn_ptr)(...)` if you meant to call the function stored in the `c_fn_ptr` field
+
+error: aborting due to 3 previous errors
+