From 350036a0c7bd64bd49049f1864a575fad9216677 Mon Sep 17 00:00:00 2001 From: Daniel Wagner-Hall Date: Mon, 27 Aug 2018 23:22:07 +0100 Subject: [PATCH] default_trait_access skips ::default() This includes the type name, so is clear, and may be necessary. There doesn't seem to be an obviously cleaner way to pull out the literal text of the named type here. Fixes #2879 --- clippy_lints/src/default_trait_access.rs | 7 +++++++ tests/ui/default_trait_access.rs | 5 ++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/clippy_lints/src/default_trait_access.rs b/clippy_lints/src/default_trait_access.rs index f01e106df..d3598a5bd 100644 --- a/clippy_lints/src/default_trait_access.rs +++ b/clippy_lints/src/default_trait_access.rs @@ -48,6 +48,13 @@ impl<'a, 'tcx> LateLintPass<'a, 'tcx> for DefaultTraitAccess { then { match qpath { QPath::Resolved(..) => { + if let ExprKind::Call(ref method, ref _args) = expr.node { + if format!("{:?}", method).contains(" as Default>") { + return + } + } + + // TODO: Work out a way to put "whatever the imported way of referencing // this type in this file" rather than a fully-qualified type. let expr_ty = cx.tables.expr_ty(expr); diff --git a/tests/ui/default_trait_access.rs b/tests/ui/default_trait_access.rs index 675e64246..eba024353 100644 --- a/tests/ui/default_trait_access.rs +++ b/tests/ui/default_trait_access.rs @@ -41,8 +41,10 @@ fn main() { let s18 = TupleStructDerivedDefault::default(); + let s19 = ::default(); + println!( - "[{}] [{}] [{}] [{}] [{}] [{}] [{}] [{}] [{}] [{:?}] [{:?}] [{:?}] [{:?}] [{:?}] [{:?}] [{:?}] [{:?}] [{:?}]", + "[{}] [{}] [{}] [{}] [{}] [{}] [{}] [{}] [{}] [{:?}] [{:?}] [{:?}] [{:?}] [{:?}] [{:?}] [{:?}] [{:?}] [{:?}], [{:?}]", s1, s2, s3, @@ -61,6 +63,7 @@ fn main() { s16, s17, s18, + s19, ); }