Format affected files

This commit is contained in:
Samuel Moelius 2022-10-09 07:01:49 -04:00
parent 2e5e3560e9
commit 5dc54c6066
15 changed files with 104 additions and 80 deletions

View file

@ -137,7 +137,7 @@ impl<'tcx> LateLintPass<'tcx> for LetUnderscore {
"non-binding let on a synchronization lock", "non-binding let on a synchronization lock",
None, None,
"consider using an underscore-prefixed named \ "consider using an underscore-prefixed named \
binding or dropping explicitly with `std::mem::drop`" binding or dropping explicitly with `std::mem::drop`",
); );
} else if init_ty.needs_drop(cx.tcx, cx.param_env) { } else if init_ty.needs_drop(cx.tcx, cx.param_env) {
span_lint_and_help( span_lint_and_help(
@ -147,7 +147,7 @@ impl<'tcx> LateLintPass<'tcx> for LetUnderscore {
"non-binding `let` on a type that implements `Drop`", "non-binding `let` on a type that implements `Drop`",
None, None,
"consider using an underscore-prefixed named \ "consider using an underscore-prefixed named \
binding or dropping explicitly with `std::mem::drop`" binding or dropping explicitly with `std::mem::drop`",
); );
} else if is_must_use_ty(cx, cx.typeck_results().expr_ty(init)) { } else if is_must_use_ty(cx, cx.typeck_results().expr_ty(init)) {
span_lint_and_help( span_lint_and_help(
@ -156,7 +156,7 @@ impl<'tcx> LateLintPass<'tcx> for LetUnderscore {
local.span, local.span,
"non-binding let on an expression with `#[must_use]` type", "non-binding let on an expression with `#[must_use]` type",
None, None,
"consider explicitly using expression value" "consider explicitly using expression value",
); );
} else if is_must_use_func_call(cx, init) { } else if is_must_use_func_call(cx, init) {
span_lint_and_help( span_lint_and_help(
@ -165,7 +165,7 @@ impl<'tcx> LateLintPass<'tcx> for LetUnderscore {
local.span, local.span,
"non-binding let on a result of a `#[must_use]` function", "non-binding let on a result of a `#[must_use]` function",
None, None,
"consider explicitly using function result" "consider explicitly using function result",
); );
} }
} }

View file

