use crate::utils::{
- get_trait_def_id, implements_trait, in_macro, match_type, paths, snippet_opt, span_lint_and_sugg,
+ get_trait_def_id, implements_trait, in_macro, is_type_diagnostic_item, paths, snippet_opt, span_lint_and_sugg,
span_lint_and_then, SpanlessEq,
};
use if_chain::if_chain;
-use rustc::hir::map::Map;
use rustc_ast::ast::LitKind;
use rustc_errors::Applicability;
use rustc_hir::intravisit::{walk_expr, FnKind, NestedVisitorMap, Visitor};
use rustc_hir::{BinOpKind, Body, Expr, ExprKind, FnDecl, HirId, UnOp};
use rustc_lint::{LateContext, LateLintPass};
+use rustc_middle::hir::map::Map;
use rustc_session::{declare_lint_pass, declare_tool_lint};
use rustc_span::source_map::Span;
))
})
},
- ExprKind::MethodCall(path, _, args) if args.len() == 1 => {
- let type_of_receiver = cx.tables.expr_ty(&args[0]);
- if !match_type(cx, type_of_receiver, &paths::OPTION) && !match_type(cx, type_of_receiver, &paths::RESULT) {
+ ExprKind::MethodCall(path, _, args, _) if args.len() == 1 => {
+ let type_of_receiver = cx.tables().expr_ty(&args[0]);
+ if !is_type_diagnostic_item(cx, type_of_receiver, sym!(option_type))
+ && !is_type_diagnostic_item(cx, type_of_receiver, sym!(result_type))
+ {
return None;
}
METHODS_WITH_NEGATION
LOGIC_BUG,
e.span,
"this boolean expression contains a logic bug",
- |db| {
- db.span_help(
+ |diag| {
+ diag.span_help(
h2q.terminals[i].span,
"this expression can be optimized out by applying boolean operations to the \
outer expression",
);
- db.span_suggestion(
+ diag.span_suggestion(
e.span,
"it would look like the following",
suggest(self.cx, suggestion, &h2q.terminals),
NONMINIMAL_BOOL,
e.span,
"this boolean expression can be simplified",
- |db| {
- db.span_suggestions(
+ |diag| {
+ diag.span_suggestions(
e.span,
"try",
suggestions.into_iter(),
self.bool_expr(e)
},
ExprKind::Unary(UnOp::UnNot, inner) => {
- if self.cx.tables.node_types()[inner.hir_id].is_bool() {
+ if self.cx.tables().node_types()[inner.hir_id].is_bool() {
self.bool_expr(e);
} else {
walk_expr(self, e);
}
fn implements_ord<'a, 'tcx>(cx: &'a LateContext<'a, 'tcx>, expr: &Expr<'_>) -> bool {
- let ty = cx.tables.expr_ty(expr);
+ let ty = cx.tables().expr_ty(expr);
get_trait_def_id(cx, &paths::ORD).map_or(false, |id| implements_trait(cx, ty, id, &[]))
}