Skip to content

Commit

Permalink
Clean up the unused_return analyzer
Browse files Browse the repository at this point in the history
  • Loading branch information
camden-smallwood committed Jan 27, 2023
1 parent 2b61f2f commit a7349bd
Showing 1 changed file with 40 additions and 68 deletions.
108 changes: 40 additions & 68 deletions solast/src/analysis/unused_return.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,24 @@ use solidity::ast::*;

pub struct UnusedReturnVisitor;

impl UnusedReturnVisitor {
fn print_message(
&mut self,
contract_definition: &ContractDefinition,
definition_node: &ContractDefinitionNode,
source_line: usize,
called_name: &str,
return_parameter_count: usize,
) {
println!(
"\t{} makes a call to the {}, ignoring the returned {}",
contract_definition.definition_node_location(source_line, definition_node),
called_name,
if return_parameter_count == 1 { "value" } else { "values" },
);
}
}

impl AstVisitor for UnusedReturnVisitor {
fn visit_statement<'a, 'b>(&mut self, context: &mut StatementContext<'a, 'b>) -> std::io::Result<()> {
let (referenced_declaration, src) = match context.statement {
Expand Down Expand Up @@ -31,77 +49,31 @@ impl AstVisitor for UnusedReturnVisitor {

for source_unit in context.source_units.iter() {
if let Some((called_contract_definition, called_function_definition)) = source_unit.function_and_contract_definition(referenced_declaration) {
if called_function_definition.return_parameters.parameters.is_empty() {
return Ok(())
}

match context.definition_node {
ContractDefinitionNode::FunctionDefinition(function_definition) => println!(
"\tL{}: The {} `{}` {} makes a call to the {} `{}` {}, ignoring the returned {}",

if !called_function_definition.return_parameters.parameters.is_empty() {
self.print_message(
context.contract_definition,
context.definition_node,
context.current_source_unit.source_line(src)?,

function_definition.visibility,

if function_definition.name.is_empty() {
context.contract_definition.name.to_string()
} else {
format!("{}.{}", context.contract_definition.name, function_definition.name)
},

function_definition.kind,

format!("{:?}", called_function_definition.visibility).to_lowercase(),

if called_function_definition.name.is_empty() {
called_contract_definition.name.to_string()
} else {
format!("{}.{}", called_contract_definition.name, called_function_definition.name)
},

format!("{:?}", called_function_definition.kind).to_lowercase(),

if called_function_definition.return_parameters.parameters.len() > 1 {
"values"
} else {
"value"
}
),

ContractDefinitionNode::ModifierDefinition(modifier_definition) => println!(
"\tL{}: The {} `{}` modifier makes a call to the {} `{}` {}, ignoring the returned {}",

context.current_source_unit.source_line(src)?,

format!("{:?}", modifier_definition.visibility).to_lowercase(),

if modifier_definition.name.is_empty() {
context.contract_definition.name.to_string()
} else {
format!("{}.{}", context.contract_definition.name, modifier_definition.name)
},

format!("{:?}", called_function_definition.visibility).to_lowercase(),

if called_function_definition.name.is_empty() {
called_contract_definition.name.to_string()
} else {
format!("{}.{}", called_contract_definition.name, called_function_definition.name)
},

format!("{:?}", called_function_definition.kind).to_lowercase(),

if called_function_definition.return_parameters.parameters.len() > 1 {
"values"
} else {
"value"
}
),

_ => ()
format!(
"{} `{}` {}",

format!("{:?}", called_function_definition.visibility).to_lowercase(),

if called_function_definition.name.is_empty() {
called_contract_definition.name.to_string()
} else {
format!("{}.{}", called_contract_definition.name, called_function_definition.name)
},

format!("{:?}", called_function_definition.kind).to_lowercase(),
).as_str(),

called_function_definition.return_parameters.parameters.len(),
);
}

return Ok(())
break;
}
}

Expand Down

0 comments on commit a7349bd

Please sign in to comment.