From 38992f89b9c3cf9edec2c0c912daa2c0ef5c87bb Mon Sep 17 00:00:00 2001 From: brock elmore Date: Wed, 10 Jul 2024 16:14:48 -0700 Subject: [PATCH] clippy lint fixes and silence --- crates/analyzers/src/lib.rs | 2 + crates/graph/src/lib.rs | 3 + crates/graph/src/nodes/context/querying.rs | 2 +- crates/graph/src/nodes/context/variables.rs | 6 +- .../graph/src/nodes/debug_reconstruction.rs | 4 +- crates/graph/src/nodes/err_ty.rs | 3 +- crates/graph/src/range/elem/concrete.rs | 1 + .../graph/src/range/elem/elem_enum/impls.rs | 3 +- crates/graph/src/range/elem/expr/collapse.rs | 12 +- crates/graph/src/range/elem/expr/mod.rs | 36 ++---- .../graph/src/range/elem/expr/simplify/add.rs | 7 +- .../graph/src/range/elem/expr/simplify/sub.rs | 7 +- crates/graph/src/range/elem/reference.rs | 76 +++++------- crates/graph/src/range/exec/bitwise.rs | 21 +--- crates/graph/src/range/exec/exec_op.rs | 44 +++---- crates/pyrometer/src/analyzer.rs | 112 ++++++++---------- crates/pyrometer/src/analyzer_backend.rs | 18 +-- crates/pyrometer/src/graph_backend.rs | 6 +- crates/pyrometer/src/lib.rs | 1 + crates/shared/src/analyzer_like.rs | 1 + crates/shared/src/graph_like.rs | 1 + crates/solc-expressions/src/lib.rs | 2 + crates/solc-expressions/src/variable.rs | 5 +- 23 files changed, 149 insertions(+), 224 deletions(-) diff --git a/crates/analyzers/src/lib.rs b/crates/analyzers/src/lib.rs index f469f356..42b17a3e 100644 --- a/crates/analyzers/src/lib.rs +++ b/crates/analyzers/src/lib.rs @@ -1,3 +1,5 @@ +#![allow(clippy::too_many_arguments)] + pub mod bounds; use ariadne::{Cache, Label, Report, ReportKind, Span}; diff --git a/crates/graph/src/lib.rs b/crates/graph/src/lib.rs index 2f35381d..e7826836 100644 --- a/crates/graph/src/lib.rs +++ b/crates/graph/src/lib.rs @@ -1,3 +1,6 @@ +#![allow(clippy::too_many_arguments)] +#![allow(clippy::type_complexity)] + mod graph_elements; mod range; mod var_type; diff --git a/crates/graph/src/nodes/context/querying.rs b/crates/graph/src/nodes/context/querying.rs index c58f0e71..ead7b087 100644 --- a/crates/graph/src/nodes/context/querying.rs +++ b/crates/graph/src/nodes/context/querying.rs @@ -5,7 +5,7 @@ use crate::{ AnalyzerBackend, ContextEdge, Edge, GraphBackend, }; -use shared::{GraphError, Search, NodeIdx}; +use shared::{GraphError, NodeIdx, Search}; use std::collections::{BTreeMap, BTreeSet}; impl ContextNode { diff --git a/crates/graph/src/nodes/context/variables.rs b/crates/graph/src/nodes/context/variables.rs index d1b3a17a..f895941f 100644 --- a/crates/graph/src/nodes/context/variables.rs +++ b/crates/graph/src/nodes/context/variables.rs @@ -1,7 +1,5 @@ use crate::{ - nodes::{ - ContextNode, ContextVarNode, EnumNode, ErrorNode, ExprRet, StructNode, TyNode, VarNode, - }, + nodes::{ContextNode, ContextVarNode, ExprRet, VarNode}, AnalyzerBackend, ContextEdge, Edge, GraphBackend, Node, TypeNode, }; use shared::GraphError; @@ -43,7 +41,7 @@ impl ContextNode { .tmp_expr .iter() .enumerate() - .filter(|(i, maybe_elem)| maybe_elem.is_some()) + .filter(|(_i, maybe_elem)| maybe_elem.is_some()) .for_each(|(i, elem)| println!("{i}. {}", elem.clone().unwrap().debug_str(analyzer))); Ok(()) } diff --git a/crates/graph/src/nodes/debug_reconstruction.rs b/crates/graph/src/nodes/debug_reconstruction.rs index dfdb6b50..1ddf4323 100644 --- a/crates/graph/src/nodes/debug_reconstruction.rs +++ b/crates/graph/src/nodes/debug_reconstruction.rs @@ -3,6 +3,8 @@ use crate::{ AnalyzerBackend, Edge, TypeNode, }; +use shared::GraphError; + use petgraph::{visit::EdgeRef, Direction}; use shared::GraphError; use solang_parser::pt::Loc; @@ -446,7 +448,7 @@ impl ContractNode { let structs = self.reconstruct_structs(analyzer, contract_to_funcs)?; let enums = self.reconstruct_enums(analyzer, contract_to_funcs)?; let tys = self.reconstruct_tys(analyzer, contract_to_funcs)?; - let errs = self.reconstruct_errs(analyzer, contract_to_funcs)?; + let _errs = self.reconstruct_errs(analyzer, contract_to_funcs)?; let funcs = self.reconstruct_funcs(analyzer, contract_to_funcs)?; Ok(format!( "{reconstructed_name} {inherited} {{\n{usings}{structs}{enums}{tys}{storage}{funcs}\n}}" diff --git a/crates/graph/src/nodes/err_ty.rs b/crates/graph/src/nodes/err_ty.rs index 4ef10904..cd157529 100644 --- a/crates/graph/src/nodes/err_ty.rs +++ b/crates/graph/src/nodes/err_ty.rs @@ -4,7 +4,8 @@ use crate::{ AnalyzerBackend, AsDotStr, Edge, GraphBackend, Node, }; -use shared::{NodeIdx, RangeArena, GraphError}; +use shared::{GraphError, NodeIdx, RangeArena}; + use petgraph::visit::EdgeRef; use solang_parser::pt::{ErrorDefinition, ErrorParameter, Expression, Identifier, Loc}; diff --git a/crates/graph/src/range/elem/concrete.rs b/crates/graph/src/range/elem/concrete.rs index 0ccf48ae..218d756b 100644 --- a/crates/graph/src/range/elem/concrete.rs +++ b/crates/graph/src/range/elem/concrete.rs @@ -145,6 +145,7 @@ impl RangeElem for RangeConcrete { Ok(()) } + #[allow(clippy::only_used_in_recursion)] fn range_eq(&self, other: &Self, arena: &mut RangeArena>) -> bool { match (self.val.into_u256(), other.val.into_u256()) { (Some(self_val), Some(other_val)) => self_val == other_val, diff --git a/crates/graph/src/range/elem/elem_enum/impls.rs b/crates/graph/src/range/elem/elem_enum/impls.rs index 65351d07..b657ffe9 100644 --- a/crates/graph/src/range/elem/elem_enum/impls.rs +++ b/crates/graph/src/range/elem/elem_enum/impls.rs @@ -557,7 +557,6 @@ impl Elem { pub fn arenaized_flattened( &self, max: bool, - analyzer: &mut impl GraphBackend, arena: &mut RangeArena>, ) -> Option>> { if let Some(idx) = arena.idx(self) { @@ -586,7 +585,7 @@ impl Elem { } c @ Elem::Concrete(_) => Some(Box::new(c.clone())), c @ Elem::Null => Some(Box::new(c.clone())), - Elem::Arena(idx) => Elem::Arena(*idx).arenaized_flattened(max, analyzer, arena), + Elem::Arena(idx) => Elem::Arena(*idx).arenaized_flattened(max, arena), } } else { None diff --git a/crates/graph/src/range/elem/expr/collapse.rs b/crates/graph/src/range/elem/expr/collapse.rs index d043005b..641ea576 100644 --- a/crates/graph/src/range/elem/expr/collapse.rs +++ b/crates/graph/src/range/elem/expr/collapse.rs @@ -109,7 +109,7 @@ pub fn collapse( match (expr.op, op) { (RangeOp::Sub(false), _) if ORD_OPS.contains(&op) => { - if let Some(res) = sub_ord_rules(x, y, op, &z, ords, arena) { + if let Some(res) = sub_ord_rules(x, y, op, &z, ords) { MaybeCollapsed::Collapsed(res) } else { MaybeCollapsed::Not(Elem::Expr(expr), z) @@ -170,14 +170,14 @@ pub fn collapse( match (expr.op, op) { (RangeOp::Sub(false), _) if ORD_OPS.contains(&op) => { - if let Some(res) = sub_ord_rules(x, y, op, &z, ords, arena) { + if let Some(res) = sub_ord_rules(x, y, op, &z, ords) { MaybeCollapsed::Collapsed(res) } else { MaybeCollapsed::Not(Elem::Expr(expr), z) } } (RangeOp::Add(false), _) if ORD_OPS.contains(&op) => { - if let Some(res) = add_ord_rules(x, y, op, &z, ords, arena) { + if let Some(res) = add_ord_rules(x, y, op, &z, ords) { MaybeCollapsed::Collapsed(res) } else { MaybeCollapsed::Not(Elem::Expr(expr), z) @@ -186,9 +186,9 @@ pub fn collapse( (RangeOp::Eq, RangeOp::Eq) => { // ((x == y) == z) // can skip if x and z eq - if ords.x_eq_z() || ords.y_eq_z() { - MaybeCollapsed::Collapsed(Elem::Expr(expr)) - } else if z.range_eq(&Elem::from(Concrete::from(true)), arena) { + if (ords.x_eq_z() || ords.y_eq_z()) + || z.range_eq(&Elem::from(Concrete::from(true)), arena) + { MaybeCollapsed::Collapsed(Elem::Expr(expr)) } else { MaybeCollapsed::Not(Elem::Expr(expr), z) diff --git a/crates/graph/src/range/elem/expr/mod.rs b/crates/graph/src/range/elem/expr/mod.rs index 5fd3cb74..d7023ee4 100644 --- a/crates/graph/src/range/elem/expr/mod.rs +++ b/crates/graph/src/range/elem/expr/mod.rs @@ -282,12 +282,8 @@ impl RangeElem for RangeExpr { ) -> bool { self.flattened_min.is_some() && self.flattened_max.is_some() || { if let Some(idx) = self.arena_idx(arena) { - if let Some(t) = arena.ranges.get(idx) { - if let Elem::Expr(ref arenaized) = *t { - arenaized.flattened_min.is_some() && arenaized.flattened_max.is_some() - } else { - false - } + if let Some(Elem::Expr(ref arenaized)) = arena.ranges.get(idx) { + arenaized.flattened_min.is_some() && arenaized.flattened_max.is_some() } else { false } @@ -304,12 +300,8 @@ impl RangeElem for RangeExpr { ) -> (bool, bool) { let (arena_cached_min, arena_cached_max) = { if let Some(idx) = self.arena_idx(arena) { - if let Some(t) = arena.ranges.get(idx) { - if let Elem::Expr(ref arenaized) = *t { - (arenaized.minimized.is_some(), arenaized.maximized.is_some()) - } else { - (false, false) - } + if let Some(Elem::Expr(ref arenaized)) = arena.ranges.get(idx) { + (arenaized.minimized.is_some(), arenaized.maximized.is_some()) } else { (false, false) } @@ -528,7 +520,7 @@ impl RangeElem for RangeExpr { ) -> Result, GraphError> { let Elem::Expr(this) = this else { this.cache_flatten(analyzer, arena)?; - if let Some(t) = this.arenaized_flattened(false, analyzer, arena) { + if let Some(t) = this.arenaized_flattened(false, arena) { return Ok(*t); } else { return Ok(this.clone()); @@ -588,7 +580,7 @@ impl RangeElem for RangeExpr { ) -> Result, GraphError> { let Elem::Expr(this) = this else { this.cache_flatten(analyzer, arena)?; - if let Some(t) = this.arenaized_flattened(true, analyzer, arena) { + if let Some(t) = this.arenaized_flattened(true, arena) { return Ok(*t); } else { return Ok(this.clone()); @@ -643,11 +635,9 @@ impl RangeElem for RangeExpr { if self.flattened_max.is_none() { if let Some(idx) = self.arena_idx(arena) { - if let Some(t) = arena.ranges.get(idx) { - if let Elem::Expr(ref arenaized) = *t { - if arenaized.flattened_max.is_some() { - return Ok(()); - } + if let Some(Elem::Expr(ref arenaized)) = arena.ranges.get(idx) { + if arenaized.flattened_max.is_some() { + return Ok(()); } }; } else { @@ -665,11 +655,9 @@ impl RangeElem for RangeExpr { if self.flattened_min.is_none() { if let Some(idx) = self.arena_idx(arena) { - if let Some(t) = arena.ranges.get(idx) { - if let Elem::Expr(ref arenaized) = *t { - if arenaized.flattened_min.is_some() { - return Ok(()); - } + if let Some(Elem::Expr(ref arenaized)) = arena.ranges.get(idx) { + if arenaized.flattened_min.is_some() { + return Ok(()); } }; } else { diff --git a/crates/graph/src/range/elem/expr/simplify/add.rs b/crates/graph/src/range/elem/expr/simplify/add.rs index 463d0885..f7e30a0e 100644 --- a/crates/graph/src/range/elem/expr/simplify/add.rs +++ b/crates/graph/src/range/elem/expr/simplify/add.rs @@ -6,15 +6,12 @@ use crate::{ }, }; -use shared::RangeArena; - pub fn add_ord_rules( x: &Elem, y: &Elem, ord_op: RangeOp, z: &Elem, ords: Ords, - arena: &mut RangeArena>, ) -> Option> { match ord_op { RangeOp::Eq => { @@ -118,7 +115,7 @@ pub fn add_ord_rules( RangeOp::Max => { // max{x + y, z} // same as gt but return lhs or rhs instead - match add_ord_rules(x, y, RangeOp::Gt, z, ords, arena) { + match add_ord_rules(x, y, RangeOp::Gt, z, ords) { Some(Elem::Concrete(RangeConcrete { val: Concrete::Bool(b), .. @@ -139,7 +136,7 @@ pub fn add_ord_rules( RangeOp::Min => { // min{x - y, z} // same as lt but return lhs or rhs instead - match add_ord_rules(x, y, RangeOp::Lt, z, ords, arena) { + match add_ord_rules(x, y, RangeOp::Lt, z, ords) { Some(Elem::Concrete(RangeConcrete { val: Concrete::Bool(b), .. diff --git a/crates/graph/src/range/elem/expr/simplify/sub.rs b/crates/graph/src/range/elem/expr/simplify/sub.rs index a941bcd4..83d0e00e 100644 --- a/crates/graph/src/range/elem/expr/simplify/sub.rs +++ b/crates/graph/src/range/elem/expr/simplify/sub.rs @@ -6,15 +6,12 @@ use crate::{ }, }; -use shared::RangeArena; - pub fn sub_ord_rules( x: &Elem, y: &Elem, ord_op: RangeOp, z: &Elem, ords: Ords, - arena: &mut RangeArena>, ) -> Option> { match ord_op { RangeOp::Eq => { @@ -133,7 +130,7 @@ pub fn sub_ord_rules( RangeOp::Max => { // max{x - y, z} // same as gt but return lhs or rhs instead - match sub_ord_rules(x, y, RangeOp::Gt, z, ords, arena) { + match sub_ord_rules(x, y, RangeOp::Gt, z, ords) { Some(Elem::Concrete(RangeConcrete { val: Concrete::Bool(b), .. @@ -154,7 +151,7 @@ pub fn sub_ord_rules( RangeOp::Min => { // min{x - y, z} // same as lt but return lhs or rhs instead - match sub_ord_rules(x, y, RangeOp::Lt, z, ords, arena) { + match sub_ord_rules(x, y, RangeOp::Lt, z, ords) { Some(Elem::Concrete(RangeConcrete { val: Concrete::Bool(b), .. diff --git a/crates/graph/src/range/elem/reference.rs b/crates/graph/src/range/elem/reference.rs index 0980b431..530bfc32 100644 --- a/crates/graph/src/range/elem/reference.rs +++ b/crates/graph/src/range/elem/reference.rs @@ -187,12 +187,8 @@ impl RangeElem for Reference { ) -> bool { self.flattened_min.is_some() && self.flattened_max.is_some() || { if let Some(idx) = arena.idx(&Elem::Reference(Reference::new(self.idx))) { - if let Some(t) = arena.ranges.get(idx) { - if let Elem::Reference(ref arenaized) = *t { - arenaized.flattened_min.is_some() && arenaized.flattened_max.is_some() - } else { - false - } + if let Some(Elem::Reference(ref arenaized)) = arena.ranges.get(idx) { + arenaized.flattened_min.is_some() && arenaized.flattened_max.is_some() } else { false } @@ -209,12 +205,8 @@ impl RangeElem for Reference { ) -> (bool, bool) { let (arena_cached_min, arena_cached_max) = { if let Some(idx) = arena.idx(&Elem::Reference(Reference::new(self.idx))) { - if let Some(t) = arena.ranges.get(idx) { - if let Elem::Reference(ref arenaized) = *t { - (arenaized.minimized.is_some(), arenaized.maximized.is_some()) - } else { - (false, false) - } + if let Some(Elem::Reference(ref arenaized)) = arena.ranges.get(idx) { + (arenaized.minimized.is_some(), arenaized.maximized.is_some()) } else { (false, false) } @@ -237,12 +229,10 @@ impl RangeElem for Reference { if self.flattened_max.is_none() { if let Some(idx) = arena.idx(&Elem::Reference(Reference::new(self.idx))) { - if let Some(t) = arena.ranges.get(idx) { - if let Elem::Reference(ref arenaized) = *t { - if arenaized.flattened_max.is_some() { - tracing::trace!("reference cache flatten hit"); - return Ok(()); - } + if let Some(Elem::Reference(ref arenaized)) = arena.ranges.get(idx) { + if arenaized.flattened_max.is_some() { + tracing::trace!("reference cache flatten hit"); + return Ok(()); } } } @@ -255,12 +245,10 @@ impl RangeElem for Reference { } if self.flattened_min.is_none() { if let Some(idx) = arena.idx(&Elem::Reference(Reference::new(self.idx))) { - if let Some(t) = arena.ranges.get(idx) { - if let Elem::Reference(ref arenaized) = *t { - if arenaized.flattened_min.is_some() { - tracing::trace!("reference cache flatten hit"); - return Ok(()); - } + if let Some(Elem::Reference(ref arenaized)) = arena.ranges.get(idx) { + if arenaized.flattened_min.is_some() { + tracing::trace!("reference cache flatten hit"); + return Ok(()); } } } @@ -292,12 +280,10 @@ impl RangeElem for Reference { } if let Some(idx) = arena.idx(&Elem::Reference(Reference::new(self.idx))) { - if let Some(t) = arena.ranges.get(idx) { - if let Elem::Reference(ref arenaized) = *t { - tracing::trace!("reference maximize cache hit"); - if let Some(MinMaxed::Maximized(cached)) = arenaized.maximized.clone() { - return Ok(*cached); - } + if let Some(Elem::Reference(ref arenaized)) = arena.ranges.get(idx) { + tracing::trace!("reference maximize cache hit"); + if let Some(MinMaxed::Maximized(cached)) = arenaized.maximized.clone() { + return Ok(*cached); } } } @@ -332,12 +318,10 @@ impl RangeElem for Reference { } if let Some(idx) = arena.idx(&Elem::Reference(Reference::new(self.idx))) { - if let Some(t) = arena.ranges.get(idx) { - if let Elem::Reference(ref arenaized) = *t { - if let Some(MinMaxed::Minimized(cached)) = arenaized.minimized.clone() { - tracing::trace!("reference minimize cache hit"); - return Ok(*cached); - } + if let Some(Elem::Reference(ref arenaized)) = arena.ranges.get(idx) { + if let Some(MinMaxed::Minimized(cached)) = arenaized.minimized.clone() { + tracing::trace!("reference minimize cache hit"); + return Ok(*cached); } } } @@ -372,12 +356,10 @@ impl RangeElem for Reference { } if let Some(idx) = arena.idx(&Elem::Reference(Reference::new(self.idx))) { - if let Some(t) = arena.ranges.get(idx) { - if let Elem::Reference(ref arenaized) = *t { - if arenaized.flattened_max.is_some() { - tracing::trace!("reference simplify maximize cache hit"); - return Ok(*arenaized.flattened_max.clone().unwrap()); - } + if let Some(Elem::Reference(ref arenaized)) = arena.ranges.get(idx) { + if arenaized.flattened_max.is_some() { + tracing::trace!("reference simplify maximize cache hit"); + return Ok(*arenaized.flattened_max.clone().unwrap()); } } } @@ -406,12 +388,10 @@ impl RangeElem for Reference { } if let Some(idx) = arena.idx(&Elem::Reference(Reference::new(self.idx))) { - if let Some(t) = arena.ranges.get(idx) { - if let Elem::Reference(ref arenaized) = *t { - if arenaized.flattened_min.is_some() { - tracing::trace!("reference simplify minimize cache hit"); - return Ok(*arenaized.flattened_min.clone().unwrap()); - } + if let Some(Elem::Reference(ref arenaized)) = arena.ranges.get(idx) { + if arenaized.flattened_min.is_some() { + tracing::trace!("reference simplify minimize cache hit"); + return Ok(*arenaized.flattened_min.clone().unwrap()); } } } diff --git a/crates/graph/src/range/exec/bitwise.rs b/crates/graph/src/range/exec/bitwise.rs index 087f8165..3f74dfb5 100644 --- a/crates/graph/src/range/exec/bitwise.rs +++ b/crates/graph/src/range/exec/bitwise.rs @@ -1,6 +1,5 @@ use crate::nodes::{Builtin, Concrete}; use crate::range::{elem::*, exec_traits::*}; -use crate::GraphBackend; use shared::RangeArena; @@ -242,7 +241,6 @@ pub fn exec_bit_and( rhs_min: &Elem, rhs_max: &Elem, maximize: bool, - analyzer: &impl GraphBackend, arena: &mut RangeArena>, ) -> Option> { match (lhs_min, lhs_max, rhs_min, rhs_max) { @@ -253,7 +251,6 @@ pub fn exec_bit_and( rhs_min, rhs_max, maximize, - analyzer, arena, ); } @@ -264,7 +261,6 @@ pub fn exec_bit_and( rhs_min, rhs_max, maximize, - analyzer, arena, ); } @@ -275,7 +271,6 @@ pub fn exec_bit_and( &d.as_sized_bytes()?, rhs_max, maximize, - analyzer, arena, ); } @@ -286,7 +281,6 @@ pub fn exec_bit_and( rhs_min, &d.as_sized_bytes()?, maximize, - analyzer, arena, ); } @@ -387,7 +381,6 @@ pub fn exec_bit_or( rhs_min: &Elem, rhs_max: &Elem, maximize: bool, - analyzer: &impl GraphBackend, arena: &mut RangeArena>, ) -> Option> { match (lhs_min, lhs_max, rhs_min, rhs_max) { @@ -398,7 +391,6 @@ pub fn exec_bit_or( rhs_min, rhs_max, maximize, - analyzer, arena, ); } @@ -409,7 +401,6 @@ pub fn exec_bit_or( rhs_min, rhs_max, maximize, - analyzer, arena, ); } @@ -420,7 +411,6 @@ pub fn exec_bit_or( &d.as_sized_bytes()?, rhs_max, maximize, - analyzer, arena, ); } @@ -431,7 +421,6 @@ pub fn exec_bit_or( rhs_min, &d.as_sized_bytes()?, maximize, - analyzer, arena, ); } @@ -506,7 +495,6 @@ pub fn exec_bit_xor( rhs_min: &Elem, rhs_max: &Elem, maximize: bool, - analyzer: &impl GraphBackend, arena: &mut RangeArena>, ) -> Option> { match (lhs_min, lhs_max, rhs_min, rhs_max) { @@ -517,7 +505,6 @@ pub fn exec_bit_xor( rhs_min, rhs_max, maximize, - analyzer, arena, ); } @@ -528,7 +515,6 @@ pub fn exec_bit_xor( rhs_min, rhs_max, maximize, - analyzer, arena, ); } @@ -539,7 +525,6 @@ pub fn exec_bit_xor( &d.as_sized_bytes()?, rhs_max, maximize, - analyzer, arena, ); } @@ -550,7 +535,6 @@ pub fn exec_bit_xor( rhs_min, &d.as_sized_bytes()?, maximize, - analyzer, arena, ); } @@ -634,15 +618,14 @@ pub fn exec_bit_not( lhs_min: &Elem, lhs_max: &Elem, maximize: bool, - analyzer: &impl GraphBackend, arena: &mut RangeArena>, ) -> Option> { match (lhs_min, lhs_max) { (Elem::ConcreteDyn(d), _) => { - return exec_bit_not(&d.as_sized_bytes()?, lhs_max, maximize, analyzer, arena); + return exec_bit_not(&d.as_sized_bytes()?, lhs_max, maximize, arena); } (_, Elem::ConcreteDyn(d)) => { - return exec_bit_not(lhs_min, &d.as_sized_bytes()?, maximize, analyzer, arena); + return exec_bit_not(lhs_min, &d.as_sized_bytes()?, maximize, arena); } _ => {} } diff --git a/crates/graph/src/range/exec/exec_op.rs b/crates/graph/src/range/exec/exec_op.rs index 7bc6926e..1f89c625 100644 --- a/crates/graph/src/range/exec/exec_op.rs +++ b/crates/graph/src/range/exec/exec_op.rs @@ -32,14 +32,12 @@ impl ExecOp for RangeExpr { let res = self.exec(self.spread(analyzer, arena)?, maximize, analyzer, arena)?; if let Some(idx) = idx { - if let Some(t) = arena.ranges.get_mut(idx) { - if let Elem::Expr(expr) = &mut *t { - tracing::trace!("setting cache"); - if maximize { - expr.maximized = Some(MinMaxed::Maximized(Box::new(res.clone()))); - } else { - expr.minimized = Some(MinMaxed::Minimized(Box::new(res.clone()))); - } + if let Some(Elem::Expr(expr)) = arena.ranges.get_mut(idx) { + tracing::trace!("setting cache"); + if maximize { + expr.maximized = Some(MinMaxed::Maximized(Box::new(res.clone()))); + } else { + expr.minimized = Some(MinMaxed::Minimized(Box::new(res.clone()))); } } } @@ -73,13 +71,11 @@ impl ExecOp for RangeExpr { } if let Some(idx) = self.arena_idx(arena) { - if let Some(t) = arena.ranges.get_mut(idx) { - if let Elem::Expr(expr) = &mut *t { - if maximize { - expr.maximized.clone_from(&self.maximized); - } else { - expr.minimized.clone_from(&self.minimized); - } + if let Some(Elem::Expr(expr)) = arena.ranges.get_mut(idx) { + if maximize { + expr.maximized.clone_from(&self.maximized); + } else { + expr.minimized.clone_from(&self.minimized); } } } @@ -293,16 +289,14 @@ impl ExecOp for RangeExpr { RangeOp::Not => exec_not( &lhs_min, &lhs_max, &rhs_min, &rhs_max, maximize, analyzer, arena, ), - RangeOp::BitAnd => exec_bit_and( - &lhs_min, &lhs_max, &rhs_min, &rhs_max, maximize, analyzer, arena, - ), - RangeOp::BitOr => exec_bit_or( - &lhs_min, &lhs_max, &rhs_min, &rhs_max, maximize, analyzer, arena, - ), - RangeOp::BitXor => exec_bit_xor( - &lhs_min, &lhs_max, &rhs_min, &rhs_max, maximize, analyzer, arena, - ), - RangeOp::BitNot => exec_bit_not(&lhs_min, &lhs_max, maximize, analyzer, arena), + RangeOp::BitAnd => { + exec_bit_and(&lhs_min, &lhs_max, &rhs_min, &rhs_max, maximize, arena) + } + RangeOp::BitOr => exec_bit_or(&lhs_min, &lhs_max, &rhs_min, &rhs_max, maximize, arena), + RangeOp::BitXor => { + exec_bit_xor(&lhs_min, &lhs_max, &rhs_min, &rhs_max, maximize, arena) + } + RangeOp::BitNot => exec_bit_not(&lhs_min, &lhs_max, maximize, arena), RangeOp::Shl => exec_shl( &lhs_min, &lhs_max, &rhs_min, &rhs_max, maximize, analyzer, arena, ), diff --git a/crates/pyrometer/src/analyzer.rs b/crates/pyrometer/src/analyzer.rs index 57af49ae..a8fcaa1e 100644 --- a/crates/pyrometer/src/analyzer.rs +++ b/crates/pyrometer/src/analyzer.rs @@ -1173,43 +1173,36 @@ impl Analyzer { if let Some(idxs) = self.user_types.get(&ident.name).cloned() { let mut found = false; for idx in idxs.iter() { - match self.node(*idx) { - Node::Contract(_) => { - found = true; - let funcs = ContractNode::from(*idx).funcs(self); - let relevant_funcs: Vec<_> = funcs - .iter() - .filter_map(|func| { - let first_param: FunctionParamNode = - *func.params(self).iter().take(1).next()?; - let param_ty = first_param.ty(self).unwrap(); - if param_ty == ty_idx { - Some(func) - } else { - None - } - }) - .copied() - .collect(); - - if matches!(self.node(scope_node), Node::Contract(_)) { - self.add_edge( - scope_node, - *idx, - Edge::UsingContract(using_def.loc), - ); - } - - relevant_funcs.iter().for_each(|func| { - self.add_edge( - ty_idx, - *func, - Edge::LibraryFunction(scope_node), - ); - }); - break; + if let Node::Contract(_) = self.node(*idx) { + found = true; + let funcs = ContractNode::from(*idx).funcs(self); + let relevant_funcs: Vec<_> = funcs + .iter() + .filter_map(|func| { + let first_param: FunctionParamNode = + *func.params(self).iter().take(1).next()?; + let param_ty = first_param.ty(self).unwrap(); + if param_ty == ty_idx { + Some(func) + } else { + None + } + }) + .copied() + .collect(); + + if matches!(self.node(scope_node), Node::Contract(_)) { + self.add_edge( + scope_node, + *idx, + Edge::UsingContract(using_def.loc), + ); } - _ => {} + + relevant_funcs.iter().for_each(|func| { + self.add_edge(ty_idx, *func, Edge::LibraryFunction(scope_node)); + }); + break; } } if !found && !idxs.is_empty() { @@ -1231,32 +1224,27 @@ impl Analyzer { self.user_types.get(&ident_paths.path.identifiers[0].name) { for idx in idxs { - match self.node(*idx) { - Node::Contract(_) => { - if let Some(func) = ContractNode::from(*idx) - .funcs(self) - .iter() - .find(|func| { - func.name(self).unwrap().starts_with( - &ident_paths.path.identifiers[1].name, - ) - }) - { - self.add_edge( - ty_idx, - *func, - Edge::LibraryFunction(scope_node), - ); - } else { - panic!( - "Cannot find library function {}.{}", - ident_paths.path.identifiers[0].name, - ident_paths.path.identifiers[1].name - ); - } - break; + if let Node::Contract(_) = self.node(*idx) { + if let Some(func) = + ContractNode::from(*idx).funcs(self).iter().find(|func| { + func.name(self) + .unwrap() + .starts_with(&ident_paths.path.identifiers[1].name) + }) + { + self.add_edge( + ty_idx, + *func, + Edge::LibraryFunction(scope_node), + ); + } else { + panic!( + "Cannot find library function {}.{}", + ident_paths.path.identifiers[0].name, + ident_paths.path.identifiers[1].name + ); } - _ => {} + break; } } } else { @@ -1551,7 +1539,7 @@ impl Analyzer { ty_node } - fn post_source_to_site(file_no: usize, path: &PathBuf, source: &str) + fn post_source_to_site(file_no: usize, path: &Path, source: &str) where Self: std::marker::Sized, Self: AnalyzerLike, diff --git a/crates/pyrometer/src/analyzer_backend.rs b/crates/pyrometer/src/analyzer_backend.rs index 57ad4811..87e1e218 100644 --- a/crates/pyrometer/src/analyzer_backend.rs +++ b/crates/pyrometer/src/analyzer_backend.rs @@ -99,7 +99,7 @@ impl AnalyzerLike for Analyzer { } None } - }; + } let mut contract_to_funcs: BTreeMap< Option, @@ -125,16 +125,12 @@ impl AnalyzerLike for Analyzer { }; reqs.storage.iter().for_each(|var| { if let Some(c) = var.maybe_associated_contract(self) { - if !contract_to_funcs.contains_key(&Some(c)) { - contract_to_funcs.insert(Some(c), vec![]); - } + contract_to_funcs.entry(Some(c)).or_default(); if let Some(func_c) = maybe_func_contract { if let Some(needed) = recurse_find(func_c, c, self) { needed.into_iter().for_each(|c| { - if !contract_to_funcs.contains_key(&Some(c)) { - contract_to_funcs.insert(Some(c), vec![]); - } + contract_to_funcs.entry(Some(c)).or_default(); }); } } @@ -142,16 +138,12 @@ impl AnalyzerLike for Analyzer { }); if let Some(c) = maybe_associated_contract { - if !contract_to_funcs.contains_key(&Some(c)) { - contract_to_funcs.insert(Some(c), vec![]); - } + contract_to_funcs.entry(Some(c)).or_default(); if let Some(func_c) = maybe_func_contract { if let Some(needed) = recurse_find(func_c, c, self) { needed.into_iter().for_each(|c| { - if !contract_to_funcs.contains_key(&Some(c)) { - contract_to_funcs.insert(Some(c), vec![]); - } + contract_to_funcs.entry(Some(c)).or_default(); }); } } diff --git a/crates/pyrometer/src/graph_backend.rs b/crates/pyrometer/src/graph_backend.rs index 64a54214..27c35516 100644 --- a/crates/pyrometer/src/graph_backend.rs +++ b/crates/pyrometer/src/graph_backend.rs @@ -2,8 +2,6 @@ use crate::Analyzer; use graph::{ as_dot_str, elem::Elem, - elem::RangeElem, - nodes::Concrete, nodes::{ContextNode, ContextVarNode}, AnalyzerBackend, AsDotStr, ContextEdge, Edge, GraphBackend, Node, TOKYO_NIGHT_COLORS, }; @@ -573,10 +571,10 @@ pub fn arena_mermaid_node( format!("{indent}{}{{{{\"{}\"}}}}", idx.index(), arena_idx) } ArenaNode::ELEM(label) => { - format!("{indent}{}(\"{}\")", idx.index(), label.replace('"', "'")) + format!("{indent}{}(\"{}\")", idx.index(), label.replace('\"', "'")) } ArenaNode::CVAR(label) => { - format!("{indent}{}(\"{}\")", idx.index(), label.replace('"', "'")) + format!("{indent}{}(\"{}\")", idx.index(), label.replace('\"', "'")) } }; diff --git a/crates/pyrometer/src/lib.rs b/crates/pyrometer/src/lib.rs index be40bd1c..b08cde03 100644 --- a/crates/pyrometer/src/lib.rs +++ b/crates/pyrometer/src/lib.rs @@ -1,3 +1,4 @@ +#![allow(clippy::type_complexity)] mod analyzer; mod analyzer_backend; mod builtin_fns; diff --git a/crates/shared/src/analyzer_like.rs b/crates/shared/src/analyzer_like.rs index a6f1b79a..70832e81 100644 --- a/crates/shared/src/analyzer_like.rs +++ b/crates/shared/src/analyzer_like.rs @@ -144,6 +144,7 @@ pub trait AnalyzerLike: GraphLike { fn add_expr_err(&mut self, err: Self::ExprErr); fn expr_errs(&self) -> Vec; + #[allow(clippy::type_complexity)] fn builtin_fn_inputs( &self, ) -> &AHashMap, Vec)>; diff --git a/crates/shared/src/graph_like.rs b/crates/shared/src/graph_like.rs index ae073436..a82fb954 100644 --- a/crates/shared/src/graph_like.rs +++ b/crates/shared/src/graph_like.rs @@ -147,6 +147,7 @@ pub trait GraphDot: GraphLike { } /// Creates a subgraph for visually identifying contexts and subcontexts + #[allow(clippy::too_many_arguments)] fn cluster_str( &self, arena: &mut RangeArena, diff --git a/crates/solc-expressions/src/lib.rs b/crates/solc-expressions/src/lib.rs index 9d4ed05c..00ec7a14 100644 --- a/crates/solc-expressions/src/lib.rs +++ b/crates/solc-expressions/src/lib.rs @@ -1,3 +1,5 @@ +#![allow(clippy::too_many_arguments)] + mod array; mod assign; mod bin_op; diff --git a/crates/solc-expressions/src/variable.rs b/crates/solc-expressions/src/variable.rs index e8268cb5..e7ce1b37 100644 --- a/crates/solc-expressions/src/variable.rs +++ b/crates/solc-expressions/src/variable.rs @@ -244,10 +244,7 @@ pub trait Variable: AnalyzerBackend + Size } Some(StorageLocation::Memory(..)) | Some(StorageLocation::Calldata(..)) => idxs .iter() - .find(|idx| match self.node(**idx) { - Node::Struct(..) => true, - _ => false, - }) + .find(|idx| matches!(self.node(**idx), Node::Struct(..))) .copied(), None => { let t = &mut idxs;