Refactor endian_bytes
:
* Merge code paths. * Check HIR tree before checking for macros.
This commit is contained in:
parent
0a25df87ef
commit
1b0230cf25
@ -109,32 +109,27 @@ impl LintKind {
|
||||
|
||||
impl LateLintPass<'_> for EndianBytes {
|
||||
fn check_expr(&mut self, cx: &LateContext<'_>, expr: &Expr<'_>) {
|
||||
if in_external_macro(cx.sess(), expr.span) {
|
||||
return;
|
||||
}
|
||||
|
||||
if let ExprKind::MethodCall(method_name, receiver, args, ..) = expr.kind
|
||||
&& args.is_empty()
|
||||
&& let ty = cx.typeck_results().expr_ty(receiver)
|
||||
&& ty.is_primitive_ty()
|
||||
&& maybe_lint_endian_bytes(cx, expr, Prefix::To, method_name.ident.name, ty)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if let ExprKind::Call(function, ..) = expr.kind
|
||||
&& let ExprKind::Path(qpath) = function.kind
|
||||
&& let Some(def_id) = cx.qpath_res(&qpath, function.hir_id).opt_def_id()
|
||||
&& let Some(function_name) = cx.get_def_path(def_id).last()
|
||||
&& let ty = cx.typeck_results().expr_ty(expr)
|
||||
let (prefix, name, ty_expr) = match expr.kind {
|
||||
ExprKind::MethodCall(method_name, receiver, [], ..) => (Prefix::To, method_name.ident.name, receiver),
|
||||
ExprKind::Call(function, ..)
|
||||
if let ExprKind::Path(qpath) = function.kind
|
||||
&& let Some(def_id) = cx.qpath_res(&qpath, function.hir_id).opt_def_id()
|
||||
&& let Some(function_name) = cx.get_def_path(def_id).last() =>
|
||||
{
|
||||
(Prefix::From, *function_name, expr)
|
||||
},
|
||||
_ => return,
|
||||
};
|
||||
if !in_external_macro(cx.sess(), expr.span)
|
||||
&& let ty = cx.typeck_results().expr_ty(ty_expr)
|
||||
&& ty.is_primitive_ty()
|
||||
{
|
||||
maybe_lint_endian_bytes(cx, expr, Prefix::From, *function_name, ty);
|
||||
maybe_lint_endian_bytes(cx, expr, prefix, name, ty);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn maybe_lint_endian_bytes(cx: &LateContext<'_>, expr: &Expr<'_>, prefix: Prefix, name: Symbol, ty: Ty<'_>) -> bool {
|
||||
fn maybe_lint_endian_bytes(cx: &LateContext<'_>, expr: &Expr<'_>, prefix: Prefix, name: Symbol, ty: Ty<'_>) {
|
||||
let ne = LintKind::Host.as_name(prefix);
|
||||
let le = LintKind::Little.as_name(prefix);
|
||||
let be = LintKind::Big.as_name(prefix);
|
||||
@ -143,7 +138,7 @@ fn maybe_lint_endian_bytes(cx: &LateContext<'_>, expr: &Expr<'_>, prefix: Prefix
|
||||
name if name == ne => ((&LintKind::Host), [(&LintKind::Little), (&LintKind::Big)]),
|
||||
name if name == le => ((&LintKind::Little), [(&LintKind::Host), (&LintKind::Big)]),
|
||||
name if name == be => ((&LintKind::Big), [(&LintKind::Host), (&LintKind::Little)]),
|
||||
_ => return false,
|
||||
_ => return,
|
||||
};
|
||||
|
||||
let mut help = None;
|
||||
@ -208,6 +203,4 @@ fn maybe_lint_endian_bytes(cx: &LateContext<'_>, expr: &Expr<'_>, prefix: Prefix
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
true
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user