Improve clippy_utils function docs

This commit is contained in:
xFrednet 2021-11-04 12:09:48 +01:00
parent 1011e083cd
commit d134dddf70
No known key found for this signature in database
GPG Key ID: FCDCBF29AF64D601
2 changed files with 26 additions and 5 deletions

View File

@ -155,14 +155,22 @@ fn reindent_multiline_inner(s: &str, ignore_first: bool, indent: Option<usize>,
.join("\n") .join("\n")
} }
/// Converts a span to a code snippet if available, otherwise use default. /// Converts a span to a code snippet if available, otherwise returns the default.
/// ///
/// This is useful if you want to provide suggestions for your lint or more generally, if you want /// This is useful if you want to provide suggestions for your lint or more generally, if you want
/// to convert a given `Span` to a `str`. /// to convert a given `Span` to a `str`. To create suggestions consider using
/// [`snippet_with_applicability`] to ensure that the applicability stays correct.
/// ///
/// # Example /// # Example
/// ```rust,ignore /// ```rust,ignore
/// snippet(cx, expr.span, "..") /// // Given two spans one for `value` and one for the `init` expression.
/// let value = Vec::new();
/// // ^^^^^ ^^^^^^^^^^
/// // span1 span2
///
/// // The snipped call would return the corresponding code snippet
/// snippet(cx, span1, "..") // -> "value"
/// snippet(cx, span2, "..") // -> "Vec::new()"
/// ``` /// ```
pub fn snippet<'a, T: LintContext>(cx: &T, span: Span, default: &'a str) -> Cow<'a, str> { pub fn snippet<'a, T: LintContext>(cx: &T, span: Span, default: &'a str) -> Cow<'a, str> {
snippet_opt(cx, span).map_or_else(|| Cow::Borrowed(default), From::from) snippet_opt(cx, span).map_or_else(|| Cow::Borrowed(default), From::from)

View File

@ -114,7 +114,12 @@ pub fn has_iter_method(cx: &LateContext<'_>, probably_ref_ty: Ty<'_>) -> Option<
/// Checks whether a type implements a trait. /// Checks whether a type implements a trait.
/// The function returns false in case the type contains an inference variable. /// The function returns false in case the type contains an inference variable.
/// See also [`get_trait_def_id`](super::get_trait_def_id). ///
/// See:
/// * [`get_trait_def_id`](super::get_trait_def_id) to get a trait [`DefId`].
/// * [Common tools for writing lints] for an example how to use this function and other options.
///
/// [Common tools for writing lints]: https://github.com/rust-lang/rust-clippy/blob/master/doc/common_tools_writing_lints.md#checking-if-a-type-implements-a-specific-trait
pub fn implements_trait<'tcx>( pub fn implements_trait<'tcx>(
cx: &LateContext<'tcx>, cx: &LateContext<'tcx>,
ty: Ty<'tcx>, ty: Ty<'tcx>,
@ -254,9 +259,17 @@ pub fn is_type_ref_to_diagnostic_item(cx: &LateContext<'_>, ty: Ty<'_>, diag_ite
} }
} }
/// Checks if the type is equal to a diagnostic item /// Checks if the type is equal to a diagnostic item. To check if a type implements a
/// trait marked with a diagnostic item use [`implements_trait`].
///
/// For a further exploitation what diagnostic items are see [diagnostic items] in
/// rustc-dev-guide.
///
/// ---
/// ///
/// If you change the signature, remember to update the internal lint `MatchTypeOnDiagItem` /// If you change the signature, remember to update the internal lint `MatchTypeOnDiagItem`
///
/// [Diagnostic Items]: https://rustc-dev-guide.rust-lang.org/diagnostics/diagnostic-items.html
pub fn is_type_diagnostic_item(cx: &LateContext<'_>, ty: Ty<'_>, diag_item: Symbol) -> bool { pub fn is_type_diagnostic_item(cx: &LateContext<'_>, ty: Ty<'_>, diag_item: Symbol) -> bool {
match ty.kind() { match ty.kind() {
ty::Adt(adt, _) => cx.tcx.is_diagnostic_item(diag_item, adt.did), ty::Adt(adt, _) => cx.tcx.is_diagnostic_item(diag_item, adt.did),