Use is_str instead of string kind comparison
This commit is contained in:
parent
0b439b119b
commit
3504c408f0
@ -146,7 +146,7 @@ fn check_panic<'tcx>(cx: &LateContext<'tcx>, f: &'tcx hir::Expr<'tcx>, arg: &'tc
|
||||
// If this is a &str or String, we can confidently give the `"{}", ` suggestion.
|
||||
let is_str = matches!(
|
||||
ty.kind(),
|
||||
ty::Ref(_, r, _) if *r.kind() == ty::Str,
|
||||
ty::Ref(_, r, _) if r.is_str(),
|
||||
) || matches!(
|
||||
ty.ty_adt_def(),
|
||||
Some(ty_def) if Some(ty_def.did()) == cx.tcx.lang_items().string(),
|
||||
|
@ -33,7 +33,7 @@ fn get_arg_root<'a>(cx: &LateContext<'_>, arg: &'a hir::Expr<'a>) -> &'a hir::Ex
|
||||
if (method_name.ident.name == sym::as_str || method_name.ident.name == sym::as_ref) && {
|
||||
let arg_type = cx.typeck_results().expr_ty(receiver);
|
||||
let base_type = arg_type.peel_refs();
|
||||
*base_type.kind() == ty::Str || is_type_lang_item(cx, base_type, hir::LangItem::String)
|
||||
base_type.is_str() || is_type_lang_item(cx, base_type, hir::LangItem::String)
|
||||
} {
|
||||
receiver
|
||||
} else {
|
||||
@ -54,7 +54,7 @@ fn requires_to_string(cx: &LateContext<'_>, arg: &hir::Expr<'_>) -> bool {
|
||||
return false;
|
||||
}
|
||||
if let ty::Ref(_, ty, ..) = arg_ty.kind() {
|
||||
if *ty.kind() == ty::Str && can_be_static_str(cx, arg) {
|
||||
if ty.is_str() && can_be_static_str(cx, arg) {
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
@ -8,7 +8,6 @@
|
||||
use rustc_hir as hir;
|
||||
use rustc_hir::PatKind;
|
||||
use rustc_lint::LateContext;
|
||||
use rustc_middle::ty;
|
||||
use rustc_span::source_map::Span;
|
||||
use rustc_span::symbol::sym;
|
||||
|
||||
@ -108,7 +107,7 @@ pub(super) fn check<'tcx>(
|
||||
if is_type_lang_item(cx, self_ty, hir::LangItem::String) {
|
||||
true
|
||||
} else {
|
||||
*self_ty.kind() == ty::Str
|
||||
self_ty.is_str()
|
||||
}
|
||||
};
|
||||
if_chain! {
|
||||
|
@ -47,7 +47,7 @@ pub(super) fn check(
|
||||
for &(method, pos) in &PATTERN_METHODS {
|
||||
if_chain! {
|
||||
if let ty::Ref(_, ty, _) = cx.typeck_results().expr_ty_adjusted(receiver).kind();
|
||||
if *ty.kind() == ty::Str;
|
||||
if ty.is_str();
|
||||
if method_name.as_str() == method && args.len() > pos;
|
||||
let arg = &args[pos];
|
||||
let mut applicability = Applicability::MachineApplicable;
|
||||
|
@ -5,7 +5,6 @@
|
||||
use rustc_errors::Applicability;
|
||||
use rustc_hir as hir;
|
||||
use rustc_lint::LateContext;
|
||||
use rustc_middle::ty;
|
||||
|
||||
use super::STRING_EXTEND_CHARS;
|
||||
|
||||
@ -17,7 +16,7 @@ pub(super) fn check(cx: &LateContext<'_>, expr: &hir::Expr<'_>, recv: &hir::Expr
|
||||
if let Some(arglists) = method_chain_args(arg, &["chars"]) {
|
||||
let target = &arglists[0].0;
|
||||
let self_ty = cx.typeck_results().expr_ty(target).peel_refs();
|
||||
let ref_str = if *self_ty.kind() == ty::Str {
|
||||
let ref_str = if self_ty.is_str() {
|
||||
if matches!(target.kind, hir::ExprKind::Index(..)) {
|
||||
"&"
|
||||
} else {
|
||||
|
@ -190,7 +190,7 @@ fn check_expr(&mut self, cx: &LateContext<'tcx>, e: &'tcx Expr<'_>) {
|
||||
},
|
||||
ExprKind::Index(target, _idx) => {
|
||||
let e_ty = cx.typeck_results().expr_ty(target).peel_refs();
|
||||
if matches!(e_ty.kind(), ty::Str) || is_type_lang_item(cx, e_ty, LangItem::String) {
|
||||
if e_ty.is_str() || is_type_lang_item(cx, e_ty, LangItem::String) {
|
||||
span_lint(
|
||||
cx,
|
||||
STRING_SLICE,
|
||||
@ -407,7 +407,7 @@ fn check_expr(&mut self, cx: &LateContext<'tcx>, expr: &Expr<'_>) {
|
||||
if path.ident.name == sym::to_string;
|
||||
let ty = cx.typeck_results().expr_ty(self_arg);
|
||||
if let ty::Ref(_, ty, ..) = ty.kind();
|
||||
if *ty.kind() == ty::Str;
|
||||
if ty.is_str();
|
||||
then {
|
||||
span_lint_and_help(
|
||||
cx,
|
||||
|
@ -22,7 +22,8 @@ pub(super) fn check<'tcx>(
|
||||
|
||||
if let (ty::Ref(_, ty_from, from_mutbl), ty::Ref(_, ty_to, to_mutbl)) = (&from_ty.kind(), &to_ty.kind()) {
|
||||
if_chain! {
|
||||
if let (&ty::Slice(slice_ty), &ty::Str) = (&ty_from.kind(), &ty_to.kind());
|
||||
if let ty::Slice(slice_ty) = *ty_from.kind();
|
||||
if ty_to.is_str();
|
||||
if let ty::Uint(ty::UintTy::U8) = slice_ty.kind();
|
||||
if from_mutbl == to_mutbl;
|
||||
then {
|
||||
|
@ -346,7 +346,7 @@ pub fn is_non_aggregate_primitive_type(ty: Ty<'_>) -> bool {
|
||||
pub fn is_recursively_primitive_type(ty: Ty<'_>) -> bool {
|
||||
match *ty.kind() {
|
||||
ty::Bool | ty::Char | ty::Int(_) | ty::Uint(_) | ty::Float(_) | ty::Str => true,
|
||||
ty::Ref(_, inner, _) if *inner.kind() == ty::Str => true,
|
||||
ty::Ref(_, inner, _) if inner.is_str() => true,
|
||||
ty::Array(inner_type, _) | ty::Slice(inner_type) => is_recursively_primitive_type(inner_type),
|
||||
ty::Tuple(inner_types) => inner_types.iter().all(is_recursively_primitive_type),
|
||||
_ => false,
|
||||
|
Loading…
Reference in New Issue
Block a user