Fix warnings about unnecessary lifetime bounds
Rustup https://github.com/rust-lang/rust/pull/61172
This commit is contained in:
parent
149a988146
commit
4fa498a3eb
34 changed files with 83 additions and 87 deletions
|
@ -236,13 +236,13 @@ fn is_commutative(op: hir::BinOpKind) -> bool {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
struct ExprVisitor<'a, 'tcx: 'a> {
|
struct ExprVisitor<'a, 'tcx> {
|
||||||
assignee: &'a hir::Expr,
|
assignee: &'a hir::Expr,
|
||||||
counter: u8,
|
counter: u8,
|
||||||
cx: &'a LateContext<'a, 'tcx>,
|
cx: &'a LateContext<'a, 'tcx>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a, 'tcx: 'a> Visitor<'tcx> for ExprVisitor<'a, 'tcx> {
|
impl<'a, 'tcx> Visitor<'tcx> for ExprVisitor<'a, 'tcx> {
|
||||||
fn visit_expr(&mut self, expr: &'tcx hir::Expr) {
|
fn visit_expr(&mut self, expr: &'tcx hir::Expr) {
|
||||||
if SpanlessEq::new(self.cx).ignore_fn().eq_expr(self.assignee, expr) {
|
if SpanlessEq::new(self.cx).ignore_fn().eq_expr(self.assignee, expr) {
|
||||||
self.counter += 1;
|
self.counter += 1;
|
||||||
|
|
|
@ -44,12 +44,12 @@ declare_clippy_lint! {
|
||||||
|
|
||||||
declare_lint_pass!(BlockInIfCondition => [BLOCK_IN_IF_CONDITION_EXPR, BLOCK_IN_IF_CONDITION_STMT]);
|
declare_lint_pass!(BlockInIfCondition => [BLOCK_IN_IF_CONDITION_EXPR, BLOCK_IN_IF_CONDITION_STMT]);
|
||||||
|
|
||||||
struct ExVisitor<'a, 'tcx: 'a> {
|
struct ExVisitor<'a, 'tcx> {
|
||||||
found_block: Option<&'tcx Expr>,
|
found_block: Option<&'tcx Expr>,
|
||||||
cx: &'a LateContext<'a, 'tcx>,
|
cx: &'a LateContext<'a, 'tcx>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a, 'tcx: 'a> Visitor<'tcx> for ExVisitor<'a, 'tcx> {
|
impl<'a, 'tcx> Visitor<'tcx> for ExVisitor<'a, 'tcx> {
|
||||||
fn visit_expr(&mut self, expr: &'tcx Expr) {
|
fn visit_expr(&mut self, expr: &'tcx Expr) {
|
||||||
if let ExprKind::Closure(_, _, eid, _, _) = expr.node {
|
if let ExprKind::Closure(_, _, eid, _, _) = expr.node {
|
||||||
let body = self.cx.tcx.hir().body(eid);
|
let body = self.cx.tcx.hir().body(eid);
|
||||||
|
|
|
@ -68,12 +68,12 @@ impl<'a, 'tcx> LateLintPass<'a, 'tcx> for NonminimalBool {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
struct NonminimalBoolVisitor<'a, 'tcx: 'a> {
|
struct NonminimalBoolVisitor<'a, 'tcx> {
|
||||||
cx: &'a LateContext<'a, 'tcx>,
|
cx: &'a LateContext<'a, 'tcx>,
|
||||||
}
|
}
|
||||||
|
|
||||||
use quine_mc_cluskey::Bool;
|
use quine_mc_cluskey::Bool;
|
||||||
struct Hir2Qmm<'a, 'tcx: 'a, 'v> {
|
struct Hir2Qmm<'a, 'tcx, 'v> {
|
||||||
terminals: Vec<&'v Expr>,
|
terminals: Vec<&'v Expr>,
|
||||||
cx: &'a LateContext<'a, 'tcx>,
|
cx: &'a LateContext<'a, 'tcx>,
|
||||||
}
|
}
|
||||||
|
@ -155,7 +155,7 @@ impl<'a, 'tcx, 'v> Hir2Qmm<'a, 'tcx, 'v> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
struct SuggestContext<'a, 'tcx: 'a, 'v> {
|
struct SuggestContext<'a, 'tcx, 'v> {
|
||||||
terminals: &'v [&'v Expr],
|
terminals: &'v [&'v Expr],
|
||||||
cx: &'a LateContext<'a, 'tcx>,
|
cx: &'a LateContext<'a, 'tcx>,
|
||||||
output: String,
|
output: String,
|
||||||
|
|
|
@ -41,7 +41,7 @@ impl CognitiveComplexity {
|
||||||
impl_lint_pass!(CognitiveComplexity => [COGNITIVE_COMPLEXITY]);
|
impl_lint_pass!(CognitiveComplexity => [COGNITIVE_COMPLEXITY]);
|
||||||
|
|
||||||
impl CognitiveComplexity {
|
impl CognitiveComplexity {
|
||||||
fn check<'a, 'tcx: 'a>(&mut self, cx: &'a LateContext<'a, 'tcx>, body: &'tcx Body, span: Span) {
|
fn check<'a, 'tcx>(&mut self, cx: &'a LateContext<'a, 'tcx>, body: &'tcx Body, span: Span) {
|
||||||
if in_macro_or_desugar(span) {
|
if in_macro_or_desugar(span) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -132,7 +132,7 @@ impl<'a, 'tcx> LateLintPass<'a, 'tcx> for CognitiveComplexity {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
struct CCHelper<'a, 'tcx: 'a> {
|
struct CCHelper<'a, 'tcx> {
|
||||||
match_arms: u64,
|
match_arms: u64,
|
||||||
divergence: u64,
|
divergence: u64,
|
||||||
returns: u64,
|
returns: u64,
|
||||||
|
|
|
@ -210,7 +210,7 @@ pub fn constant_context<'c, 'cc>(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct ConstEvalLateContext<'a, 'tcx: 'a> {
|
pub struct ConstEvalLateContext<'a, 'tcx> {
|
||||||
lcx: &'a LateContext<'a, 'tcx>,
|
lcx: &'a LateContext<'a, 'tcx>,
|
||||||
tables: &'a ty::TypeckTables<'tcx>,
|
tables: &'a ty::TypeckTables<'tcx>,
|
||||||
param_env: ty::ParamEnv<'tcx>,
|
param_env: ty::ParamEnv<'tcx>,
|
||||||
|
|
|
@ -112,7 +112,7 @@ fn check_cond<'a, 'tcx, 'b>(
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
|
|
||||||
struct InsertVisitor<'a, 'tcx: 'a, 'b> {
|
struct InsertVisitor<'a, 'tcx, 'b> {
|
||||||
cx: &'a LateContext<'a, 'tcx>,
|
cx: &'a LateContext<'a, 'tcx>,
|
||||||
span: Span,
|
span: Span,
|
||||||
ty: &'static str,
|
ty: &'static str,
|
||||||
|
|
|
@ -43,7 +43,7 @@ fn is_non_trait_box(ty: Ty<'_>) -> bool {
|
||||||
ty.is_box() && !ty.boxed_ty().is_trait()
|
ty.is_box() && !ty.boxed_ty().is_trait()
|
||||||
}
|
}
|
||||||
|
|
||||||
struct EscapeDelegate<'a, 'tcx: 'a> {
|
struct EscapeDelegate<'a, 'tcx> {
|
||||||
cx: &'a LateContext<'a, 'tcx>,
|
cx: &'a LateContext<'a, 'tcx>,
|
||||||
set: HirIdSet,
|
set: HirIdSet,
|
||||||
too_large_for_stack: u64,
|
too_large_for_stack: u64,
|
||||||
|
|
|
@ -92,7 +92,7 @@ impl<'a, 'tcx> LateLintPass<'a, 'tcx> for EvalOrderDependence {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
struct DivergenceVisitor<'a, 'tcx: 'a> {
|
struct DivergenceVisitor<'a, 'tcx> {
|
||||||
cx: &'a LateContext<'a, 'tcx>,
|
cx: &'a LateContext<'a, 'tcx>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -272,7 +272,7 @@ fn check_stmt<'a, 'tcx>(vis: &mut ReadVisitor<'a, 'tcx>, stmt: &'tcx Stmt) -> St
|
||||||
}
|
}
|
||||||
|
|
||||||
/// A visitor that looks for reads from a variable.
|
/// A visitor that looks for reads from a variable.
|
||||||
struct ReadVisitor<'a, 'tcx: 'a> {
|
struct ReadVisitor<'a, 'tcx> {
|
||||||
cx: &'a LateContext<'a, 'tcx>,
|
cx: &'a LateContext<'a, 'tcx>,
|
||||||
/// The ID of the variable we're looking for.
|
/// The ID of the variable we're looking for.
|
||||||
var: HirId,
|
var: HirId,
|
||||||
|
|
|
@ -49,13 +49,13 @@ fn lint_impl_body<'a, 'tcx>(cx: &LateContext<'a, 'tcx>, impl_span: Span, impl_it
|
||||||
use rustc::hir::intravisit::{self, NestedVisitorMap, Visitor};
|
use rustc::hir::intravisit::{self, NestedVisitorMap, Visitor};
|
||||||
use rustc::hir::*;
|
use rustc::hir::*;
|
||||||
|
|
||||||
struct FindPanicUnwrap<'a, 'tcx: 'a> {
|
struct FindPanicUnwrap<'a, 'tcx> {
|
||||||
lcx: &'a LateContext<'a, 'tcx>,
|
lcx: &'a LateContext<'a, 'tcx>,
|
||||||
tables: &'tcx ty::TypeckTables<'tcx>,
|
tables: &'tcx ty::TypeckTables<'tcx>,
|
||||||
result: Vec<Span>,
|
result: Vec<Span>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a, 'tcx: 'a> Visitor<'tcx> for FindPanicUnwrap<'a, 'tcx> {
|
impl<'a, 'tcx> Visitor<'tcx> for FindPanicUnwrap<'a, 'tcx> {
|
||||||
fn visit_expr(&mut self, expr: &'tcx Expr) {
|
fn visit_expr(&mut self, expr: &'tcx Expr) {
|
||||||
// check for `begin_panic`
|
// check for `begin_panic`
|
||||||
if_chain! {
|
if_chain! {
|
||||||
|
|
|
@ -291,7 +291,7 @@ fn raw_ptr_arg(arg: &hir::Arg, ty: &hir::Ty) -> Option<hir::HirId> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
struct DerefVisitor<'a, 'tcx: 'a> {
|
struct DerefVisitor<'a, 'tcx> {
|
||||||
cx: &'a LateContext<'a, 'tcx>,
|
cx: &'a LateContext<'a, 'tcx>,
|
||||||
ptrs: FxHashSet<hir::HirId>,
|
ptrs: FxHashSet<hir::HirId>,
|
||||||
tables: &'a ty::TypeckTables<'tcx>,
|
tables: &'a ty::TypeckTables<'tcx>,
|
||||||
|
@ -330,7 +330,7 @@ impl<'a, 'tcx> hir::intravisit::Visitor<'tcx> for DerefVisitor<'a, 'tcx> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a, 'tcx: 'a> DerefVisitor<'a, 'tcx> {
|
impl<'a, 'tcx> DerefVisitor<'a, 'tcx> {
|
||||||
fn check_arg(&self, ptr: &hir::Expr) {
|
fn check_arg(&self, ptr: &hir::Expr) {
|
||||||
if let hir::ExprKind::Path(ref qpath) = ptr.node {
|
if let hir::ExprKind::Path(ref qpath) = ptr.node {
|
||||||
if let Res::Local(id) = self.cx.tables.qpath_res(qpath, ptr.hir_id) {
|
if let Res::Local(id) = self.cx.tables.qpath_res(qpath, ptr.hir_id) {
|
||||||
|
|
|
@ -135,7 +135,7 @@ impl<'a, 'tcx> LateLintPass<'a, 'tcx> for LetIfSeq {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
struct UsedVisitor<'a, 'tcx: 'a> {
|
struct UsedVisitor<'a, 'tcx> {
|
||||||
cx: &'a LateContext<'a, 'tcx>,
|
cx: &'a LateContext<'a, 'tcx>,
|
||||||
id: hir::HirId,
|
id: hir::HirId,
|
||||||
used: bool,
|
used: bool,
|
||||||
|
@ -194,7 +194,7 @@ fn check_assign<'a, 'tcx>(
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
|
|
||||||
fn used_in_expr<'a, 'tcx: 'a>(cx: &LateContext<'a, 'tcx>, id: hir::HirId, expr: &'tcx hir::Expr) -> bool {
|
fn used_in_expr<'a, 'tcx>(cx: &LateContext<'a, 'tcx>, id: hir::HirId, expr: &'tcx hir::Expr) -> bool {
|
||||||
let mut v = UsedVisitor { cx, id, used: false };
|
let mut v = UsedVisitor { cx, id, used: false };
|
||||||
hir::intravisit::walk_expr(&mut v, expr);
|
hir::intravisit::walk_expr(&mut v, expr);
|
||||||
v.used
|
v.used
|
||||||
|
|
|
@ -147,7 +147,7 @@ fn check_fn_inner<'a, 'tcx>(
|
||||||
report_extra_lifetimes(cx, decl, generics);
|
report_extra_lifetimes(cx, decl, generics);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn could_use_elision<'a, 'tcx: 'a>(
|
fn could_use_elision<'a, 'tcx>(
|
||||||
cx: &LateContext<'a, 'tcx>,
|
cx: &LateContext<'a, 'tcx>,
|
||||||
func: &'tcx FnDecl,
|
func: &'tcx FnDecl,
|
||||||
body: Option<BodyId>,
|
body: Option<BodyId>,
|
||||||
|
@ -264,7 +264,7 @@ fn unique_lifetimes(lts: &[RefLt]) -> usize {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// A visitor usable for `rustc_front::visit::walk_ty()`.
|
/// A visitor usable for `rustc_front::visit::walk_ty()`.
|
||||||
struct RefVisitor<'a, 'tcx: 'a> {
|
struct RefVisitor<'a, 'tcx> {
|
||||||
cx: &'a LateContext<'a, 'tcx>,
|
cx: &'a LateContext<'a, 'tcx>,
|
||||||
lts: Vec<RefLt>,
|
lts: Vec<RefLt>,
|
||||||
abort: bool,
|
abort: bool,
|
||||||
|
@ -377,7 +377,7 @@ impl<'a, 'tcx> Visitor<'tcx> for RefVisitor<'a, 'tcx> {
|
||||||
|
|
||||||
/// Are any lifetimes mentioned in the `where` clause? If so, we don't try to
|
/// Are any lifetimes mentioned in the `where` clause? If so, we don't try to
|
||||||
/// reason about elision.
|
/// reason about elision.
|
||||||
fn has_where_lifetimes<'a, 'tcx: 'a>(cx: &LateContext<'a, 'tcx>, where_clause: &'tcx WhereClause) -> bool {
|
fn has_where_lifetimes<'a, 'tcx>(cx: &LateContext<'a, 'tcx>, where_clause: &'tcx WhereClause) -> bool {
|
||||||
for predicate in &where_clause.predicates {
|
for predicate in &where_clause.predicates {
|
||||||
match *predicate {
|
match *predicate {
|
||||||
WherePredicate::RegionPredicate(..) => return true,
|
WherePredicate::RegionPredicate(..) => return true,
|
||||||
|
@ -445,7 +445,7 @@ impl<'tcx> Visitor<'tcx> for LifetimeChecker {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn report_extra_lifetimes<'a, 'tcx: 'a>(cx: &LateContext<'a, 'tcx>, func: &'tcx FnDecl, generics: &'tcx Generics) {
|
fn report_extra_lifetimes<'a, 'tcx>(cx: &LateContext<'a, 'tcx>, func: &'tcx FnDecl, generics: &'tcx Generics) {
|
||||||
let hs = generics
|
let hs = generics
|
||||||
.params
|
.params
|
||||||
.iter()
|
.iter()
|
||||||
|
|
|
@ -1723,13 +1723,13 @@ impl<'tcx> Visitor<'tcx> for UsedVisitor {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
struct LocalUsedVisitor<'a, 'tcx: 'a> {
|
struct LocalUsedVisitor<'a, 'tcx> {
|
||||||
cx: &'a LateContext<'a, 'tcx>,
|
cx: &'a LateContext<'a, 'tcx>,
|
||||||
local: HirId,
|
local: HirId,
|
||||||
used: bool,
|
used: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a, 'tcx: 'a> Visitor<'tcx> for LocalUsedVisitor<'a, 'tcx> {
|
impl<'a, 'tcx> Visitor<'tcx> for LocalUsedVisitor<'a, 'tcx> {
|
||||||
fn visit_expr(&mut self, expr: &'tcx Expr) {
|
fn visit_expr(&mut self, expr: &'tcx Expr) {
|
||||||
if same_var(self.cx, expr, self.local) {
|
if same_var(self.cx, expr, self.local) {
|
||||||
self.used = true;
|
self.used = true;
|
||||||
|
@ -1743,7 +1743,7 @@ impl<'a, 'tcx: 'a> Visitor<'tcx> for LocalUsedVisitor<'a, 'tcx> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
struct VarVisitor<'a, 'tcx: 'a> {
|
struct VarVisitor<'a, 'tcx> {
|
||||||
/// context reference
|
/// context reference
|
||||||
cx: &'a LateContext<'a, 'tcx>,
|
cx: &'a LateContext<'a, 'tcx>,
|
||||||
/// var name to look for as index
|
/// var name to look for as index
|
||||||
|
@ -1914,7 +1914,7 @@ impl<'a, 'tcx> Visitor<'tcx> for VarVisitor<'a, 'tcx> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn is_used_inside<'a, 'tcx: 'a>(cx: &'a LateContext<'a, 'tcx>, expr: &'tcx Expr, container: &'tcx Expr) -> bool {
|
fn is_used_inside<'a, 'tcx>(cx: &'a LateContext<'a, 'tcx>, expr: &'tcx Expr, container: &'tcx Expr) -> bool {
|
||||||
let def_id = match var_def_id(cx, expr) {
|
let def_id = match var_def_id(cx, expr) {
|
||||||
Some(id) => id,
|
Some(id) => id,
|
||||||
None => return false,
|
None => return false,
|
||||||
|
@ -1927,7 +1927,7 @@ fn is_used_inside<'a, 'tcx: 'a>(cx: &'a LateContext<'a, 'tcx>, expr: &'tcx Expr,
|
||||||
false
|
false
|
||||||
}
|
}
|
||||||
|
|
||||||
fn is_iterator_used_after_while_let<'a, 'tcx: 'a>(cx: &LateContext<'a, 'tcx>, iter_expr: &'tcx Expr) -> bool {
|
fn is_iterator_used_after_while_let<'a, 'tcx>(cx: &LateContext<'a, 'tcx>, iter_expr: &'tcx Expr) -> bool {
|
||||||
let def_id = match var_def_id(cx, iter_expr) {
|
let def_id = match var_def_id(cx, iter_expr) {
|
||||||
Some(id) => id,
|
Some(id) => id,
|
||||||
None => return false,
|
None => return false,
|
||||||
|
@ -1945,7 +1945,7 @@ fn is_iterator_used_after_while_let<'a, 'tcx: 'a>(cx: &LateContext<'a, 'tcx>, it
|
||||||
visitor.var_used_after_while_let
|
visitor.var_used_after_while_let
|
||||||
}
|
}
|
||||||
|
|
||||||
struct VarUsedAfterLoopVisitor<'a, 'tcx: 'a> {
|
struct VarUsedAfterLoopVisitor<'a, 'tcx> {
|
||||||
cx: &'a LateContext<'a, 'tcx>,
|
cx: &'a LateContext<'a, 'tcx>,
|
||||||
def_id: HirId,
|
def_id: HirId,
|
||||||
iter_expr_id: HirId,
|
iter_expr_id: HirId,
|
||||||
|
@ -2051,7 +2051,7 @@ enum VarState {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Scan a for loop for variables that are incremented exactly once.
|
/// Scan a for loop for variables that are incremented exactly once.
|
||||||
struct IncrementVisitor<'a, 'tcx: 'a> {
|
struct IncrementVisitor<'a, 'tcx> {
|
||||||
cx: &'a LateContext<'a, 'tcx>, // context reference
|
cx: &'a LateContext<'a, 'tcx>, // context reference
|
||||||
states: FxHashMap<HirId, VarState>, // incremented variables
|
states: FxHashMap<HirId, VarState>, // incremented variables
|
||||||
depth: u32, // depth of conditional expressions
|
depth: u32, // depth of conditional expressions
|
||||||
|
@ -2105,7 +2105,7 @@ impl<'a, 'tcx> Visitor<'tcx> for IncrementVisitor<'a, 'tcx> {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Checks whether a variable is initialized to zero at the start of a loop.
|
/// Checks whether a variable is initialized to zero at the start of a loop.
|
||||||
struct InitializeVisitor<'a, 'tcx: 'a> {
|
struct InitializeVisitor<'a, 'tcx> {
|
||||||
cx: &'a LateContext<'a, 'tcx>, // context reference
|
cx: &'a LateContext<'a, 'tcx>, // context reference
|
||||||
end_expr: &'tcx Expr, // the for loop. Stop scanning here.
|
end_expr: &'tcx Expr, // the for loop. Stop scanning here.
|
||||||
var_id: HirId,
|
var_id: HirId,
|
||||||
|
@ -2374,7 +2374,7 @@ fn check_infinite_loop<'a, 'tcx>(cx: &LateContext<'a, 'tcx>, cond: &'tcx Expr, e
|
||||||
/// Stops analysis if a function call is found
|
/// Stops analysis if a function call is found
|
||||||
/// Note: In some cases such as `self`, there are no mutable annotation,
|
/// Note: In some cases such as `self`, there are no mutable annotation,
|
||||||
/// All variables definition IDs are collected
|
/// All variables definition IDs are collected
|
||||||
struct VarCollectorVisitor<'a, 'tcx: 'a> {
|
struct VarCollectorVisitor<'a, 'tcx> {
|
||||||
cx: &'a LateContext<'a, 'tcx>,
|
cx: &'a LateContext<'a, 'tcx>,
|
||||||
ids: FxHashSet<HirId>,
|
ids: FxHashSet<HirId>,
|
||||||
def_ids: FxHashMap<def_id::DefId, bool>,
|
def_ids: FxHashMap<def_id::DefId, bool>,
|
||||||
|
|
|
@ -763,7 +763,7 @@ where
|
||||||
T: Copy + Ord,
|
T: Copy + Ord,
|
||||||
{
|
{
|
||||||
#[derive(Copy, Clone, Debug, Eq, PartialEq)]
|
#[derive(Copy, Clone, Debug, Eq, PartialEq)]
|
||||||
enum Kind<'a, T: 'a> {
|
enum Kind<'a, T> {
|
||||||
Start(T, &'a SpannedRange<T>),
|
Start(T, &'a SpannedRange<T>),
|
||||||
End(Bound<T>, &'a SpannedRange<T>),
|
End(Bound<T>, &'a SpannedRange<T>),
|
||||||
}
|
}
|
||||||
|
|
|
@ -1046,7 +1046,7 @@ impl<'a, 'tcx> LateLintPass<'a, 'tcx> for Methods {
|
||||||
|
|
||||||
/// Checks for the `OR_FUN_CALL` lint.
|
/// Checks for the `OR_FUN_CALL` lint.
|
||||||
#[allow(clippy::too_many_lines)]
|
#[allow(clippy::too_many_lines)]
|
||||||
fn lint_or_fun_call<'a, 'tcx: 'a>(
|
fn lint_or_fun_call<'a, 'tcx>(
|
||||||
cx: &LateContext<'a, 'tcx>,
|
cx: &LateContext<'a, 'tcx>,
|
||||||
expr: &hir::Expr,
|
expr: &hir::Expr,
|
||||||
method_span: Span,
|
method_span: Span,
|
||||||
|
@ -1054,7 +1054,7 @@ fn lint_or_fun_call<'a, 'tcx: 'a>(
|
||||||
args: &'tcx [hir::Expr],
|
args: &'tcx [hir::Expr],
|
||||||
) {
|
) {
|
||||||
// Searches an expression for method calls or function calls that aren't ctors
|
// Searches an expression for method calls or function calls that aren't ctors
|
||||||
struct FunCallFinder<'a, 'tcx: 'a> {
|
struct FunCallFinder<'a, 'tcx> {
|
||||||
cx: &'a LateContext<'a, 'tcx>,
|
cx: &'a LateContext<'a, 'tcx>,
|
||||||
found: bool,
|
found: bool,
|
||||||
}
|
}
|
||||||
|
@ -1142,7 +1142,7 @@ fn lint_or_fun_call<'a, 'tcx: 'a>(
|
||||||
|
|
||||||
/// Checks for `*or(foo())`.
|
/// Checks for `*or(foo())`.
|
||||||
#[allow(clippy::too_many_arguments)]
|
#[allow(clippy::too_many_arguments)]
|
||||||
fn check_general_case<'a, 'tcx: 'a>(
|
fn check_general_case<'a, 'tcx>(
|
||||||
cx: &LateContext<'a, 'tcx>,
|
cx: &LateContext<'a, 'tcx>,
|
||||||
name: &str,
|
name: &str,
|
||||||
method_span: Span,
|
method_span: Span,
|
||||||
|
|
|
@ -77,12 +77,12 @@ pub(super) fn lint<'a, 'tcx>(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
struct UnwrapVisitor<'a, 'tcx: 'a> {
|
struct UnwrapVisitor<'a, 'tcx> {
|
||||||
cx: &'a LateContext<'a, 'tcx>,
|
cx: &'a LateContext<'a, 'tcx>,
|
||||||
identifiers: FxHashSet<Symbol>,
|
identifiers: FxHashSet<Symbol>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a, 'tcx: 'a> Visitor<'tcx> for UnwrapVisitor<'a, 'tcx> {
|
impl<'a, 'tcx> Visitor<'tcx> for UnwrapVisitor<'a, 'tcx> {
|
||||||
fn visit_path(&mut self, path: &'tcx Path, _id: HirId) {
|
fn visit_path(&mut self, path: &'tcx Path, _id: HirId) {
|
||||||
self.identifiers.insert(ident(path));
|
self.identifiers.insert(ident(path));
|
||||||
walk_path(self, path);
|
walk_path(self, path);
|
||||||
|
@ -93,13 +93,13 @@ impl<'a, 'tcx: 'a> Visitor<'tcx> for UnwrapVisitor<'a, 'tcx> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
struct MapExprVisitor<'a, 'tcx: 'a> {
|
struct MapExprVisitor<'a, 'tcx> {
|
||||||
cx: &'a LateContext<'a, 'tcx>,
|
cx: &'a LateContext<'a, 'tcx>,
|
||||||
identifiers: FxHashSet<Symbol>,
|
identifiers: FxHashSet<Symbol>,
|
||||||
found_identifier: bool,
|
found_identifier: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a, 'tcx: 'a> Visitor<'tcx> for MapExprVisitor<'a, 'tcx> {
|
impl<'a, 'tcx> Visitor<'tcx> for MapExprVisitor<'a, 'tcx> {
|
||||||
fn visit_path(&mut self, path: &'tcx Path, _id: HirId) {
|
fn visit_path(&mut self, path: &'tcx Path, _id: HirId) {
|
||||||
if self.identifiers.contains(&ident(path)) {
|
if self.identifiers.contains(&ident(path)) {
|
||||||
self.found_identifier = true;
|
self.found_identifier = true;
|
||||||
|
|
|
@ -53,7 +53,7 @@ pub(super) fn lint(cx: &LateContext<'_, '_>, expr: &hir::Expr, args: &[hir::Expr
|
||||||
}
|
}
|
||||||
|
|
||||||
// returns (found_mapping, found_filtering)
|
// returns (found_mapping, found_filtering)
|
||||||
fn check_expression<'a, 'tcx: 'a>(
|
fn check_expression<'a, 'tcx>(
|
||||||
cx: &'a LateContext<'a, 'tcx>,
|
cx: &'a LateContext<'a, 'tcx>,
|
||||||
arg_id: hir::HirId,
|
arg_id: hir::HirId,
|
||||||
expr: &'tcx hir::Expr,
|
expr: &'tcx hir::Expr,
|
||||||
|
@ -104,7 +104,7 @@ fn check_expression<'a, 'tcx: 'a>(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
struct ReturnVisitor<'a, 'tcx: 'a> {
|
struct ReturnVisitor<'a, 'tcx> {
|
||||||
cx: &'a LateContext<'a, 'tcx>,
|
cx: &'a LateContext<'a, 'tcx>,
|
||||||
arg_id: hir::HirId,
|
arg_id: hir::HirId,
|
||||||
// Found a non-None return that isn't Some(input)
|
// Found a non-None return that isn't Some(input)
|
||||||
|
@ -113,7 +113,7 @@ struct ReturnVisitor<'a, 'tcx: 'a> {
|
||||||
found_filtering: bool,
|
found_filtering: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a, 'tcx: 'a> ReturnVisitor<'a, 'tcx> {
|
impl<'a, 'tcx> ReturnVisitor<'a, 'tcx> {
|
||||||
fn new(cx: &'a LateContext<'a, 'tcx>, arg_id: hir::HirId) -> ReturnVisitor<'a, 'tcx> {
|
fn new(cx: &'a LateContext<'a, 'tcx>, arg_id: hir::HirId) -> ReturnVisitor<'a, 'tcx> {
|
||||||
ReturnVisitor {
|
ReturnVisitor {
|
||||||
cx,
|
cx,
|
||||||
|
|
|
@ -37,7 +37,7 @@ impl<'a, 'tcx> LateLintPass<'a, 'tcx> for MutMut {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct MutVisitor<'a, 'tcx: 'a> {
|
pub struct MutVisitor<'a, 'tcx> {
|
||||||
cx: &'a LateContext<'a, 'tcx>,
|
cx: &'a LateContext<'a, 'tcx>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -326,7 +326,7 @@ fn requires_exact_signature(attrs: &[Attribute]) -> bool {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
struct MovedVariablesCtxt<'a, 'tcx: 'a> {
|
struct MovedVariablesCtxt<'a, 'tcx> {
|
||||||
cx: &'a LateContext<'a, 'tcx>,
|
cx: &'a LateContext<'a, 'tcx>,
|
||||||
moved_vars: FxHashSet<HirId>,
|
moved_vars: FxHashSet<HirId>,
|
||||||
/// Spans which need to be prefixed with `*` for dereferencing the
|
/// Spans which need to be prefixed with `*` for dereferencing the
|
||||||
|
|
|
@ -77,7 +77,7 @@ struct ExistingName {
|
||||||
whitelist: &'static [&'static str],
|
whitelist: &'static [&'static str],
|
||||||
}
|
}
|
||||||
|
|
||||||
struct SimilarNamesLocalVisitor<'a, 'tcx: 'a> {
|
struct SimilarNamesLocalVisitor<'a, 'tcx> {
|
||||||
names: Vec<ExistingName>,
|
names: Vec<ExistingName>,
|
||||||
cx: &'a EarlyContext<'tcx>,
|
cx: &'a EarlyContext<'tcx>,
|
||||||
lint: &'a NonExpressiveNames,
|
lint: &'a NonExpressiveNames,
|
||||||
|
@ -86,7 +86,7 @@ struct SimilarNamesLocalVisitor<'a, 'tcx: 'a> {
|
||||||
single_char_names: Vec<Vec<Ident>>,
|
single_char_names: Vec<Vec<Ident>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a, 'tcx: 'a> SimilarNamesLocalVisitor<'a, 'tcx> {
|
impl<'a, 'tcx> SimilarNamesLocalVisitor<'a, 'tcx> {
|
||||||
fn check_single_char_names(&self) {
|
fn check_single_char_names(&self) {
|
||||||
let num_single_char_names = self.single_char_names.iter().flatten().count();
|
let num_single_char_names = self.single_char_names.iter().flatten().count();
|
||||||
let threshold = self.lint.single_char_binding_names_threshold;
|
let threshold = self.lint.single_char_binding_names_threshold;
|
||||||
|
@ -123,9 +123,9 @@ const WHITELIST: &[&[&str]] = &[
|
||||||
&["lit", "lint"],
|
&["lit", "lint"],
|
||||||
];
|
];
|
||||||
|
|
||||||
struct SimilarNamesNameVisitor<'a: 'b, 'tcx: 'a, 'b>(&'b mut SimilarNamesLocalVisitor<'a, 'tcx>);
|
struct SimilarNamesNameVisitor<'a, 'tcx, 'b>(&'b mut SimilarNamesLocalVisitor<'a, 'tcx>);
|
||||||
|
|
||||||
impl<'a, 'tcx: 'a, 'b> Visitor<'tcx> for SimilarNamesNameVisitor<'a, 'tcx, 'b> {
|
impl<'a, 'tcx, 'b> Visitor<'tcx> for SimilarNamesNameVisitor<'a, 'tcx, 'b> {
|
||||||
fn visit_pat(&mut self, pat: &'tcx Pat) {
|
fn visit_pat(&mut self, pat: &'tcx Pat) {
|
||||||
match pat.node {
|
match pat.node {
|
||||||
PatKind::Ident(_, ident, _) => self.check_ident(ident),
|
PatKind::Ident(_, ident, _) => self.check_ident(ident),
|
||||||
|
|
|
@ -236,7 +236,7 @@ fn check_pat<'a, 'tcx>(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn lint_shadow<'a, 'tcx: 'a>(
|
fn lint_shadow<'a, 'tcx>(
|
||||||
cx: &LateContext<'a, 'tcx>,
|
cx: &LateContext<'a, 'tcx>,
|
||||||
name: Name,
|
name: Name,
|
||||||
span: Span,
|
span: Span,
|
||||||
|
|
|
@ -180,7 +180,7 @@ impl SlowVectorInit {
|
||||||
|
|
||||||
/// `VectorInitializationVisitor` searches for unsafe or slow vector initializations for the given
|
/// `VectorInitializationVisitor` searches for unsafe or slow vector initializations for the given
|
||||||
/// vector.
|
/// vector.
|
||||||
struct VectorInitializationVisitor<'a, 'tcx: 'a> {
|
struct VectorInitializationVisitor<'a, 'tcx> {
|
||||||
cx: &'a LateContext<'a, 'tcx>,
|
cx: &'a LateContext<'a, 'tcx>,
|
||||||
|
|
||||||
/// Contains the information.
|
/// Contains the information.
|
||||||
|
|
|
@ -183,7 +183,7 @@ struct BinaryExprVisitor {
|
||||||
in_binary_expr: bool,
|
in_binary_expr: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a, 'tcx: 'a> Visitor<'tcx> for BinaryExprVisitor {
|
impl<'a, 'tcx> Visitor<'tcx> for BinaryExprVisitor {
|
||||||
fn visit_expr(&mut self, expr: &'tcx hir::Expr) {
|
fn visit_expr(&mut self, expr: &'tcx hir::Expr) {
|
||||||
match expr.node {
|
match expr.node {
|
||||||
hir::ExprKind::Binary(..)
|
hir::ExprKind::Binary(..)
|
||||||
|
|
|
@ -2136,18 +2136,18 @@ impl<'tcx> ImplicitHasherType<'tcx> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
struct ImplicitHasherTypeVisitor<'a, 'tcx: 'a> {
|
struct ImplicitHasherTypeVisitor<'a, 'tcx> {
|
||||||
cx: &'a LateContext<'a, 'tcx>,
|
cx: &'a LateContext<'a, 'tcx>,
|
||||||
found: Vec<ImplicitHasherType<'tcx>>,
|
found: Vec<ImplicitHasherType<'tcx>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a, 'tcx: 'a> ImplicitHasherTypeVisitor<'a, 'tcx> {
|
impl<'a, 'tcx> ImplicitHasherTypeVisitor<'a, 'tcx> {
|
||||||
fn new(cx: &'a LateContext<'a, 'tcx>) -> Self {
|
fn new(cx: &'a LateContext<'a, 'tcx>) -> Self {
|
||||||
Self { cx, found: vec![] }
|
Self { cx, found: vec![] }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a, 'tcx: 'a> Visitor<'tcx> for ImplicitHasherTypeVisitor<'a, 'tcx> {
|
impl<'a, 'tcx> Visitor<'tcx> for ImplicitHasherTypeVisitor<'a, 'tcx> {
|
||||||
fn visit_ty(&mut self, t: &'tcx hir::Ty) {
|
fn visit_ty(&mut self, t: &'tcx hir::Ty) {
|
||||||
if let Some(target) = ImplicitHasherType::new(self.cx, t) {
|
if let Some(target) = ImplicitHasherType::new(self.cx, t) {
|
||||||
self.found.push(target);
|
self.found.push(target);
|
||||||
|
@ -2162,14 +2162,14 @@ impl<'a, 'tcx: 'a> Visitor<'tcx> for ImplicitHasherTypeVisitor<'a, 'tcx> {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Looks for default-hasher-dependent constructors like `HashMap::new`.
|
/// Looks for default-hasher-dependent constructors like `HashMap::new`.
|
||||||
struct ImplicitHasherConstructorVisitor<'a, 'b, 'tcx: 'a + 'b> {
|
struct ImplicitHasherConstructorVisitor<'a, 'b, 'tcx> {
|
||||||
cx: &'a LateContext<'a, 'tcx>,
|
cx: &'a LateContext<'a, 'tcx>,
|
||||||
body: &'a TypeckTables<'tcx>,
|
body: &'a TypeckTables<'tcx>,
|
||||||
target: &'b ImplicitHasherType<'tcx>,
|
target: &'b ImplicitHasherType<'tcx>,
|
||||||
suggestions: BTreeMap<Span, String>,
|
suggestions: BTreeMap<Span, String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a, 'b, 'tcx: 'a + 'b> ImplicitHasherConstructorVisitor<'a, 'b, 'tcx> {
|
impl<'a, 'b, 'tcx> ImplicitHasherConstructorVisitor<'a, 'b, 'tcx> {
|
||||||
fn new(cx: &'a LateContext<'a, 'tcx>, target: &'b ImplicitHasherType<'tcx>) -> Self {
|
fn new(cx: &'a LateContext<'a, 'tcx>, target: &'b ImplicitHasherType<'tcx>) -> Self {
|
||||||
Self {
|
Self {
|
||||||
cx,
|
cx,
|
||||||
|
@ -2180,7 +2180,7 @@ impl<'a, 'b, 'tcx: 'a + 'b> ImplicitHasherConstructorVisitor<'a, 'b, 'tcx> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a, 'b, 'tcx: 'a + 'b> Visitor<'tcx> for ImplicitHasherConstructorVisitor<'a, 'b, 'tcx> {
|
impl<'a, 'b, 'tcx> Visitor<'tcx> for ImplicitHasherConstructorVisitor<'a, 'b, 'tcx> {
|
||||||
fn visit_body(&mut self, body: &'tcx Body) {
|
fn visit_body(&mut self, body: &'tcx Body) {
|
||||||
let prev_body = self.body;
|
let prev_body = self.body;
|
||||||
self.body = self.cx.tcx.body_tables(body.id());
|
self.body = self.cx.tcx.body_tables(body.id());
|
||||||
|
|
|
@ -27,7 +27,7 @@ declare_clippy_lint! {
|
||||||
"unused labels"
|
"unused labels"
|
||||||
}
|
}
|
||||||
|
|
||||||
struct UnusedLabelVisitor<'a, 'tcx: 'a> {
|
struct UnusedLabelVisitor<'a, 'tcx> {
|
||||||
labels: FxHashMap<LocalInternedString, Span>,
|
labels: FxHashMap<LocalInternedString, Span>,
|
||||||
cx: &'a LateContext<'a, 'tcx>,
|
cx: &'a LateContext<'a, 'tcx>,
|
||||||
}
|
}
|
||||||
|
@ -60,7 +60,7 @@ impl<'a, 'tcx> LateLintPass<'a, 'tcx> for UnusedLabel {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a, 'tcx: 'a> Visitor<'tcx> for UnusedLabelVisitor<'a, 'tcx> {
|
impl<'a, 'tcx> Visitor<'tcx> for UnusedLabelVisitor<'a, 'tcx> {
|
||||||
fn visit_expr(&mut self, expr: &'tcx hir::Expr) {
|
fn visit_expr(&mut self, expr: &'tcx hir::Expr) {
|
||||||
match expr.node {
|
match expr.node {
|
||||||
hir::ExprKind::Break(destination, _) | hir::ExprKind::Continue(destination) => {
|
hir::ExprKind::Break(destination, _) | hir::ExprKind::Continue(destination) => {
|
||||||
|
|
|
@ -57,7 +57,7 @@ declare_clippy_lint! {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Visitor that keeps track of which variables are unwrappable.
|
/// Visitor that keeps track of which variables are unwrappable.
|
||||||
struct UnwrappableVariablesVisitor<'a, 'tcx: 'a> {
|
struct UnwrappableVariablesVisitor<'a, 'tcx> {
|
||||||
unwrappables: Vec<UnwrapInfo<'tcx>>,
|
unwrappables: Vec<UnwrapInfo<'tcx>>,
|
||||||
cx: &'a LateContext<'a, 'tcx>,
|
cx: &'a LateContext<'a, 'tcx>,
|
||||||
}
|
}
|
||||||
|
@ -74,7 +74,7 @@ struct UnwrapInfo<'tcx> {
|
||||||
|
|
||||||
/// Collects the information about unwrappable variables from an if condition
|
/// Collects the information about unwrappable variables from an if condition
|
||||||
/// The `invert` argument tells us whether the condition is negated.
|
/// The `invert` argument tells us whether the condition is negated.
|
||||||
fn collect_unwrap_info<'a, 'tcx: 'a>(
|
fn collect_unwrap_info<'a, 'tcx>(
|
||||||
cx: &'a LateContext<'a, 'tcx>,
|
cx: &'a LateContext<'a, 'tcx>,
|
||||||
expr: &'tcx Expr,
|
expr: &'tcx Expr,
|
||||||
invert: bool,
|
invert: bool,
|
||||||
|
@ -113,7 +113,7 @@ fn collect_unwrap_info<'a, 'tcx: 'a>(
|
||||||
Vec::new()
|
Vec::new()
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a, 'tcx: 'a> UnwrappableVariablesVisitor<'a, 'tcx> {
|
impl<'a, 'tcx> UnwrappableVariablesVisitor<'a, 'tcx> {
|
||||||
fn visit_branch(&mut self, cond: &'tcx Expr, branch: &'tcx Expr, else_branch: bool) {
|
fn visit_branch(&mut self, cond: &'tcx Expr, branch: &'tcx Expr, else_branch: bool) {
|
||||||
let prev_len = self.unwrappables.len();
|
let prev_len = self.unwrappables.len();
|
||||||
for unwrap_info in collect_unwrap_info(self.cx, cond, else_branch) {
|
for unwrap_info in collect_unwrap_info(self.cx, cond, else_branch) {
|
||||||
|
@ -130,7 +130,7 @@ impl<'a, 'tcx: 'a> UnwrappableVariablesVisitor<'a, 'tcx> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a, 'tcx: 'a> Visitor<'tcx> for UnwrappableVariablesVisitor<'a, 'tcx> {
|
impl<'a, 'tcx> Visitor<'tcx> for UnwrappableVariablesVisitor<'a, 'tcx> {
|
||||||
fn visit_expr(&mut self, expr: &'tcx Expr) {
|
fn visit_expr(&mut self, expr: &'tcx Expr) {
|
||||||
if let Some((cond, then, els)) = if_block(&expr) {
|
if let Some((cond, then, els)) = if_block(&expr) {
|
||||||
walk_expr(self, cond);
|
walk_expr(self, cond);
|
||||||
|
|
|
@ -68,7 +68,7 @@ fn span_use_self_lint(cx: &LateContext<'_, '_>, path: &Path) {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct TraitImplTyVisitor<'a, 'tcx: 'a> {
|
struct TraitImplTyVisitor<'a, 'tcx> {
|
||||||
item_type: Ty<'tcx>,
|
item_type: Ty<'tcx>,
|
||||||
cx: &'a LateContext<'a, 'tcx>,
|
cx: &'a LateContext<'a, 'tcx>,
|
||||||
trait_type_walker: ty::walk::TypeWalker<'tcx>,
|
trait_type_walker: ty::walk::TypeWalker<'tcx>,
|
||||||
|
@ -108,7 +108,7 @@ impl<'a, 'tcx> Visitor<'tcx> for TraitImplTyVisitor<'a, 'tcx> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn check_trait_method_impl_decl<'a, 'tcx: 'a>(
|
fn check_trait_method_impl_decl<'a, 'tcx>(
|
||||||
cx: &'a LateContext<'a, 'tcx>,
|
cx: &'a LateContext<'a, 'tcx>,
|
||||||
item_type: Ty<'tcx>,
|
item_type: Ty<'tcx>,
|
||||||
impl_item: &ImplItem,
|
impl_item: &ImplItem,
|
||||||
|
@ -213,7 +213,7 @@ impl<'a, 'tcx> LateLintPass<'a, 'tcx> for UseSelf {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
struct UseSelfVisitor<'a, 'tcx: 'a> {
|
struct UseSelfVisitor<'a, 'tcx> {
|
||||||
item_path: &'a Path,
|
item_path: &'a Path,
|
||||||
cx: &'a LateContext<'a, 'tcx>,
|
cx: &'a LateContext<'a, 'tcx>,
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,7 +14,7 @@ use syntax::ptr::P;
|
||||||
/// span.
|
/// span.
|
||||||
///
|
///
|
||||||
/// Note that some expressions kinds are not considered but could be added.
|
/// Note that some expressions kinds are not considered but could be added.
|
||||||
pub struct SpanlessEq<'a, 'tcx: 'a> {
|
pub struct SpanlessEq<'a, 'tcx> {
|
||||||
/// Context used to evaluate constant expressions.
|
/// Context used to evaluate constant expressions.
|
||||||
cx: &'a LateContext<'a, 'tcx>,
|
cx: &'a LateContext<'a, 'tcx>,
|
||||||
tables: &'a TypeckTables<'tcx>,
|
tables: &'a TypeckTables<'tcx>,
|
||||||
|
@ -23,7 +23,7 @@ pub struct SpanlessEq<'a, 'tcx: 'a> {
|
||||||
ignore_fn: bool,
|
ignore_fn: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a, 'tcx: 'a> SpanlessEq<'a, 'tcx> {
|
impl<'a, 'tcx> SpanlessEq<'a, 'tcx> {
|
||||||
pub fn new(cx: &'a LateContext<'a, 'tcx>) -> Self {
|
pub fn new(cx: &'a LateContext<'a, 'tcx>) -> Self {
|
||||||
Self {
|
Self {
|
||||||
cx,
|
cx,
|
||||||
|
@ -349,14 +349,14 @@ where
|
||||||
/// trait would consider IDs and spans.
|
/// trait would consider IDs and spans.
|
||||||
///
|
///
|
||||||
/// All expressions kind are hashed, but some might have a weaker hash.
|
/// All expressions kind are hashed, but some might have a weaker hash.
|
||||||
pub struct SpanlessHash<'a, 'tcx: 'a> {
|
pub struct SpanlessHash<'a, 'tcx> {
|
||||||
/// Context used to evaluate constant expressions.
|
/// Context used to evaluate constant expressions.
|
||||||
cx: &'a LateContext<'a, 'tcx>,
|
cx: &'a LateContext<'a, 'tcx>,
|
||||||
tables: &'a TypeckTables<'tcx>,
|
tables: &'a TypeckTables<'tcx>,
|
||||||
s: DefaultHasher,
|
s: DefaultHasher,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a, 'tcx: 'a> SpanlessHash<'a, 'tcx> {
|
impl<'a, 'tcx> SpanlessHash<'a, 'tcx> {
|
||||||
pub fn new(cx: &'a LateContext<'a, 'tcx>, tables: &'a TypeckTables<'tcx>) -> Self {
|
pub fn new(cx: &'a LateContext<'a, 'tcx>, tables: &'a TypeckTables<'tcx>) -> Self {
|
||||||
Self {
|
Self {
|
||||||
cx,
|
cx,
|
||||||
|
|
|
@ -217,12 +217,12 @@ fn is_lint_ref_type<'tcx>(cx: &LateContext<'_, 'tcx>, ty: &Ty) -> bool {
|
||||||
false
|
false
|
||||||
}
|
}
|
||||||
|
|
||||||
struct LintCollector<'a, 'tcx: 'a> {
|
struct LintCollector<'a, 'tcx> {
|
||||||
output: &'a mut FxHashSet<Name>,
|
output: &'a mut FxHashSet<Name>,
|
||||||
cx: &'a LateContext<'a, 'tcx>,
|
cx: &'a LateContext<'a, 'tcx>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a, 'tcx: 'a> Visitor<'tcx> for LintCollector<'a, 'tcx> {
|
impl<'a, 'tcx> Visitor<'tcx> for LintCollector<'a, 'tcx> {
|
||||||
fn visit_expr(&mut self, expr: &'tcx Expr) {
|
fn visit_expr(&mut self, expr: &'tcx Expr) {
|
||||||
walk_expr(self, expr);
|
walk_expr(self, expr);
|
||||||
}
|
}
|
||||||
|
|
|
@ -605,7 +605,7 @@ pub fn get_parent_expr<'c>(cx: &'c LateContext<'_, '_>, e: &Expr) -> Option<&'c
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_enclosing_block<'a, 'tcx: 'a>(cx: &LateContext<'a, 'tcx>, hir_id: HirId) -> Option<&'tcx Block> {
|
pub fn get_enclosing_block<'a, 'tcx>(cx: &LateContext<'a, 'tcx>, hir_id: HirId) -> Option<&'tcx Block> {
|
||||||
let map = &cx.tcx.hir();
|
let map = &cx.tcx.hir();
|
||||||
let enclosing_node = map
|
let enclosing_node = map
|
||||||
.get_enclosing_scope(hir_id)
|
.get_enclosing_scope(hir_id)
|
||||||
|
|
|
@ -22,7 +22,7 @@ pub fn get_spans(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn extract_clone_suggestions<'a, 'tcx: 'a>(
|
fn extract_clone_suggestions<'a, 'tcx>(
|
||||||
cx: &LateContext<'a, 'tcx>,
|
cx: &LateContext<'a, 'tcx>,
|
||||||
name: Name,
|
name: Name,
|
||||||
replace: &[(&'static str, &'static str)],
|
replace: &[(&'static str, &'static str)],
|
||||||
|
@ -43,7 +43,7 @@ fn extract_clone_suggestions<'a, 'tcx: 'a>(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
struct PtrCloneVisitor<'a, 'tcx: 'a> {
|
struct PtrCloneVisitor<'a, 'tcx> {
|
||||||
cx: &'a LateContext<'a, 'tcx>,
|
cx: &'a LateContext<'a, 'tcx>,
|
||||||
name: Name,
|
name: Name,
|
||||||
replace: &'a [(&'static str, &'static str)],
|
replace: &'a [(&'static str, &'static str)],
|
||||||
|
@ -51,7 +51,7 @@ struct PtrCloneVisitor<'a, 'tcx: 'a> {
|
||||||
abort: bool,
|
abort: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a, 'tcx: 'a> Visitor<'tcx> for PtrCloneVisitor<'a, 'tcx> {
|
impl<'a, 'tcx> Visitor<'tcx> for PtrCloneVisitor<'a, 'tcx> {
|
||||||
fn visit_expr(&mut self, expr: &'tcx Expr) {
|
fn visit_expr(&mut self, expr: &'tcx Expr) {
|
||||||
if self.abort {
|
if self.abort {
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -9,7 +9,7 @@ use rustc_data_structures::fx::FxHashSet;
|
||||||
use syntax::source_map::Span;
|
use syntax::source_map::Span;
|
||||||
|
|
||||||
/// Returns a set of mutated local variable IDs, or `None` if mutations could not be determined.
|
/// Returns a set of mutated local variable IDs, or `None` if mutations could not be determined.
|
||||||
pub fn mutated_variables<'a, 'tcx: 'a>(expr: &'tcx Expr, cx: &'a LateContext<'a, 'tcx>) -> Option<FxHashSet<HirId>> {
|
pub fn mutated_variables<'a, 'tcx>(expr: &'tcx Expr, cx: &'a LateContext<'a, 'tcx>) -> Option<FxHashSet<HirId>> {
|
||||||
let mut delegate = MutVarsDelegate {
|
let mut delegate = MutVarsDelegate {
|
||||||
used_mutably: FxHashSet::default(),
|
used_mutably: FxHashSet::default(),
|
||||||
skip: false,
|
skip: false,
|
||||||
|
@ -33,11 +33,7 @@ pub fn mutated_variables<'a, 'tcx: 'a>(expr: &'tcx Expr, cx: &'a LateContext<'a,
|
||||||
Some(delegate.used_mutably)
|
Some(delegate.used_mutably)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn is_potentially_mutated<'a, 'tcx: 'a>(
|
pub fn is_potentially_mutated<'a, 'tcx>(variable: &'tcx Path, expr: &'tcx Expr, cx: &'a LateContext<'a, 'tcx>) -> bool {
|
||||||
variable: &'tcx Path,
|
|
||||||
expr: &'tcx Expr,
|
|
||||||
cx: &'a LateContext<'a, 'tcx>,
|
|
||||||
) -> bool {
|
|
||||||
if let Res::Local(id) = variable.res {
|
if let Res::Local(id) = variable.res {
|
||||||
mutated_variables(expr, cx).map_or(true, |mutated| mutated.contains(&id))
|
mutated_variables(expr, cx).map_or(true, |mutated| mutated.contains(&id))
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -122,9 +122,9 @@ impl IgnoreUnsafeNew {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Default)]
|
#[derive(Default)]
|
||||||
pub struct OptionRefWrapper<'a, T: 'a>(Option<&'a T>);
|
pub struct OptionRefWrapper<'a, T>(Option<&'a T>);
|
||||||
|
|
||||||
impl<'a, T: 'a> OptionRefWrapper<'a, T> {
|
impl<'a, T> OptionRefWrapper<'a, T> {
|
||||||
pub fn new() -> Self {
|
pub fn new() -> Self {
|
||||||
OptionRefWrapper(None)
|
OptionRefWrapper(None)
|
||||||
}
|
}
|
||||||
|
|
|
@ -53,7 +53,7 @@ unsafe fn _ptr_to_ref<T, U>(p: *const T, m: *mut T, o: *const U, om: *mut U) {
|
||||||
|
|
||||||
#[warn(clippy::transmute_ptr_to_ref)]
|
#[warn(clippy::transmute_ptr_to_ref)]
|
||||||
fn issue1231() {
|
fn issue1231() {
|
||||||
struct Foo<'a, T: 'a> {
|
struct Foo<'a, T> {
|
||||||
bar: &'a T,
|
bar: &'a T,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue