use if_chain::if_chain;
+use rustc_ast::ast::RangeLimits;
use rustc_errors::Applicability;
-use rustc_hir::*;
+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 syntax::ast::RangeLimits;
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`"
}