Skip to content

Commit

Permalink
Clippy-related cleanup
Browse files Browse the repository at this point in the history
  • Loading branch information
camden-smallwood committed Dec 14, 2022
1 parent df10dbd commit 2c79a43
Show file tree
Hide file tree
Showing 53 changed files with 277 additions and 347 deletions.
2 changes: 1 addition & 1 deletion solast/src/analysis/abi_encoding.rs
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ impl AstVisitor for AbiEncodingVisitor {
function_definition.visibility,

if let FunctionKind::Constructor = function_definition.kind {
format!("{}", "constructor")
"constructor".to_string()
} else {
format!("`{}` {}", function_definition.name, function_definition.kind)
},
Expand Down
4 changes: 2 additions & 2 deletions solast/src/analysis/assert_usage.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ impl AstVisitor for AssertUsageVisitor {

let definition_id = match context.definition_node {
ContractDefinitionNode::FunctionDefinition(FunctionDefinition { id, .. }) |
ContractDefinitionNode::ModifierDefinition(ModifierDefinition { id, .. }) => id.clone(),
ContractDefinitionNode::ModifierDefinition(ModifierDefinition { id, .. }) => *id,

_ => return Ok(())
};
Expand Down Expand Up @@ -56,7 +56,7 @@ impl AstVisitor for AssertUsageVisitor {
function_definition.visibility,

if let FunctionKind::Constructor = function_definition.kind {
format!("{}", "constructor")
"constructor".to_string()
} else {
format!("`{}` {}", function_definition.name, function_definition.kind)
},
Expand Down
80 changes: 31 additions & 49 deletions solast/src/analysis/check_effects_interactions.rs
Original file line number Diff line number Diff line change
Expand Up @@ -60,9 +60,7 @@ impl CheckEffectsInteractionsVisitor {
}
}

if state_variable_id.is_none() {
return None
}
state_variable_id?;
}

state_variable_id
Expand Down Expand Up @@ -169,57 +167,49 @@ impl CheckEffectsInteractionsVisitor {

impl AstVisitor for CheckEffectsInteractionsVisitor {
fn visit_contract_definition<'a>(&mut self, context: &mut ContractDefinitionContext<'a>) -> io::Result<()> {
if !self.contract_info.contains_key(&context.contract_definition.id) {
self.contract_info.insert(context.contract_definition.id, ContractInfo {
function_info: HashMap::new(),
});
}
self.contract_info.entry(context.contract_definition.id).or_insert_with(|| ContractInfo {
function_info: HashMap::new(),
});

Ok(())
}

fn visit_function_definition<'a>(&mut self, context: &mut FunctionDefinitionContext<'a>) -> io::Result<()> {
let contract_info = self.contract_info.get_mut(&context.contract_definition.id).unwrap();

if !contract_info.function_info.contains_key(&context.function_definition.id) {
contract_info.function_info.insert(context.function_definition.id, FunctionInfo {
block_info: HashMap::new(),
});
}
contract_info.function_info.entry(context.function_definition.id).or_insert_with(|| FunctionInfo {
block_info: HashMap::new(),
});

Ok(())
}

fn visit_modifier_definition<'a>(&mut self, context: &mut ModifierDefinitionContext<'a>) -> io::Result<()> {
let contract_info = self.contract_info.get_mut(&context.contract_definition.id).unwrap();

if !contract_info.function_info.contains_key(&context.modifier_definition.id) {
contract_info.function_info.insert(context.modifier_definition.id, FunctionInfo {
block_info: HashMap::new(),
});
}
contract_info.function_info.entry(context.modifier_definition.id).or_insert_with(|| FunctionInfo {
block_info: HashMap::new(),
});

Ok(())
}

fn visit_block<'a, 'b>(&mut self, context: &mut BlockContext<'a, 'b>) -> io::Result<()> {
let definition_id = match context.definition_node {
&ContractDefinitionNode::FunctionDefinition(FunctionDefinition { id, .. }) => id,
&ContractDefinitionNode::ModifierDefinition(ModifierDefinition { id, .. }) => id,
ContractDefinitionNode::FunctionDefinition(FunctionDefinition { id, .. }) => id,
ContractDefinitionNode::ModifierDefinition(ModifierDefinition { id, .. }) => id,
_ => return Ok(())
};

let contract_info = self.contract_info.get_mut(&context.contract_definition.id).unwrap();
let function_info = contract_info.function_info.get_mut(&definition_id).unwrap();
let function_info = contract_info.function_info.get_mut(definition_id).unwrap();

if !function_info.block_info.contains_key(&context.block.id) {
function_info.block_info.insert(context.block.id, BlockInfo {
makes_external_call: false,
makes_post_external_call_assignment: false,
variable_bindings: HashMap::new(),
parent_blocks: context.blocks.iter().map(|&block| block.id).collect(),
});
}
function_info.block_info.entry(context.block.id).or_insert_with(|| BlockInfo {
makes_external_call: false,
makes_post_external_call_assignment: false,
variable_bindings: HashMap::new(),
parent_blocks: context.blocks.iter().map(|&block| block.id).collect(),
});

Ok(())
}
Expand All @@ -230,13 +220,13 @@ impl AstVisitor for CheckEffectsInteractionsVisitor {
}

let definition_id = match context.definition_node {
&ContractDefinitionNode::FunctionDefinition(FunctionDefinition { id, .. }) => id,
&ContractDefinitionNode::ModifierDefinition(ModifierDefinition { id, .. }) => id,
ContractDefinitionNode::FunctionDefinition(FunctionDefinition { id, .. }) => id,
ContractDefinitionNode::ModifierDefinition(ModifierDefinition { id, .. }) => id,
_ => return Ok(())
};

let contract_info = self.contract_info.get_mut(&context.contract_definition.id).unwrap();
let function_info = contract_info.function_info.get_mut(&definition_id).unwrap();
let function_info = contract_info.function_info.get_mut(definition_id).unwrap();
let block_id = context.blocks.last().unwrap().id;

