+use clippy_utils::diagnostics::span_lint_and_help;
+use clippy_utils::ty::{implements_trait, is_type_diagnostic_item};
+use clippy_utils::{get_trait_def_id, paths, return_ty, trait_ref_of_method};
use if_chain::if_chain;
use rustc_hir::{ImplItem, ImplItemKind};
use rustc_lint::{LateContext, LateLintPass};
use rustc_session::{declare_lint_pass, declare_tool_lint};
use rustc_span::sym;
-use crate::utils::{
- get_trait_def_id, implements_trait, is_type_diagnostic_item, paths, return_ty, span_lint_and_help,
- trait_ref_of_method,
-};
-
declare_clippy_lint! {
- /// **What it does:** Checks for the definition of inherent methods with a signature of `to_string(&self) -> String`.
- ///
- /// **Why is this bad?** This method is also implicitly defined if a type implements the `Display` trait. As the functionality of `Display` is much more versatile, it should be preferred.
+ /// ### What it does
+ /// Checks for the definition of inherent methods with a signature of `to_string(&self) -> String`.
///
- /// **Known problems:** None
+ /// ### Why is this bad?
+ /// This method is also implicitly defined if a type implements the `Display` trait. As the functionality of `Display` is much more versatile, it should be preferred.
///
- /// ** Example:**
+ /// ### Known problems
+ /// None
///
+ /// ### Example
/// ```rust
/// // Bad
/// pub struct A;
}
declare_clippy_lint! {
- /// **What it does:** Checks for the definition of inherent methods with a signature of `to_string(&self) -> String` and if the type implementing this method also implements the `Display` trait.
- ///
- /// **Why is this bad?** This method is also implicitly defined if a type implements the `Display` trait. The less versatile inherent method will then shadow the implementation introduced by `Display`.
+ /// ### What it does
+ /// Checks for the definition of inherent methods with a signature of `to_string(&self) -> String` and if the type implementing this method also implements the `Display` trait.
///
- /// **Known problems:** None
+ /// ### Why is this bad?
+ /// This method is also implicitly defined if a type implements the `Display` trait. The less versatile inherent method will then shadow the implementation introduced by `Display`.
///
- /// ** Example:**
+ /// ### Known problems
+ /// None
///
+ /// ### Example
/// ```rust
/// // Bad
/// use std::fmt;
self_type.to_string()
),
None,
- &format!("remove the inherent method from type `{}`", self_type.to_string())
+ &format!("remove the inherent method from type `{}`", self_type.to_string()),
);
} else {
span_lint_and_help(