From 59fafcf00c684665629e2ea79fd884623f7b8812 Mon Sep 17 00:00:00 2001 From: vegai Date: Tue, 1 Mar 2016 21:33:35 +0200 Subject: [PATCH 1/4] span_note => fileline_note --- src/librustc_resolve/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/librustc_resolve/lib.rs b/src/librustc_resolve/lib.rs index 067d83a17e57b..28fc73923800f 100644 --- a/src/librustc_resolve/lib.rs +++ b/src/librustc_resolve/lib.rs @@ -1989,7 +1989,7 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> { // If it's a typedef, give a note if let Def::TyAlias(..) = path_res.base_def { - err.span_note(trait_path.span, + err.fileline_note(trait_path.span, "`type` aliases cannot be used for traits"); } err.emit(); From bd7e422996818d75041a801b2df4bd79f44937ae Mon Sep 17 00:00:00 2001 From: vegai Date: Wed, 2 Mar 2016 07:06:22 +0200 Subject: [PATCH 2/4] Add a span note on type definition spot --- src/librustc_resolve/lib.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/librustc_resolve/lib.rs b/src/librustc_resolve/lib.rs index 28fc73923800f..e139ac8b2a069 100644 --- a/src/librustc_resolve/lib.rs +++ b/src/librustc_resolve/lib.rs @@ -1988,9 +1988,12 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> { path_depth))); // If it's a typedef, give a note - if let Def::TyAlias(..) = path_res.base_def { + if let Def::TyAlias(did) = path_res.base_def { err.fileline_note(trait_path.span, "`type` aliases cannot be used for traits"); + if let Some(sp) = self.ast_map.span_if_local(did) { + err.span_note(sp, "type defined here"); + } } err.emit(); Err(()) From 86357c37d26db32a1064a5d955f43c82452c9588 Mon Sep 17 00:00:00 2001 From: vegai Date: Wed, 2 Mar 2016 19:27:56 +0200 Subject: [PATCH 3/4] Fix test to reflect new note --- src/test/compile-fail/issue-5035.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/compile-fail/issue-5035.rs b/src/test/compile-fail/issue-5035.rs index cdf9d3bd36ece..dabeb503841c5 100644 --- a/src/test/compile-fail/issue-5035.rs +++ b/src/test/compile-fail/issue-5035.rs @@ -9,7 +9,7 @@ // except according to those terms. trait I {} -type K = I; +type K = I; //~ NOTE: type defined here impl K for isize {} //~ ERROR: `K` is not a trait //~^ NOTE: `type` aliases cannot be used for traits fn main() {} From 01a6e8653b070f07604b784919575a4fc132bb2d Mon Sep 17 00:00:00 2001 From: vegai Date: Wed, 2 Mar 2016 22:29:54 +0200 Subject: [PATCH 4/4] Type defined here note added to test --- src/test/compile-fail/issue-3907.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/compile-fail/issue-3907.rs b/src/test/compile-fail/issue-3907.rs index a3d90a00d038e..1dbf211b26941 100644 --- a/src/test/compile-fail/issue-3907.rs +++ b/src/test/compile-fail/issue-3907.rs @@ -11,7 +11,7 @@ // aux-build:issue_3907.rs extern crate issue_3907; -type Foo = issue_3907::Foo; +type Foo = issue_3907::Foo; //~ NOTE: type defined here struct S { name: isize