@ -263,7 +263,8 @@ impl<'a, 'tcx> VarVisitor<'a, 'tcx> {
match res { match res {
Res::Local(hir_id) => { Res::Local(hir_id) => {
let parent_def_id = self.cx.tcx.hir().get_parent_item(expr.hir_id); let parent_def_id = self.cx.tcx.hir().get_parent_item(expr.hir_id);
let extent = self.cx let extent = self
.cx
.tcx .tcx
.region_scope_tree(parent_def_id) .region_scope_tree(parent_def_id)
.var_scope(hir_id.local_id) .var_scope(hir_id.local_id)
@ -274,11 +275,12 @@ impl<'a, 'tcx> VarVisitor<'a, 'tcx> {
(Some(extent), self.cx.typeck_results().node_type(seqexpr.hir_id)), (Some(extent), self.cx.typeck_results().node_type(seqexpr.hir_id)),
); );
} else { } else {
self.indexed_indirectly.insert(seqvar.segments[0].ident.name, Some(extent)); self.indexed_indirectly
.insert(seqvar.segments[0].ident.name, Some(extent));
} }
return false; // no need to walk further *on the variable* return false; // no need to walk further *on the variable*
} },
Res::Def(DefKind::Static (_)| DefKind::Const, ..) => { Res::Def(DefKind::Static(_) | DefKind::Const, ..) => {
if index_used_directly { if index_used_directly {
self.indexed_directly.insert( self.indexed_directly.insert(
seqvar.segments[0].ident.name, seqvar.segments[0].ident.name,
@ -287,8 +289,8 @@ impl<'a, 'tcx> VarVisitor<'a, 'tcx> {
} else { } else {
self.indexed_indirectly.insert(seqvar.segments[0].ident.name, None); self.indexed_indirectly.insert(seqvar.segments[0].ident.name, None);
} }
return false; // no need to walk further *on the variable* return false; // no need to walk further *on the variable*
} },
_ => (), _ => (),
} }
} }
@ -310,14 +312,18 @@ impl<'a, 'tcx> Visitor<'tcx> for VarVisitor<'a, 'tcx> {
if (meth.ident.name == sym::index && self.cx.tcx.lang_items().index_trait() == Some(trait_id)) if (meth.ident.name == sym::index && self.cx.tcx.lang_items().index_trait() == Some(trait_id))
|| (meth.ident.name == sym::index_mut && self.cx.tcx.lang_items().index_mut_trait() == Some(trait_id)); || (meth.ident.name == sym::index_mut && self.cx.tcx.lang_items().index_mut_trait() == Some(trait_id));
if !self.check(args_1, args_0, expr); if !self.check(args_1, args_0, expr);
then { return } then {
return;
}
} }
if_chain! { if_chain! {
// an index op // an index op
if let ExprKind::Index(seqexpr, idx) = expr.kind; if let ExprKind::Index(seqexpr, idx) = expr.kind;
if !self.check(idx, seqexpr, expr); if !self.check(idx, seqexpr, expr);
then { return } then {
return;
}
} }
if_chain! { if_chain! {

View file

@ -139,9 +139,9 @@ fn future_output_ty<'tcx>(trait_ref: &'tcx TraitRef<'tcx>) -> Option<&'tcx Ty<'t
if args.bindings.len() == 1; if args.bindings.len() == 1;
let binding = &args.bindings[0]; let binding = &args.bindings[0];
if binding.ident.name == sym::Output; if binding.ident.name == sym::Output;
if let TypeBindingKind::Equality{term: Term::Ty(output)} = binding.kind; if let TypeBindingKind::Equality { term: Term::Ty(output) } = binding.kind;
then { then {
return Some(output) return Some(output);
} }
} }
@ -180,7 +180,10 @@ fn desugared_async_block<'tcx>(cx: &LateContext<'tcx>, block: &'tcx Block<'tcx>)
.from_generator_fn() .from_generator_fn()
.and_then(|def_id| match_function_call_with_def_id(cx, block_expr, def_id)); .and_then(|def_id| match_function_call_with_def_id(cx, block_expr, def_id));
if args.len() == 1; if args.len() == 1;
if let Expr{kind: ExprKind::Closure(&Closure { body, .. }), ..} = args[0]; if let Expr {
kind: ExprKind::Closure(&Closure { body, .. }),
..
} = args[0];
let closure_body = cx.tcx.hir().body(body); let closure_body = cx.tcx.hir().body(body);
if closure_body.generator_kind == Some(GeneratorKind::Async(AsyncGeneratorKind::Block)); if closure_body.generator_kind == Some(GeneratorKind::Async(AsyncGeneratorKind::Block));
then { then {

View file

@ -3370,7 +3370,9 @@ impl<'tcx> LateLintPass<'tcx> for Methods {
then { then {
let first_arg_span = first_arg_ty.span; let first_arg_span = first_arg_ty.span;
let first_arg_ty = hir_ty_to_ty(cx.tcx, first_arg_ty); let first_arg_ty = hir_ty_to_ty(cx.tcx, first_arg_ty);
let self_ty = TraitRef::identity(cx.tcx, item.def_id.to_def_id()).self_ty().skip_binder(); let self_ty = TraitRef::identity(cx.tcx, item.def_id.to_def_id())
.self_ty()
.skip_binder();
wrong_self_convention::check( wrong_self_convention::check(
cx, cx,
item.ident.name.as_str(), item.ident.name.as_str(),
@ -3378,7 +3380,7 @@ impl<'tcx> LateLintPass<'tcx> for Methods {
first_arg_ty, first_arg_ty,
first_arg_span, first_arg_span,
false, false,
true true,
); );
} }
} }
@ -3387,7 +3389,9 @@ impl<'tcx> LateLintPass<'tcx> for Methods {
if item.ident.name == sym::new; if item.ident.name == sym::new;
if let TraitItemKind::Fn(_, _) = item.kind; if let TraitItemKind::Fn(_, _) = item.kind;
let ret_ty = return_ty(cx, item.hir_id()); let ret_ty = return_ty(cx, item.hir_id());
let self_ty = TraitRef::identity(cx.tcx, item.def_id.to_def_id()).self_ty().skip_binder(); let self_ty = TraitRef::identity(cx.tcx, item.def_id.to_def_id())
.self_ty()
.skip_binder();
if !ret_ty.contains(self_ty); if !ret_ty.contains(self_ty);
then { then {

View file

@ -121,10 +121,9 @@ pub(super) fn check<'tcx>(
macro_expanded_snipped = snippet(cx, snippet_span, ".."); macro_expanded_snipped = snippet(cx, snippet_span, "..");
match macro_expanded_snipped.strip_prefix("$crate::vec::") { match macro_expanded_snipped.strip_prefix("$crate::vec::") {
Some(stripped) => Cow::from(stripped), Some(stripped) => Cow::from(stripped),
None => macro_expanded_snipped None => macro_expanded_snipped,
} }
} } else {
else {
not_macro_argument_snippet not_macro_argument_snippet
} }
}; };

View file

@ -47,14 +47,12 @@ declare_lint_pass!(NoNegCompOpForPartialOrd => [NEG_CMP_OP_ON_PARTIAL_ORD]);
impl<'tcx> LateLintPass<'tcx> for NoNegCompOpForPartialOrd { impl<'tcx> LateLintPass<'tcx> for NoNegCompOpForPartialOrd {
fn check_expr(&mut self, cx: &LateContext<'tcx>, expr: &'tcx Expr<'_>) { fn check_expr(&mut self, cx: &LateContext<'tcx>, expr: &'tcx Expr<'_>) {
if_chain! { if_chain! {
if !in_external_macro(cx.sess(), expr.span); if !in_external_macro(cx.sess(), expr.span);
if let ExprKind::Unary(UnOp::Not, inner) = expr.kind; if let ExprKind::Unary(UnOp::Not, inner) = expr.kind;
if let ExprKind::Binary(ref op, left, _) = inner.kind; if let ExprKind::Binary(ref op, left, _) = inner.kind;
if let BinOpKind::Le | BinOpKind::Ge | BinOpKind::Lt | BinOpKind::Gt = op.node; if let BinOpKind::Le | BinOpKind::Ge | BinOpKind::Lt | BinOpKind::Gt = op.node;
then { then {
let ty = cx.typeck_results().expr_ty(left); let ty = cx.typeck_results().expr_ty(left);
let implements_ord = { let implements_ord = {
@ -81,7 +79,7 @@ impl<'tcx> LateLintPass<'tcx> for NoNegCompOpForPartialOrd {
"the use of negated comparison operators on partially ordered \ "the use of negated comparison operators on partially ordered \
types produces code that is hard to read and refactor, please \ types produces code that is hard to read and refactor, please \
consider using the `partial_cmp` method instead, to make it \ consider using the `partial_cmp` method instead, to make it \
clear that the two values could be incomparable" clear that the two values could be incomparable",
); );
} }
} }

View file

@ -98,11 +98,15 @@ fn get_args_to_check<'tcx>(cx: &LateContext<'tcx>, expr: &'tcx Expr<'tcx>) -> Ve
if trait_pred.self_ty() == inp; if trait_pred.self_ty() == inp;
if let Some(return_ty_pred) = get_projection_pred(cx, generics, *trait_pred); if let Some(return_ty_pred) = get_projection_pred(cx, generics, *trait_pred);
then { then {
if ord_preds.iter().any(|ord| Some(ord.self_ty()) == return_ty_pred.term.ty()) { if ord_preds
.iter()
.any(|ord| Some(ord.self_ty()) == return_ty_pred.term.ty())
{
args_to_check.push((i, "Ord".to_string())); args_to_check.push((i, "Ord".to_string()));
} else if partial_ord_preds.iter().any(|pord| { } else if partial_ord_preds
pord.self_ty() == return_ty_pred.term.ty().unwrap() .iter()
}) { .any(|pord| pord.self_ty() == return_ty_pred.term.ty().unwrap())
{
args_to_check.push((i, "PartialOrd".to_string())); args_to_check.push((i, "PartialOrd".to_string()));
} }
} }

View file

@ -92,7 +92,12 @@ impl<'tcx> LateLintPass<'tcx> for CollapsibleCalls {
let mut sle = SpanlessEq::new(cx).deny_side_effects(); let mut sle = SpanlessEq::new(cx).deny_side_effects();
match ps.ident.as_str() { match ps.ident.as_str() {
"span_suggestion" if sle.eq_expr(&and_then_args[2], &span_call_args[0]) => { "span_suggestion" if sle.eq_expr(&and_then_args[2], &span_call_args[0]) => {
suggest_suggestion(cx, expr, &and_then_snippets, &span_suggestion_snippets(cx, span_call_args)); suggest_suggestion(
cx,
expr,
&and_then_snippets,
&span_suggestion_snippets(cx, span_call_args),
);
}, },
"span_help" if sle.eq_expr(&and_then_args[2], &span_call_args[0]) => { "span_help" if sle.eq_expr(&and_then_args[2], &span_call_args[0]) => {
let help_snippet = snippet(cx, span_call_args[1].span, r#""...""#); let help_snippet = snippet(cx, span_call_args[1].span, r#""...""#);
@ -105,12 +110,12 @@ impl<'tcx> LateLintPass<'tcx> for CollapsibleCalls {
"help" => { "help" => {
let help_snippet = snippet(cx, span_call_args[0].span, r#""...""#); let help_snippet = snippet(cx, span_call_args[0].span, r#""...""#);
suggest_help(cx, expr, &and_then_snippets, help_snippet.borrow(), false); suggest_help(cx, expr, &and_then_snippets, help_snippet.borrow(), false);
} },
"note" => { "note" => {
let note_snippet = snippet(cx, span_call_args[0].span, r#""...""#); let note_snippet = snippet(cx, span_call_args[0].span, r#""...""#);
suggest_note(cx, expr, &and_then_snippets, note_snippet.borrow(), false); suggest_note(cx, expr, &and_then_snippets, note_snippet.borrow(), false);
} },
_ => (), _ => (),
} }
} }
} }

View file

@ -61,8 +61,7 @@ impl<'tcx> LateLintPass<'tcx> for CompilerLintFunctions {
let fn_name = path.ident; let fn_name = path.ident;
if let Some(sugg) = self.map.get(fn_name.as_str()); if let Some(sugg) = self.map.get(fn_name.as_str());
let ty = cx.typeck_results().expr_ty(self_arg).peel_refs(); let ty = cx.typeck_results().expr_ty(self_arg).peel_refs();
if match_type(cx, ty, &paths::EARLY_CONTEXT) if match_type(cx, ty, &paths::EARLY_CONTEXT) || match_type(cx, ty, &paths::LATE_CONTEXT);
|| match_type(cx, ty, &paths::LATE_CONTEXT);
then { then {
span_lint_and_help( span_lint_and_help(
cx, cx,

View file

@ -94,7 +94,10 @@ fn check_nested_if_chains(
.iter() .iter()
.all(|stmt| matches!(stmt.kind, StmtKind::Local(..)) && !sm.is_multiline(stmt.span)); .all(|stmt| matches!(stmt.kind, StmtKind::Local(..)) && !sm.is_multiline(stmt.span));
if if_chain_span.is_some() || !is_else_clause(cx.tcx, if_expr); if if_chain_span.is_some() || !is_else_clause(cx.tcx, if_expr);
then {} else { return } then {
} else {
return;
}
} }
let (span, msg) = match (if_chain_span, is_expn_of(tail.span, "if_chain")) { let (span, msg) = match (if_chain_span, is_expn_of(tail.span, "if_chain")) {
(None, Some(_)) => (if_expr.span, "this `if` can be part of the inner `if_chain!`"), (None, Some(_)) => (if_expr.span, "this `if` can be part of the inner `if_chain!`"),

View file

@ -41,14 +41,17 @@ impl<'tcx> LateLintPass<'tcx> for InvalidPaths {
let body = cx.tcx.hir().body(body_id); let body = cx.tcx.hir().body(body_id);
let typeck_results = cx.tcx.typeck_body(body_id); let typeck_results = cx.tcx.typeck_body(body_id);
if let Some(Constant::Vec(path)) = constant_simple(cx, typeck_results, body.value); if let Some(Constant::Vec(path)) = constant_simple(cx, typeck_results, body.value);
let path: Vec<&str> = path.iter().map(|x| { let path: Vec<&str> = path
.iter()
.map(|x| {
if let Constant::Str(s) = x { if let Constant::Str(s) = x {
s.as_str() s.as_str()
} else { } else {
// We checked the type of the constant above // We checked the type of the constant above
unreachable!() unreachable!()
} }
}).collect(); })
.collect();
if !check_path(cx, &path[..]); if !check_path(cx, &path[..]);
then { then {
span_lint(cx, INVALID_PATHS, item.span, "invalid path"); span_lint(cx, INVALID_PATHS, item.span, "invalid path");

View file

@ -317,11 +317,7 @@ pub(super) fn extract_clippy_version_value(cx: &LateContext<'_>, item: &'_ Item<
if tool_name.ident.name == sym::clippy; if tool_name.ident.name == sym::clippy;
if attr_name.ident.name == sym::version; if attr_name.ident.name == sym::version;
if let Some(version) = attr.value_str(); if let Some(version) = attr.value_str();
then { then { Some(version) } else { None }
Some(version)
} else {
None
}
} }
}) })
} }

View file

@ -532,7 +532,11 @@ fn parse_config_field_doc(doc_comment: &str) -> Option<(Vec<String>, String)> {
// Extract lints // Extract lints
doc_comment.make_ascii_lowercase(); doc_comment.make_ascii_lowercase();
let lints: Vec<String> = doc_comment.split_off(DOC_START.len()).split(", ").map(str::to_string).collect(); let lints: Vec<String> = doc_comment
.split_off(DOC_START.len())
.split(", ")
.map(str::to_string)
.collect();
// Format documentation correctly // Format documentation correctly
// split off leading `.` from lint name list and indent for correct formatting // split off leading `.` from lint name list and indent for correct formatting

View file

@ -42,7 +42,7 @@ impl<'tcx> LateLintPass<'tcx> for OuterExpnDataPass {
let method_names: Vec<&str> = method_names.iter().map(Symbol::as_str).collect(); let method_names: Vec<&str> = method_names.iter().map(Symbol::as_str).collect();
if_chain! { if_chain! {
if let ["expn_data", "outer_expn"] = method_names.as_slice(); if let ["expn_data", "outer_expn"] = method_names.as_slice();
let (self_arg, args)= arg_lists[1]; let (self_arg, args) = arg_lists[1];
if args.is_empty(); if args.is_empty();
let self_ty = cx.typeck_results().expr_ty(self_arg).peel_refs(); let self_ty = cx.typeck_results().expr_ty(self_arg).peel_refs();
if match_type(cx, self_ty, &paths::SYNTAX_CONTEXT); if match_type(cx, self_ty, &paths::SYNTAX_CONTEXT);

View file

@ -102,7 +102,7 @@ impl UnnecessaryDefPath {
]; ];
if_chain! { if_chain! {
if let [cx_arg, def_arg, args@..] = args; if let [cx_arg, def_arg, args @ ..] = args;
if let ExprKind::Path(path) = &func.kind; if let ExprKind::Path(path) = &func.kind;
if let Some(id) = cx.qpath_res(path, func.hir_id).opt_def_id(); if let Some(id) = cx.qpath_res(path, func.hir_id).opt_def_id();
if let Some(which_path) = match_any_def_paths(cx, id, PATHS); if let Some(which_path) = match_any_def_paths(cx, id, PATHS);
@ -113,6 +113,7 @@ impl UnnecessaryDefPath {
if let Some(def_id) = inherent_def_path_res(cx, &segments[..]); if let Some(def_id) = inherent_def_path_res(cx, &segments[..]);
then { then {
// Check if the target item is a diagnostic item or LangItem. // Check if the target item is a diagnostic item or LangItem.
#[rustfmt::skip]
let (msg, item) = if let Some(item_name) let (msg, item) = if let Some(item_name)
= cx.tcx.diagnostic_items(def_id.krate).id_to_name.get(&def_id) = cx.tcx.diagnostic_items(def_id.krate).id_to_name.get(&def_id)
{ {
@ -133,11 +134,11 @@ impl UnnecessaryDefPath {
DefKind::Struct => { DefKind::Struct => {
let variant = cx.tcx.adt_def(def_id).non_enum_variant(); let variant = cx.tcx.adt_def(def_id).non_enum_variant();
variant.ctor_def_id.is_some() && variant.fields.iter().all(|f| f.vis.is_public()) variant.ctor_def_id.is_some() && variant.fields.iter().all(|f| f.vis.is_public())
} },
DefKind::Variant => { DefKind::Variant => {
let variant = cx.tcx.adt_def(cx.tcx.parent(def_id)).variant_with_id(def_id); let variant = cx.tcx.adt_def(cx.tcx.parent(def_id)).variant_with_id(def_id);
variant.ctor_def_id.is_some() && variant.fields.iter().all(|f| f.vis.is_public()) variant.ctor_def_id.is_some() && variant.fields.iter().all(|f| f.vis.is_public())
} },
_ => false, _ => false,
}; };
@ -146,35 +147,40 @@ impl UnnecessaryDefPath {
let def_snip = snippet_with_applicability(cx, def_arg.span, "..", &mut app); let def_snip = snippet_with_applicability(cx, def_arg.span, "..", &mut app);
let (sugg, with_note) = match (which_path, item) { let (sugg, with_note) = match (which_path, item) {
// match_def_path // match_def_path
(0, Item::DiagnosticItem(item)) => (0, Item::DiagnosticItem(item)) => (
(format!("{cx_snip}.tcx.is_diagnostic_item(sym::{item}, {def_snip})"), has_ctor), format!("{cx_snip}.tcx.is_diagnostic_item(sym::{item}, {def_snip})"),
has_ctor,
),
(0, Item::LangItem(item)) => ( (0, Item::LangItem(item)) => (
format!("{cx_snip}.tcx.lang_items().require(LangItem::{item}).ok() == Some({def_snip})"), format!("{cx_snip}.tcx.lang_items().require(LangItem::{item}).ok() == Some({def_snip})"),
has_ctor has_ctor,
), ),
// match_trait_method // match_trait_method
(1, Item::DiagnosticItem(item)) => (1, Item::DiagnosticItem(item)) => {
(format!("is_trait_method({cx_snip}, {def_snip}, sym::{item})"), false), (format!("is_trait_method({cx_snip}, {def_snip}, sym::{item})"), false)
},
// match_type // match_type
(2, Item::DiagnosticItem(item)) => (2, Item::DiagnosticItem(item)) => (
(format!("is_type_diagnostic_item({cx_snip}, {def_snip}, sym::{item})"), false), format!("is_type_diagnostic_item({cx_snip}, {def_snip}, sym::{item})"),
(2, Item::LangItem(item)) => false,
(format!("is_type_lang_item({cx_snip}, {def_snip}, LangItem::{item})"), false), ),
(2, Item::LangItem(item)) => (
format!("is_type_lang_item({cx_snip}, {def_snip}, LangItem::{item})"),
false,
),
// is_expr_path_def_path // is_expr_path_def_path
(3, Item::DiagnosticItem(item)) if has_ctor => ( (3, Item::DiagnosticItem(item)) if has_ctor => (
format!( format!("is_res_diag_ctor({cx_snip}, path_res({cx_snip}, {def_snip}), sym::{item})",),
"is_res_diag_ctor({cx_snip}, path_res({cx_snip}, {def_snip}), sym::{item})",
),
false, false,
), ),
(3, Item::LangItem(item)) if has_ctor => ( (3, Item::LangItem(item)) if has_ctor => (
format!( format!("is_res_lang_ctor({cx_snip}, path_res({cx_snip}, {def_snip}), LangItem::{item})",),
"is_res_lang_ctor({cx_snip}, path_res({cx_snip}, {def_snip}), LangItem::{item})", false,
), ),
(3, Item::DiagnosticItem(item)) => (
format!("is_path_diagnostic_item({cx_snip}, {def_snip}, sym::{item})"),
false, false,
), ),
(3, Item::DiagnosticItem(item)) =>
(format!("is_path_diagnostic_item({cx_snip}, {def_snip}, sym::{item})"), false),
(3, Item::LangItem(item)) => ( (3, Item::LangItem(item)) => (
format!( format!(
"path_res({cx_snip}, {def_snip}).opt_def_id()\ "path_res({cx_snip}, {def_snip}).opt_def_id()\
@ -185,21 +191,15 @@ impl UnnecessaryDefPath {
_ => return, _ => return,
}; };
span_lint_and_then( span_lint_and_then(cx, UNNECESSARY_DEF_PATH, span, msg, |diag| {
cx, diag.span_suggestion(span, "try", sugg, app);
UNNECESSARY_DEF_PATH, if with_note {
span, diag.help(
msg, "if this `DefId` came from a constructor expression or pattern then the \
|diag| { parent `DefId` should be used instead",
diag.span_suggestion(span, "try", sugg, app); );
if with_note { }
diag.help( });
"if this `DefId` came from a constructor expression or pattern then the \
parent `DefId` should be used instead"
);
}
},
);
self.linted_def_ids.insert(def_id); self.linted_def_ids.insert(def_id);
} }