use if_chain::if_chain;
-use rustc::declare_lint_pass;
-use rustc::hir::*;
-use rustc::lint::{LateContext, LateLintPass, LintArray, LintPass};
+use rustc_ast::ast::RangeLimits;
use rustc_errors::Applicability;
-use rustc_session::declare_tool_lint;
-use syntax::ast::RangeLimits;
-use syntax::source_map::Spanned;
+use rustc_hir::{BinOpKind, Expr, ExprKind, QPath};
+use rustc_lint::{LateContext, LateLintPass};
+use rustc_session::{declare_lint_pass, declare_tool_lint};
+use rustc_span::source_map::Spanned;
use crate::utils::sugg::Sugg;
use crate::utils::{higher, SpanlessEq};
/// and ends with a closing one.
/// I.e., `let _ = (f()+1)..(f()+1)` results in `let _ = ((f()+1)..=f())`.
///
+ /// Also in many cases, inclusive ranges are still slower to run than
+ /// exclusive ranges, because they essentially add an extra branch that
+ /// LLVM may fail to hoist out of the loop.
+ ///
/// **Example:**
/// ```rust,ignore
/// for x..(y+1) { .. }
/// for x..=y { .. }
/// ```
pub RANGE_PLUS_ONE,
- complexity,
+ pedantic,
"`x..(y+1)` reads better as `x..=y`"
}
span_lint(cx,
RANGE_ZIP_WITH_LEN,
expr.span,
- &format!("It is more idiomatic to use {}.iter().enumerate()",
+ &format!("It is more idiomatic to use `{}.iter().enumerate()`",
snippet(cx, iter_args[0].span, "_")));
}
}