fix: also get ty_sugg in the matches! case
This commit is contained in:
parent
877967959a
commit
f64fbe1184
4 changed files with 50 additions and 14 deletions
|
|
@ -97,11 +97,12 @@ impl<'tcx> LateLintPass<'tcx> for ManualIsAsciiCheck {
|
|||
return;
|
||||
}
|
||||
|
||||
if let Some(macro_call) = matching_root_macro_call(cx, expr.span, sym::matches_macro) {
|
||||
if let ExprKind::Match(recv, [arm, ..], _) = expr.kind {
|
||||
let range = check_pat(&arm.pat.kind);
|
||||
check_is_ascii(cx, macro_call.span, recv, &range, None);
|
||||
}
|
||||
let (arg, span, range) = if let Some(macro_call) = matching_root_macro_call(cx, expr.span, sym::matches_macro)
|
||||
&& let ExprKind::Match(recv, [arm, ..], _) = expr.kind
|
||||
{
|
||||
let recv = peel_ref_operators(cx, recv);
|
||||
let range = check_pat(&arm.pat.kind);
|
||||
(recv, macro_call.span, range)
|
||||
} else if let ExprKind::MethodCall(path, receiver, [arg], ..) = expr.kind
|
||||
&& path.ident.name == sym::contains
|
||||
&& let Some(higher::Range {
|
||||
|
|
@ -112,10 +113,14 @@ impl<'tcx> LateLintPass<'tcx> for ManualIsAsciiCheck {
|
|||
&& !matches!(cx.typeck_results().expr_ty(arg).peel_refs().kind(), ty::Param(_))
|
||||
{
|
||||
let arg = peel_ref_operators(cx, arg);
|
||||
let ty_sugg = get_ty_sugg(cx, arg);
|
||||
let range = check_expr_range(start, end);
|
||||
check_is_ascii(cx, expr.span, arg, &range, ty_sugg);
|
||||
}
|
||||
(arg, expr.span, range)
|
||||
} else {
|
||||
return;
|
||||
};
|
||||
|
||||
let ty_sugg = get_ty_sugg(cx, arg);
|
||||
check_is_ascii(cx, span, arg, &range, ty_sugg);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -146,9 +151,8 @@ fn check_is_ascii(
|
|||
CharRange::HexDigit => "is_ascii_hexdigit",
|
||||
CharRange::Otherwise | CharRange::LowerHexLetter | CharRange::UpperHexLetter => return,
|
||||
};
|
||||
let default_snip = "..";
|
||||
let mut app = Applicability::MachineApplicable;
|
||||
let recv = Sugg::hir_with_context(cx, recv, span.ctxt(), default_snip, &mut app).maybe_paren();
|
||||
let recv = Sugg::hir_with_context(cx, recv, span.ctxt(), "_", &mut app).maybe_paren();
|
||||
let mut suggestion = vec![(span, format!("{recv}.{sugg}()"))];
|
||||
if let Some((ty_span, ty)) = ty_sugg {
|
||||
suggestion.push((ty_span, format!("{recv}: {ty}")));
|
||||
|
|
@ -182,7 +186,7 @@ fn check_pat(pat_kind: &PatKind<'_>) -> CharRange {
|
|||
CharRange::Otherwise
|
||||
}
|
||||
},
|
||||
PatKind::Range(Some(start), Some(end), kind) if *kind == RangeEnd::Included => check_range(start, end),
|
||||
PatKind::Range(Some(start), Some(end), RangeEnd::Included) => check_range(start, end),
|
||||
_ => CharRange::Otherwise,
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -108,6 +108,8 @@ fn generics() {
|
|||
//~^ manual_is_ascii_check
|
||||
take_while(|c: char| c.is_ascii_uppercase());
|
||||
//~^ manual_is_ascii_check
|
||||
take_while(|c: char| c.is_ascii_uppercase());
|
||||
//~^ manual_is_ascii_check
|
||||
}
|
||||
|
||||
fn adds_type_reference() {
|
||||
|
|
@ -115,4 +117,6 @@ fn adds_type_reference() {
|
|||
//~^ manual_is_ascii_check
|
||||
let digits: Vec<&mut char> = ['1', 'A'].iter_mut().take_while(|c: &&mut char| c.is_ascii_digit()).collect();
|
||||
//~^ manual_is_ascii_check
|
||||
let digits: Vec<&mut char> = ['1', 'A'].iter_mut().take_while(|c: &&mut char| c.is_ascii_digit()).collect();
|
||||
//~^ manual_is_ascii_check
|
||||
}
|
||||
|
|
|
|||
|
|
@ -108,6 +108,8 @@ fn generics() {
|
|||
//~^ manual_is_ascii_check
|
||||
take_while(|c: char| ('A'..='Z').contains(&c));
|
||||
//~^ manual_is_ascii_check
|
||||
take_while(|c| matches!(c, 'A'..='Z'));
|
||||
//~^ manual_is_ascii_check
|
||||
}
|
||||
|
||||
fn adds_type_reference() {
|
||||
|
|
@ -115,4 +117,6 @@ fn adds_type_reference() {
|
|||
//~^ manual_is_ascii_check
|
||||
let digits: Vec<&mut char> = ['1', 'A'].iter_mut().take_while(|c| ('0'..='9').contains(c)).collect();
|
||||
//~^ manual_is_ascii_check
|
||||
let digits: Vec<&mut char> = ['1', 'A'].iter_mut().take_while(|c| matches!(c, '0'..='9')).collect();
|
||||
//~^ manual_is_ascii_check
|
||||
}
|
||||
|
|
|
|||
|
|
@ -176,7 +176,19 @@ LL | take_while(|c: char| ('A'..='Z').contains(&c));
|
|||
| ^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `c.is_ascii_uppercase()`
|
||||
|
||||
error: manual check for common ascii range
|
||||
--> tests/ui/manual_is_ascii_check.rs:114:63
|
||||
--> tests/ui/manual_is_ascii_check.rs:111:20
|
||||
|
|
||||
LL | take_while(|c| matches!(c, 'A'..='Z'));
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
help: try
|
||||
|
|
||||
LL - take_while(|c| matches!(c, 'A'..='Z'));
|
||||
LL + take_while(|c: char| c.is_ascii_uppercase());
|
||||
|
|
||||
|
||||
error: manual check for common ascii range
|
||||
--> tests/ui/manual_is_ascii_check.rs:116:63
|
||||
|
|
||||
LL | let digits: Vec<&char> = ['1', 'A'].iter().take_while(|c| ('0'..='9').contains(c)).collect();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
@ -188,7 +200,7 @@ LL + let digits: Vec<&char> = ['1', 'A'].iter().take_while(|c: &&char| c.is_
|
|||
|
|
||||
|
||||
error: manual check for common ascii range
|
||||
--> tests/ui/manual_is_ascii_check.rs:116:71
|
||||
--> tests/ui/manual_is_ascii_check.rs:118:71
|
||||
|
|
||||
LL | let digits: Vec<&mut char> = ['1', 'A'].iter_mut().take_while(|c| ('0'..='9').contains(c)).collect();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
@ -199,5 +211,17 @@ LL - let digits: Vec<&mut char> = ['1', 'A'].iter_mut().take_while(|c| ('0'.
|
|||
LL + let digits: Vec<&mut char> = ['1', 'A'].iter_mut().take_while(|c: &&mut char| c.is_ascii_digit()).collect();
|
||||
|
|
||||
|
||||
error: aborting due to 29 previous errors
|
||||
error: manual check for common ascii range
|
||||
--> tests/ui/manual_is_ascii_check.rs:120:71
|
||||
|
|
||||
LL | let digits: Vec<&mut char> = ['1', 'A'].iter_mut().take_while(|c| matches!(c, '0'..='9')).collect();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
help: try
|
||||
|
|
||||
LL - let digits: Vec<&mut char> = ['1', 'A'].iter_mut().take_while(|c| matches!(c, '0'..='9')).collect();
|
||||
LL + let digits: Vec<&mut char> = ['1', 'A'].iter_mut().take_while(|c: &&mut char| c.is_ascii_digit()).collect();
|
||||
|
|
||||
|
||||
error: aborting due to 31 previous errors
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue