From 0cb367266b0a336c0a18ae999beeadd3235961a2 Mon Sep 17 00:00:00 2001 From: Manish Goregaokar Date: Fri, 23 Feb 2018 13:52:28 -0800 Subject: [PATCH] Emit parentheses in suggestion for global paths --- src/librustc/hir/lowering.rs | 8 ++++---- src/librustc/lint/builtin.rs | 5 +++-- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/librustc/hir/lowering.rs b/src/librustc/hir/lowering.rs index aeccf133fa8..9d4011fa7ad 100644 --- a/src/librustc/hir/lowering.rs +++ b/src/librustc/hir/lowering.rs @@ -914,7 +914,7 @@ impl<'a> LoweringContext<'a> { let qpath = self.lower_qpath(t.id, qself, path, ParamMode::Explicit, itctx); let ty = self.ty_path(id, t.span, qpath); if let hir::TyTraitObject(..) = ty.node { - self.maybe_lint_bare_trait(t.span, t.id); + self.maybe_lint_bare_trait(t.span, t.id, qself.is_none() && path.is_global()); } return ty; } @@ -955,7 +955,7 @@ impl<'a> LoweringContext<'a> { self.elided_lifetime(t.span) }); if kind != TraitObjectSyntax::Dyn { - self.maybe_lint_bare_trait(t.span, t.id); + self.maybe_lint_bare_trait(t.span, t.id, false); } hir::TyTraitObject(bounds, lifetime_bound) } @@ -3710,12 +3710,12 @@ impl<'a> LoweringContext<'a> { } } - fn maybe_lint_bare_trait(&self, span: Span, id: NodeId) { + fn maybe_lint_bare_trait(&self, span: Span, id: NodeId, is_global: bool) { if self.sess.features.borrow().dyn_trait { self.sess.buffer_lint_with_diagnostic( builtin::BARE_TRAIT_OBJECT, id, span, "trait objects without an explicit `dyn` are deprecated", - builtin::BuiltinLintDiagnostics::BareTraitObject(span) + builtin::BuiltinLintDiagnostics::BareTraitObject(span, is_global) ) } } diff --git a/src/librustc/lint/builtin.rs b/src/librustc/lint/builtin.rs index cc7c5dc0666..b68b7dc6c06 100644 --- a/src/librustc/lint/builtin.rs +++ b/src/librustc/lint/builtin.rs @@ -320,15 +320,16 @@ impl LintPass for HardwiredLints { #[derive(PartialEq, RustcEncodable, RustcDecodable, Debug)] pub enum BuiltinLintDiagnostics { Normal, - BareTraitObject(Span) + BareTraitObject(Span, /* is_global */ bool) } impl BuiltinLintDiagnostics { pub fn run(self, sess: &Session, db: &mut DiagnosticBuilder) { match self { BuiltinLintDiagnostics::Normal => (), - BuiltinLintDiagnostics::BareTraitObject(span) => { + BuiltinLintDiagnostics::BareTraitObject(span, is_global) => { let sugg = match sess.codemap().span_to_snippet(span) { + Ok(ref s) if is_global => format!("dyn ({})", s), Ok(s) => format!("dyn {}", s), Err(_) => format!("dyn ") };