From 7dcacf15b990cdf0e753b942ffc7e62a2083db88 Mon Sep 17 00:00:00 2001 From: Jeffrey Seyfried Date: Tue, 3 Jan 2017 02:47:18 +0000 Subject: [PATCH] Don't `unused_qualifications`-check global paths. --- src/librustc_resolve/lib.rs | 25 ++++++++++----------- src/test/compile-fail/lint-qualification.rs | 9 ++++---- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/librustc_resolve/lib.rs b/src/librustc_resolve/lib.rs index b7908f0c0edde..1eeb356480cf2 100644 --- a/src/librustc_resolve/lib.rs +++ b/src/librustc_resolve/lib.rs @@ -2336,20 +2336,19 @@ impl<'a> Resolver<'a> { PathResult::Indeterminate => bug!("indetermined path result in resolve_qpath"), }; - if path.len() == 1 || global_by_default || result.base_def == Def::Err { - return Some(result); - } - - let unqualified_result = { - match self.resolve_path(&[*path.last().unwrap()], Some(ns), None) { - PathResult::NonModule(path_res) => path_res.base_def, - PathResult::Module(module) => module.def().unwrap(), - _ => return Some(result), + if path.len() > 1 && !global_by_default && result.base_def != Def::Err && + path[0].name != keywords::CrateRoot.name() && path[0].name != "$crate" { + let unqualified_result = { + match self.resolve_path(&[*path.last().unwrap()], Some(ns), None) { + PathResult::NonModule(path_res) => path_res.base_def, + PathResult::Module(module) => module.def().unwrap(), + _ => return Some(result), + } + }; + if result.base_def == unqualified_result { + let lint = lint::builtin::UNUSED_QUALIFICATIONS; + self.session.add_lint(lint, id, span, "unnecessary qualification".to_string()); } - }; - if result.base_def == unqualified_result && path[0].name != "$crate" { - let lint = lint::builtin::UNUSED_QUALIFICATIONS; - self.session.add_lint(lint, id, span, "unnecessary qualification".to_string()); } Some(result) diff --git a/src/test/compile-fail/lint-qualification.rs b/src/test/compile-fail/lint-qualification.rs index af9b21dadd1d0..57c2166565f96 100644 --- a/src/test/compile-fail/lint-qualification.rs +++ b/src/test/compile-fail/lint-qualification.rs @@ -21,8 +21,9 @@ fn main() { let _ = || -> Result<(), ()> { try!(Ok(())); Ok(()) }; // issue #37345 - macro_rules! m { - () => { $crate::foo::bar(); } - } - m!(); // issue #37357 + macro_rules! m { () => { + $crate::foo::bar(); // issue #37357 + ::foo::bar(); // issue #38682 + } } + m!(); }