This repository has been archived by the owner on Jul 3, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
merge: #156 feature/50-solidity-linter-rules/111-named-parameters-map…
…ping-rule-staging 111 - Named Parameters Mapping Rule
- Loading branch information
Showing
11 changed files
with
236 additions
and
32 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
105 changes: 105 additions & 0 deletions
105
toolchains/solidity/linter/core/solidhunter-lib/src/rules/naming/named_parameters_mapping.rs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,105 @@ | ||
use crate::linter::SolidFile; | ||
use crate::rules::types::*; | ||
use crate::types::*; | ||
use ast_extractor::*; | ||
|
||
pub const RULE_ID: &str = "named-parameters-mapping"; | ||
|
||
pub struct NamedParametersMapping { | ||
data: RuleEntry, | ||
} | ||
|
||
pub struct MappingsVisitor { | ||
mappings: Vec<TypeMapping>, | ||
} | ||
|
||
impl MappingsVisitor { | ||
pub fn new() -> Self { | ||
Self { | ||
mappings: Vec::new(), | ||
} | ||
} | ||
} | ||
|
||
impl<'ast> Visit<'ast> for MappingsVisitor { | ||
fn visit_type(&mut self, t: &Type) { | ||
if let Type::Mapping(ty) = t { | ||
self.mappings.push(ty.clone()); | ||
} | ||
visit::visit_type(self, t) | ||
} | ||
} | ||
|
||
impl NamedParametersMapping { | ||
fn create_diag( | ||
&self, | ||
location: (LineColumn, LineColumn), | ||
message: &str, | ||
file: &SolidFile, | ||
) -> LintDiag { | ||
LintDiag { | ||
id: RULE_ID.to_string(), | ||
range: Range { | ||
start: Position { | ||
line: location.0.line, | ||
character: location.0.column, | ||
}, | ||
end: Position { | ||
line: location.1.line, | ||
character: location.1.column, | ||
}, | ||
}, | ||
message: message.to_string(), | ||
severity: Some(self.data.severity), | ||
code: None, | ||
source: None, | ||
uri: file.path.clone(), | ||
source_file_content: file.content.clone(), | ||
} | ||
} | ||
} | ||
|
||
impl RuleType for NamedParametersMapping { | ||
fn diagnose(&self, file: &SolidFile, _files: &[SolidFile]) -> Vec<LintDiag> { | ||
let mut res = Vec::new(); | ||
let mut visitor = MappingsVisitor::new(); | ||
for contract in ast_extractor::retriever::retrieve_contract_nodes(&file.data) { | ||
visitor.visit_item_contract(&contract); | ||
} | ||
|
||
for mapping in visitor.mappings.iter() { | ||
if mapping.key_name.is_none() { | ||
let span = mapping.key.span(); | ||
res.push(self.create_diag( | ||
(span.start(), span.end()), | ||
format!("{} parameter is not named", mapping.key).as_str(), | ||
file, | ||
)); | ||
} | ||
if mapping.value_name.is_none() { | ||
let span = mapping.value.span(); | ||
res.push(self.create_diag( | ||
(span.start(), span.end()), | ||
format!("{} parameter is not named", mapping.value).as_str(), | ||
file, | ||
)); | ||
} | ||
} | ||
res | ||
} | ||
} | ||
|
||
impl NamedParametersMapping { | ||
pub(crate) fn create(data: RuleEntry) -> Box<dyn RuleType> { | ||
let rule = NamedParametersMapping { data }; | ||
Box::new(rule) | ||
} | ||
|
||
pub(crate) fn create_default() -> RuleEntry { | ||
RuleEntry { | ||
id: RULE_ID.to_string(), | ||
severity: Severity::WARNING, | ||
data: vec![], | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
70 changes: 70 additions & 0 deletions
70
...ns/solidity/linter/core/solidhunter-lib/testdata/NamedParametersMapping/.solidhunter.json
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,70 @@ | ||
{ | ||
"name": "solidhunter", | ||
"includes": [], | ||
"plugins": [], | ||
"rules": [ | ||
{ | ||
"id": "line-max-len", | ||
"severity": "WARNING", | ||
"data": [ | ||
"80" | ||
] | ||
}, | ||
{ | ||
"id": "no-inline-assembly", | ||
"severity": "WARNING", | ||
"data": [] | ||
}, | ||
{ | ||
"id": "named-parameters-mapping", | ||
"severity": "WARNING", | ||
"data": [] | ||
}, | ||
{ | ||
"id": "max-states-count", | ||
"severity": "WARNING", | ||
"data": [ | ||
"15" | ||
] | ||
}, | ||
{ | ||
"id": "function-max-lines", | ||
"severity": "WARNING", | ||
"data": [ | ||
"20" | ||
] | ||
}, | ||
{ | ||
"id": "reason-string", | ||
"severity": "WARNING", | ||
"data": [ | ||
"32" | ||
] | ||
}, | ||
{ | ||
"id": "contract-name-pascalcase", | ||
"severity": "WARNING", | ||
"data": [] | ||
}, | ||
{ | ||
"id": "func-name-camelcase", | ||
"severity": "WARNING", | ||
"data": [] | ||
}, | ||
{ | ||
"id": "func-param-name-camelcase", | ||
"severity": "WARNING", | ||
"data": [] | ||
}, | ||
{ | ||
"id": "use-forbidden-name", | ||
"severity": "WARNING", | ||
"data": [] | ||
}, | ||
{ | ||
"id": "import-on-top", | ||
"severity": "WARNING", | ||
"data": [] | ||
} | ||
] | ||
} |
9 changes: 9 additions & 0 deletions
9
toolchains/solidity/linter/core/solidhunter-lib/testdata/NamedParametersMapping/file.sol
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
pragma solidity 0.8.0; | ||
|
||
contract Test { | ||
mapping(address ok => uint256) public balances; | ||
mapping(address => uint256 no) public balances; | ||
mapping(address => uint256) public balances; | ||
mapping(address named => mapping(uint256 ok => address) wow) public balan; | ||
mapping(address balance => uint256 amount) public balances; | ||
} |
5 changes: 5 additions & 0 deletions
5
toolchains/solidity/linter/core/solidhunter-lib/testdata/NamedParametersMapping/findings.csv
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
named-parameters-mapping:4:26:4:33 | ||
named-parameters-mapping:5:12:5:19 | ||
named-parameters-mapping:6:12:6:19 | ||
named-parameters-mapping:6:23:6:30 | ||
named-parameters-mapping:7:51:7:58 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters