Skip to content

Commit

Permalink
clippy: add MetaSized conditions
Browse files Browse the repository at this point in the history
Existing lints that had special-casing for `Sized` predicates ought
to have these same special cases applied to `MetaSized` predicates.
  • Loading branch information
davidtwco committed Mar 3, 2025
1 parent 3e5a550 commit 7f509ab
Show file tree
Hide file tree
Showing 3 changed files with 8 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -386,9 +386,11 @@ fn check_other_call_arg<'tcx>(
&& let (input, n_refs) = peel_middle_ty_refs(*input)
&& let (trait_predicates, _) = get_input_traits_and_projections(cx, callee_def_id, input)
&& let Some(sized_def_id) = cx.tcx.lang_items().sized_trait()
&& let Some(metasized_def_id) = cx.tcx.lang_items().metasized_trait()
&& let [trait_predicate] = trait_predicates
.iter()
.filter(|trait_predicate| trait_predicate.def_id() != sized_def_id)
.filter(|trait_predicate| trait_predicate.def_id() != metasized_def_id)
.collect::<Vec<_>>()[..]
&& let Some(deref_trait_id) = cx.tcx.get_diagnostic_item(sym::Deref)
&& let Some(as_ref_trait_id) = cx.tcx.get_diagnostic_item(sym::AsRef)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -174,6 +174,7 @@ fn needless_borrow_count<'tcx>(
) -> usize {
let destruct_trait_def_id = cx.tcx.lang_items().destruct_trait();
let sized_trait_def_id = cx.tcx.lang_items().sized_trait();
let metasized_trait_def_id = cx.tcx.lang_items().metasized_trait();
let drop_trait_def_id = cx.tcx.lang_items().drop_trait();

let fn_sig = cx.tcx.fn_sig(fn_id).instantiate_identity().skip_binder();
Expand Down Expand Up @@ -209,6 +210,7 @@ fn needless_borrow_count<'tcx>(
.all(|trait_def_id| {
Some(trait_def_id) == destruct_trait_def_id
|| Some(trait_def_id) == sized_trait_def_id
|| Some(trait_def_id) == metasized_trait_def_id
|| cx.tcx.is_diagnostic_item(sym::Any, trait_def_id)
})
{
Expand Down
5 changes: 4 additions & 1 deletion src/tools/clippy/clippy_lints/src/needless_pass_by_value.rs
Original file line number Diff line number Diff line change
Expand Up @@ -116,13 +116,16 @@ impl<'tcx> LateLintPass<'tcx> for NeedlessPassByValue {
];

let sized_trait = need!(cx.tcx.lang_items().sized_trait());
let metasized_trait = need!(cx.tcx.lang_items().metasized_trait());

let preds = traits::elaborate(cx.tcx, cx.param_env.caller_bounds().iter())
.filter(|p| !p.is_global())
.filter_map(|pred| {
// Note that we do not want to deal with qualified predicates here.
match pred.kind().no_bound_vars() {
Some(ty::ClauseKind::Trait(pred)) if pred.def_id() != sized_trait => Some(pred),
Some(ty::ClauseKind::Trait(pred))
if pred.def_id() != sized_trait && pred.def_id() != metasized_trait
=> Some(pred),
_ => None,
}
})
Expand Down

0 comments on commit 7f509ab

Please sign in to comment.