//
Expand Down Expand Up @@ -270,11 +260,7 @@ impl AstVisitor for CheckEffectsInteractionsVisitor {

let block_info = function_info.block_info.get_mut(&block_id).unwrap();

if !block_info.variable_bindings.contains_key(&state_variable_id) {
block_info.variable_bindings.insert(state_variable_id, vec![]);
}

let variable_bindings = block_info.variable_bindings.get_mut(&state_variable_id).unwrap();
let variable_bindings = block_info.variable_bindings.entry(state_variable_id).or_insert_with(Vec::new);

if !variable_bindings.contains(&local_variable_id) {
variable_bindings.push(local_variable_id);
Expand All @@ -294,7 +280,7 @@ impl AstVisitor for CheckEffectsInteractionsVisitor {
_ => continue
};

let local_variable_id = match context.variable_declaration_statement.declarations.iter().nth(i).unwrap() {
let local_variable_id = match context.variable_declaration_statement.declarations.get(i).unwrap() {
&Some(VariableDeclaration {
storage_location: StorageLocation::Storage,
id,
Expand All @@ -317,11 +303,7 @@ impl AstVisitor for CheckEffectsInteractionsVisitor {

let block_info = function_info.block_info.get_mut(&block_id).unwrap();

if !block_info.variable_bindings.contains_key(&state_variable_id) {
block_info.variable_bindings.insert(state_variable_id, vec![]);
}

let variable_bindings = block_info.variable_bindings.get_mut(&state_variable_id).unwrap();
let variable_bindings = block_info.variable_bindings.entry(state_variable_id).or_insert_with(Vec::new);

if !variable_bindings.contains(&local_variable_id) {
variable_bindings.push(local_variable_id);
Expand All @@ -341,13 +323,13 @@ impl AstVisitor for CheckEffectsInteractionsVisitor {
}

let definition_id = match context.definition_node {
&ContractDefinitionNode::FunctionDefinition(FunctionDefinition { id, .. }) => id,
&ContractDefinitionNode::ModifierDefinition(ModifierDefinition { id, .. }) => id,
ContractDefinitionNode::FunctionDefinition(FunctionDefinition { id, .. }) => id,
ContractDefinitionNode::ModifierDefinition(ModifierDefinition { id, .. }) => id,
_ => return Ok(())
};

let contract_info = self.contract_info.get_mut(&context.contract_definition.id).unwrap();
let function_info = contract_info.function_info.get_mut(&definition_id).unwrap();
let function_info = contract_info.function_info.get_mut(definition_id).unwrap();
let block_info = function_info.block_info.get_mut(&context.blocks.last().unwrap().id).unwrap();

//
Expand Down Expand Up @@ -381,13 +363,13 @@ impl AstVisitor for CheckEffectsInteractionsVisitor {
}

let definition_id = match context.definition_node {
&ContractDefinitionNode::FunctionDefinition(FunctionDefinition { id, .. }) => id,
&ContractDefinitionNode::ModifierDefinition(ModifierDefinition { id, .. }) => id,
ContractDefinitionNode::FunctionDefinition(FunctionDefinition { id, .. }) => id,
ContractDefinitionNode::ModifierDefinition(ModifierDefinition { id, .. }) => id,
_ => return Ok(())
};

let contract_info = self.contract_info.get_mut(&context.contract_definition.id).unwrap();
let function_info = contract_info.function_info.get_mut(&definition_id).unwrap();
let function_info = contract_info.function_info.get_mut(definition_id).unwrap();
let block_info = function_info.block_info.get_mut(&context.blocks.last().unwrap().id).unwrap();

//
Expand Down
24 changes: 10 additions & 14 deletions solast/src/analysis/explicit_variable_return.rs
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ impl ExplicitVariableReturnVisitor {
function_definition.visibility,

if let FunctionKind::Constructor = function_definition.kind {
format!("{}", "constructor")
"constructor".to_string()
} else {
format!("`{}` {}", function_definition.name, function_definition.kind)
},
Expand Down Expand Up @@ -60,11 +60,9 @@ impl ExplicitVariableReturnVisitor {

impl AstVisitor for ExplicitVariableReturnVisitor {
fn visit_variable_declaration_statement<'a, 'b>(&mut self, context: &mut VariableDeclarationStatementContext<'a, 'b>) -> io::Result<()> {
for declaration in context.variable_declaration_statement.declarations.iter() {
if let Some(declaration) = declaration {
if !self.local_variable_ids.contains(&declaration.id) {
self.local_variable_ids.insert(declaration.id);
}
for declaration in context.variable_declaration_statement.declarations.iter().flatten() {
if !self.local_variable_ids.contains(&declaration.id) {
self.local_variable_ids.insert(declaration.id);
}
}

Expand All @@ -88,17 +86,15 @@ impl AstVisitor for ExplicitVariableReturnVisitor {
Some(Expression::TupleExpression(tuple_expression)) => {
let mut all_local_variables = true;

for component in tuple_expression.components.iter() {
if let Some(component) = component {
if let Expression::Identifier(identifier) = component {
if !self.local_variable_ids.contains(&identifier.referenced_declaration) {
all_local_variables = false;
break;
}
} else {
for component in tuple_expression.components.iter().flatten() {
if let Expression::Identifier(identifier) = component {
if !self.local_variable_ids.contains(&identifier.referenced_declaration) {
all_local_variables = false;
break;
}
} else {
all_local_variables = false;
break;
}
}

Expand Down
2 changes: 1 addition & 1 deletion solast/src/analysis/external_calls_in_loop.rs
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ impl ExternalCallsInLoopVisitor {
function_definition.visibility,

if let FunctionKind::Constructor = function_definition.kind {
format!("{}", "constructor")
"constructor".to_string()
} else {
format!("`{}` {}", function_definition.name, function_definition.kind)
},
Expand Down
2 changes: 1 addition & 1 deletion solast/src/analysis/ineffectual_statements.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ impl IneffectualStatementsVisitor {
function_definition.visibility,

if let FunctionKind::Constructor = function_definition.kind {
format!("{}", "constructor")
"constructor".to_string()
} else {
format!("`{}` {}", function_definition.name, function_definition.kind)
},
Expand Down
8 changes: 4 additions & 4 deletions solast/src/analysis/inline_assembly.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ impl InlineAssemblyVisitor {
function_definition.visibility,

if let FunctionKind::Constructor = function_definition.kind {
format!("{}", "constructor")
"constructor".to_string()
} else {
format!("`{}` {}", function_definition.name, function_definition.kind)
},
Expand Down Expand Up @@ -95,7 +95,7 @@ impl AstVisitor for InlineAssemblyVisitor {
}

"calldatacopy" => {
let arguments = match context.yul_function_call.arguments.iter().nth(2) {
let arguments = match context.yul_function_call.arguments.get(2) {
Some(YulExpression::YulFunctionCall(YulFunctionCall {
function_name: YulIdentifier { name },
arguments,
Expand All @@ -104,7 +104,7 @@ impl AstVisitor for InlineAssemblyVisitor {
_ => return Ok(())
};

match arguments.iter().nth(0) {
match arguments.get(0) {
Some(YulExpression::YulFunctionCall(YulFunctionCall {
function_name: YulIdentifier { name },
..
Expand All @@ -113,7 +113,7 @@ impl AstVisitor for InlineAssemblyVisitor {
_ => return Ok(())
}

let value = match arguments.iter().nth(1) {
let value = match arguments.get(1) {
Some(
YulExpression::YulLiteral(YulLiteral {
value: Some(value),
Expand Down
6 changes: 4 additions & 2 deletions solast/src/analysis/large_literals.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ impl LargeLiteralsVisitor {
function_definition.visibility,

if let FunctionKind::Constructor = function_definition.kind {
format!("{}", "constructor")
"constructor".to_string()
} else {
format!("`{}` {}", function_definition.name, function_definition.kind)
},
Expand Down Expand Up @@ -52,7 +52,9 @@ impl LargeLiteralsVisitor {
impl AstVisitor for LargeLiteralsVisitor {
fn visit_literal<'a, 'b>(&mut self, context: &mut LiteralContext<'a, 'b>) -> io::Result<()> {
if let Some(value) = context.literal.value.as_ref() {
if value.chars().all(char::is_numeric) && (|n| (n > 6) && ((n % 3) != 0))(value.len()) {
let n = value.len();

if value.chars().all(char::is_numeric) && (n > 6) && ((n % 3) != 0) {
self.print_message(
context.contract_definition,
context.definition_node,
Expand Down
2 changes: 1 addition & 1 deletion solast/src/analysis/manipulatable_balance_usage.rs
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ impl ManipulatableBalanceUsageVisitor {
function_definition.visibility,

if let FunctionKind::Constructor = function_definition.kind {
format!("{}", "constructor")
"constructor".to_string()
} else {
format!("`{}` {}", function_definition.name, function_definition.kind)
},
Expand Down
13 changes: 4 additions & 9 deletions solast/src/analysis/missing_return.rs
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ impl MissingReturnVisitor {
function_definition.visibility,

if let FunctionKind::Constructor = function_definition.kind {
format!("{}", "constructor")
"constructor".to_string()
} else {
format!("`{}` {}", function_definition.name, function_definition.kind)
},
Expand All @@ -47,14 +47,9 @@ impl AstVisitor for MissingReturnVisitor {
return Ok(());
}

if !self.function_info.contains_key(&context.function_definition.id) {
self.function_info.insert(
context.function_definition.id,
FunctionInfo {
assigned_return_variables: HashSet::new(),
},
);
}
self.function_info.entry(context.function_definition.id).or_insert_with(|| FunctionInfo {
assigned_return_variables: HashSet::new(),
});

Ok(())
}
Expand Down
4 changes: 2 additions & 2 deletions solast/src/analysis/redundant_assignments.rs
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ impl RedundantAssignmentsVisitor {
function_definition.visibility,

if let FunctionKind::Constructor = function_definition.kind {
format!("{}", "constructor")
"constructor".to_string()
} else {
format!("`{}` {}", function_definition.name, function_definition.kind)
},
Expand Down Expand Up @@ -67,7 +67,7 @@ impl AstVisitor for RedundantAssignmentsVisitor {
component_ids.extend(component.referenced_declarations());
}

if !component_ids.is_empty() && tuple_component_ids.iter().find(|&ids| ids.eq(&component_ids)).is_some() {
if !component_ids.is_empty() && tuple_component_ids.iter().any(|ids| ids.eq(&component_ids)) {
self.print_message(
context.contract_definition,
context.definition_node,
Expand Down
2 changes: 1 addition & 1 deletion solast/src/analysis/redundant_comparisons.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ impl RedundantComparisonsVisitor {
function_definition.visibility,

if let FunctionKind::Constructor = function_definition.kind {
format!("{}", "constructor")
"constructor".to_string()
} else {
format!("`{}` {}", function_definition.name, function_definition.kind)
},
Expand Down
8 changes: 3 additions & 5 deletions solast/src/analysis/redundant_imports.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,9 @@ pub struct RedundantImportsVisitor {

impl AstVisitor for RedundantImportsVisitor {
fn visit_source_unit<'a>(&mut self, context: &mut SourceUnitContext<'a>) -> std::io::Result<()> {
if !self.source_unit_info.contains_key(&context.current_source_unit.id) {
self.source_unit_info.insert(context.current_source_unit.id, SourceUnitInfo {
imported_paths: HashMap::new(),
});
}
self.source_unit_info.entry(context.current_source_unit.id).or_insert_with(|| SourceUnitInfo {
imported_paths: HashMap::new(),
});

Ok(())
}
Expand Down
Loading

0 comments on commit 2c79a43

Please sign in to comment.