mirror of
https://github.com/rust-lang/rust-clippy
synced 2024-11-23 21:23:56 +00:00
Fix dogfood lints
This commit is contained in:
parent
f455587fee
commit
4969960a9c
5 changed files with 42 additions and 26 deletions
|
@ -58,7 +58,9 @@ pub(super) fn check(
|
|||
}
|
||||
}
|
||||
|
||||
let &[first_span, .., last_span] = spans.as_slice() else { return };
|
||||
let &[first_span, .., last_span] = spans.as_slice() else {
|
||||
return;
|
||||
};
|
||||
|
||||
if should_suggest_empty_doc
|
||||
&& let Some(second_span) = spans.get(1)
|
||||
|
|
|
@ -150,6 +150,7 @@ macro_rules! extract_msrv_attr {
|
|||
|
||||
/// If the given expression is a local binding, find the initializer expression.
|
||||
/// If that initializer expression is another local binding, find its initializer again.
|
||||
///
|
||||
/// This process repeats as long as possible (but usually no more than once). Initializer
|
||||
/// expressions with adjustments are ignored. If this is not desired, use [`find_binding_init`]
|
||||
/// instead.
|
||||
|
@ -180,6 +181,7 @@ pub fn expr_or_init<'a, 'b, 'tcx: 'b>(cx: &LateContext<'tcx>, mut expr: &'a Expr
|
|||
}
|
||||
|
||||
/// Finds the initializer expression for a local binding. Returns `None` if the binding is mutable.
|
||||
///
|
||||
/// By only considering immutable bindings, we guarantee that the returned expression represents the
|
||||
/// value of the binding wherever it is referenced.
|
||||
///
|
||||
|
@ -428,12 +430,12 @@ pub fn qpath_generic_tys<'tcx>(qpath: &QPath<'tcx>) -> impl Iterator<Item = &'tc
|
|||
})
|
||||
}
|
||||
|
||||
/// THIS METHOD IS DEPRECATED and will eventually be removed since it does not match against the
|
||||
/// THIS METHOD IS DEPRECATED. Matches a `QPath` against a slice of segment string literals.
|
||||
///
|
||||
/// This method is deprecated and will eventually be removed since it does not match against the
|
||||
/// entire path or resolved `DefId`. Prefer using `match_def_path`. Consider getting a `DefId` from
|
||||
/// `QPath::Resolved.1.res.opt_def_id()`.
|
||||
///
|
||||
/// Matches a `QPath` against a slice of segment string literals.
|
||||
///
|
||||
/// There is also `match_path` if you are dealing with a `rustc_hir::Path` instead of a
|
||||
/// `rustc_hir::QPath`.
|
||||
///
|
||||
|
@ -482,12 +484,12 @@ pub fn is_path_diagnostic_item<'tcx>(
|
|||
path_def_id(cx, maybe_path).map_or(false, |id| cx.tcx.is_diagnostic_item(diag_item, id))
|
||||
}
|
||||
|
||||
/// THIS METHOD IS DEPRECATED and will eventually be removed since it does not match against the
|
||||
/// THIS METHOD IS DEPRECATED. Matches a `Path` against a slice of segment string literals.
|
||||
///
|
||||
/// This method is deprecated and will eventually be removed since it does not match against the
|
||||
/// entire path or resolved `DefId`. Prefer using `match_def_path`. Consider getting a `DefId` from
|
||||
/// `QPath::Resolved.1.res.opt_def_id()`.
|
||||
///
|
||||
/// Matches a `Path` against a slice of segment string literals.
|
||||
///
|
||||
/// There is also `match_qpath` if you are dealing with a `rustc_hir::QPath` instead of a
|
||||
/// `rustc_hir::Path`.
|
||||
///
|
||||
|
@ -903,6 +905,7 @@ pub fn is_default_equivalent_call(cx: &LateContext<'_>, repl_func: &Expr<'_>) ->
|
|||
}
|
||||
|
||||
/// Returns true if the expr is equal to `Default::default()` of it's type when evaluated.
|
||||
///
|
||||
/// It doesn't cover all cases, for example indirect function calls (some of std
|
||||
/// functions are supported) but it is the best we have.
|
||||
pub fn is_default_equivalent(cx: &LateContext<'_>, e: &Expr<'_>) -> bool {
|
||||
|
@ -1059,6 +1062,7 @@ impl std::ops::BitOrAssign for CaptureKind {
|
|||
}
|
||||
|
||||
/// Given an expression referencing a local, determines how it would be captured in a closure.
|
||||
///
|
||||
/// Note as this will walk up to parent expressions until the capture can be determined it should
|
||||
/// only be used while making a closure somewhere a value is consumed. e.g. a block, match arm, or
|
||||
/// function argument (other than a receiver).
|
||||
|
@ -2361,8 +2365,9 @@ pub fn fn_def_id_with_node_args<'tcx>(
|
|||
}
|
||||
|
||||
/// Returns `Option<String>` where String is a textual representation of the type encapsulated in
|
||||
/// the slice iff the given expression is a slice of primitives (as defined in the
|
||||
/// `is_recursively_primitive_type` function) and `None` otherwise.
|
||||
/// the slice iff the given expression is a slice of primitives.
|
||||
///
|
||||
/// (As defined in the `is_recursively_primitive_type` function.) Returns `None` otherwise.
|
||||
pub fn is_slice_of_primitives(cx: &LateContext<'_>, expr: &Expr<'_>) -> Option<String> {
|
||||
let expr_type = cx.typeck_results().expr_ty_adjusted(expr);
|
||||
let expr_kind = expr_type.kind();
|
||||
|
|
|
@ -150,10 +150,11 @@ pub fn first_node_macro_backtrace(cx: &LateContext<'_>, node: &impl HirNode) ->
|
|||
}
|
||||
|
||||
/// If `node` is the "first node" in a macro expansion, returns `Some` with the `ExpnId` of the
|
||||
/// macro call site (i.e. the parent of the macro expansion). This generally means that `node`
|
||||
/// is the outermost node of an entire macro expansion, but there are some caveats noted below.
|
||||
/// This is useful for finding macro calls while visiting the HIR without processing the macro call
|
||||
/// at every node within its expansion.
|
||||
/// macro call site (i.e. the parent of the macro expansion).
|
||||
///
|
||||
/// This generally means that `node` is the outermost node of an entire macro expansion, but there
|
||||
/// are some caveats noted below. This is useful for finding macro calls while visiting the HIR
|
||||
/// without processing the macro call at every node within its expansion.
|
||||
///
|
||||
/// If you already have immediate access to the parent node, it is simpler to
|
||||
/// just check the context of that span directly (e.g. `parent.span.from_expansion()`).
|
||||
|
|
|
@ -527,9 +527,10 @@ pub fn snippet_block_with_context<'a>(
|
|||
(reindent_multiline(snip, true, indent), from_macro)
|
||||
}
|
||||
|
||||
/// Same as `snippet_with_applicability`, but first walks the span up to the given context. This
|
||||
/// will result in the macro call, rather than the expansion, if the span is from a child context.
|
||||
/// If the span is not from a child context, it will be used directly instead.
|
||||
/// Same as `snippet_with_applicability`, but first walks the span up to the given context.
|
||||
///
|
||||
/// This will result in the macro call, rather than the expansion, if the span is from a child
|
||||
/// context. If the span is not from a child context, it will be used directly instead.
|
||||
///
|
||||
/// e.g. Given the expression `&vec![]`, getting a snippet from the span for `vec![]` as a HIR node
|
||||
/// would result in `box []`. If given the context of the address of expression, this function will
|
||||
|
@ -572,9 +573,10 @@ fn snippet_with_context_sess<'a>(
|
|||
}
|
||||
|
||||
/// Walks the span up to the target context, thereby returning the macro call site if the span is
|
||||
/// inside a macro expansion, or the original span if it is not. Note this will return `None` in the
|
||||
/// case of the span being in a macro expansion, but the target context is from expanding a macro
|
||||
/// argument.
|
||||
/// inside a macro expansion, or the original span if it is not.
|
||||
///
|
||||
/// Note this will return `None` in the case of the span being in a macro expansion, but the target
|
||||
/// context is from expanding a macro argument.
|
||||
///
|
||||
/// Given the following
|
||||
///
|
||||
|
|
|
@ -160,8 +160,10 @@ pub fn get_type_diagnostic_name(cx: &LateContext<'_>, ty: Ty<'_>) -> Option<Symb
|
|||
}
|
||||
|
||||
/// Returns true if `ty` is a type on which calling `Clone` through a function instead of
|
||||
/// as a method, such as `Arc::clone()` is considered idiomatic. Lints should avoid suggesting to
|
||||
/// replace instances of `ty::Clone()` by `.clone()` for objects of those types.
|
||||
/// as a method, such as `Arc::clone()` is considered idiomatic.
|
||||
///
|
||||
/// Lints should avoid suggesting to replace instances of `ty::Clone()` by `.clone()` for objects
|
||||
/// of those types.
|
||||
pub fn should_call_clone_as_function(cx: &LateContext<'_>, ty: Ty<'_>) -> bool {
|
||||
matches!(
|
||||
get_type_diagnostic_name(cx, ty),
|
||||
|
@ -398,8 +400,10 @@ fn is_normalizable_helper<'tcx>(
|
|||
}
|
||||
|
||||
/// Returns `true` if the given type is a non aggregate primitive (a `bool` or `char`, any
|
||||
/// integer or floating-point number type). For checking aggregation of primitive types (e.g.
|
||||
/// tuples and slices of primitive type) see `is_recursively_primitive_type`
|
||||
/// integer or floating-point number type).
|
||||
///
|
||||
/// For checking aggregation of primitive types (e.g. tuples and slices of primitive type) see
|
||||
/// `is_recursively_primitive_type`
|
||||
pub fn is_non_aggregate_primitive_type(ty: Ty<'_>) -> bool {
|
||||
matches!(ty.kind(), ty::Bool | ty::Char | ty::Int(_) | ty::Uint(_) | ty::Float(_))
|
||||
}
|
||||
|
@ -476,9 +480,10 @@ pub fn match_type(cx: &LateContext<'_>, ty: Ty<'_>, path: &[&str]) -> bool {
|
|||
}
|
||||
}
|
||||
|
||||
/// Checks if the drop order for a type matters. Some std types implement drop solely to
|
||||
/// deallocate memory. For these types, and composites containing them, changing the drop order
|
||||
/// won't result in any observable side effects.
|
||||
/// Checks if the drop order for a type matters.
|
||||
///
|
||||
/// Some std types implement drop solely to deallocate memory. For these types, and composites
|
||||
/// containing them, changing the drop order won't result in any observable side effects.
|
||||
pub fn needs_ordered_drop<'tcx>(cx: &LateContext<'tcx>, ty: Ty<'tcx>) -> bool {
|
||||
fn needs_ordered_drop_inner<'tcx>(cx: &LateContext<'tcx>, ty: Ty<'tcx>, seen: &mut FxHashSet<Ty<'tcx>>) -> bool {
|
||||
if !seen.insert(ty) {
|
||||
|
@ -1324,6 +1329,7 @@ pub fn deref_chain<'cx, 'tcx>(cx: &'cx LateContext<'tcx>, ty: Ty<'tcx>) -> impl
|
|||
}
|
||||
|
||||
/// Checks if a Ty<'_> has some inherent method Symbol.
|
||||
///
|
||||
/// This does not look for impls in the type's `Deref::Target` type.
|
||||
/// If you need this, you should wrap this call in `clippy_utils::ty::deref_chain().any(...)`.
|
||||
pub fn get_adt_inherent_method<'a>(cx: &'a LateContext<'_>, ty: Ty<'_>, method_name: Symbol) -> Option<&'a AssocItem> {
|
||||
|
|
Loading…
Reference in a new issue