about summary refs log tree commit diff
diff options
context:
space:
mode:
authorThibsG <Thibs@debian.com>2020-08-25 09:16:08 +0200
committerThibsG <Thibs@debian.com>2020-08-27 18:25:38 +0200
commit3cb75c2e5cdd4f450f2974c5e052d569674d95fd (patch)
tree398fad2c7fc1ab59c6c86df30f1bbd4e1eca19ec
parent2a3ee5fa854b49530008582900c6ea7fac120d1c (diff)
downloadrust-3cb75c2e5cdd4f450f2974c5e052d569674d95fd.tar.gz
rust-3cb75c2e5cdd4f450f2974c5e052d569674d95fd.zip
Remove expansion restriction + fix doc and tests naming
-rw-r--r--clippy_lints/src/methods/mod.rs34
-rw-r--r--tests/ui/new_ret_no_self.rs6
2 files changed, 27 insertions, 13 deletions
diff --git a/clippy_lints/src/methods/mod.rs b/clippy_lints/src/methods/mod.rs
index 8e91cbb3cdf..2388310628f 100644
--- a/clippy_lints/src/methods/mod.rs
+++ b/clippy_lints/src/methods/mod.rs
@@ -725,6 +725,7 @@ declare_clippy_lint! {
     /// **Known problems:** None.
     ///
     /// **Example:**
+    /// In an impl block:
     /// ```rust
     /// # struct Foo;
     /// # struct NotAFoo;
@@ -737,25 +738,40 @@ declare_clippy_lint! {
     ///
     /// ```rust
     /// # struct Foo;
-    /// # struct FooError;
+    /// struct Bar(Foo);
     /// impl Foo {
-    ///     // Good. Return type contains `Self`
-    ///     fn new() -> Result<Foo, FooError> {
-    ///         # Ok(Foo)
+    ///     // Bad. The type name must contain `Self`
+    ///     fn new() -> Bar {
+    /// # Bar(Foo)
     ///     }
     /// }
     /// ```
     ///
     /// ```rust
     /// # struct Foo;
-    /// struct Bar(Foo);
+    /// # struct FooError;
     /// impl Foo {
-    ///     // Bad. The type name must contain `Self`.
-    ///     fn new() -> Bar {
-    ///         # Bar(Foo)
+    ///     // Good. Return type contains `Self`
+    ///     fn new() -> Result<Foo, FooError> {
+    /// # Ok(Foo)
     ///     }
     /// }
     /// ```
+    ///
+    /// Or in a trait definition:
+    /// ```rust
+    /// pub trait Trait {
+    ///     // Bad. The type name must contain `Self`
+    ///     fn new();
+    /// }
+    /// ```
+    ///
+    /// ```rust
+    /// pub trait Trait {
+    ///     // Good. Return type contains `Self`
+    ///     fn new() -> Self;
+    /// }
+    /// ```
     pub NEW_RET_NO_SELF,
     style,
     "not returning type containing `Self` in a `new` method"
@@ -1679,8 +1695,6 @@ impl<'tcx> LateLintPass<'tcx> for Methods {
 
     fn check_trait_item(&mut self, cx: &LateContext<'tcx>, item: &'tcx TraitItem<'_>) {
         if_chain! {
-            if !in_external_macro(cx.tcx.sess, item.span);
-            if !item.span.from_expansion();
             if item.ident.name == sym!(new);
             if let TraitItemKind::Fn(FnSig { decl, .. }, _) = &item.kind;
             if let FnRetTy::Return(ret_ty) = &decl.output;
diff --git a/tests/ui/new_ret_no_self.rs b/tests/ui/new_ret_no_self.rs
index e98360ea691..e82873629a5 100644
--- a/tests/ui/new_ret_no_self.rs
+++ b/tests/ui/new_ret_no_self.rs
@@ -137,9 +137,9 @@ impl MutPointerReturnerOk {
     }
 }
 
-struct MutPointerReturnerOk2;
+struct ConstPointerReturnerOk2;
 
-impl MutPointerReturnerOk2 {
+impl ConstPointerReturnerOk2 {
     // should not trigger lint
     pub fn new() -> *const Self {
         unimplemented!();
@@ -283,7 +283,7 @@ mod issue5435 {
         }
     }
 
-    trait MutPointerReturnerOk2 {
+    trait ConstPointerReturnerOk2 {
         // should not trigger lint
         fn new() -> *const Self
         where