From f6d6dc30a04af222aeb3324b898fb6ce4fc55b8e Mon Sep 17 00:00:00 2001 From: Astrodevs CI Date: Wed, 25 Oct 2023 19:13:28 +0000 Subject: [PATCH 01/15] chore: create branch feature/185-ignore-linting-file-staging --- remove-me-bfa9fe2ae6eb4793aaed.txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 remove-me-bfa9fe2ae6eb4793aaed.txt diff --git a/remove-me-bfa9fe2ae6eb4793aaed.txt b/remove-me-bfa9fe2ae6eb4793aaed.txt new file mode 100644 index 00000000..4bcb0534 --- /dev/null +++ b/remove-me-bfa9fe2ae6eb4793aaed.txt @@ -0,0 +1 @@ +bfa9fe2ae6eb4793aaed From c9eab23a94507bea8a379c46229454876810ef2e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9o=20Maringer?= Date: Thu, 2 Nov 2023 14:37:04 +0000 Subject: [PATCH 02/15] feat(solidity/linter): initialize function for solidhunter ignore --- .../core/crates/linter-lib/src/ignore.rs | 29 +++++++++++++++++++ .../core/crates/linter-lib/src/lib.rs | 1 + .../core/crates/linter-lib/src/linter.rs | 17 +++++++++-- 3 files changed, 45 insertions(+), 2 deletions(-) create mode 100644 toolchains/solidity/core/crates/linter-lib/src/ignore.rs diff --git a/toolchains/solidity/core/crates/linter-lib/src/ignore.rs b/toolchains/solidity/core/crates/linter-lib/src/ignore.rs new file mode 100644 index 00000000..a2eca0ca --- /dev/null +++ b/toolchains/solidity/core/crates/linter-lib/src/ignore.rs @@ -0,0 +1,29 @@ +use glob::glob; +use crate::errors::SolidHunterError; + +fn parse_line (line: &str) -> Vec { + let mut files = Vec::new(); + + if let Ok(entries) = glob(line) { + for entry in entries.flatten() { + files.push(entry.into_os_string().into_string().unwrap()) + } + } + + files +} + +pub fn get_ignored_files (filepath: &str) -> Result, SolidHunterError> { + let mut ignored_files = Vec::new(); + + if !std::path::Path::new(filepath).is_file() { + return Ok(ignored_files); + } + + let file = std::fs::read_to_string(filepath)?; + + for line in file.lines() { + ignored_files.append(&mut parse_line(line)) + } + Ok(ignored_files) +} \ No newline at end of file diff --git a/toolchains/solidity/core/crates/linter-lib/src/lib.rs b/toolchains/solidity/core/crates/linter-lib/src/lib.rs index 5e557edc..a069316a 100644 --- a/toolchains/solidity/core/crates/linter-lib/src/lib.rs +++ b/toolchains/solidity/core/crates/linter-lib/src/lib.rs @@ -2,3 +2,4 @@ pub mod errors; pub mod linter; pub mod rules; pub mod types; +mod ignore; diff --git a/toolchains/solidity/core/crates/linter-lib/src/linter.rs b/toolchains/solidity/core/crates/linter-lib/src/linter.rs index 35d53a57..4894053d 100644 --- a/toolchains/solidity/core/crates/linter-lib/src/linter.rs +++ b/toolchains/solidity/core/crates/linter-lib/src/linter.rs @@ -8,6 +8,7 @@ use std::fs; use glob::glob; use std::path::Path; +use crate::ignore::get_ignored_files; #[derive(Debug, Clone)] pub struct SolidFile { @@ -20,6 +21,7 @@ pub struct SolidLinter { files: Vec, rule_factory: RuleFactory, rules: Vec>, + ignored_files: Vec, } impl Default for SolidLinter { @@ -34,6 +36,7 @@ impl SolidLinter { files: Vec::new(), rule_factory: RuleFactory::default(), rules: vec![], + ignored_files: Vec::new(), } } @@ -43,6 +46,7 @@ impl SolidLinter { files: Vec::new(), rule_factory: RuleFactory::default(), rules: Vec::new(), + ignored_files: Vec::new(), }; for rule in default_rules { @@ -60,6 +64,14 @@ impl SolidLinter { Ok(()) } + pub fn initialize_ignore_file(&mut self, filepath: &str) ->Result<(), SolidHunterError> { + let ignored_files = get_ignored_files(filepath)?; + for file in ignored_files { + self.ignored_files.push(file.to_string()) + } + Ok(()) + } + fn _file_exists(&self, path: &str) -> bool { for file in &self.files { if file.path == path { @@ -92,8 +104,9 @@ impl SolidLinter { } } - pub fn parse_file(&mut self, filepath: &str) -> LintResult { - let content = fs::read_to_string(filepath)?; + pub fn parse_file(&mut self, filepath: String) -> LintResult { + println!("Parsing content: {}", filepath); + let content = fs::read_to_string(filepath.clone())?; self.parse_content(filepath, content.as_str()) } From f459475323e7ef8e787ad0f2c161f9dd0fa1dbf6 Mon Sep 17 00:00:00 2001 From: Enzo Bonato Date: Thu, 2 Nov 2023 16:26:40 +0100 Subject: [PATCH 03/15] feat(solidity/linter): Adding new argument in main cli --- toolchains/solidity/core/crates/linter-cli/.gitignore | 1 + toolchains/solidity/core/crates/linter-cli/readme.md | 1 + toolchains/solidity/core/crates/linter-cli/src/main.rs | 9 +++++++++ 3 files changed, 11 insertions(+) create mode 100644 toolchains/solidity/core/crates/linter-cli/.gitignore diff --git a/toolchains/solidity/core/crates/linter-cli/.gitignore b/toolchains/solidity/core/crates/linter-cli/.gitignore new file mode 100644 index 00000000..95f496a3 --- /dev/null +++ b/toolchains/solidity/core/crates/linter-cli/.gitignore @@ -0,0 +1 @@ +.solidhunter.json \ No newline at end of file diff --git a/toolchains/solidity/core/crates/linter-cli/readme.md b/toolchains/solidity/core/crates/linter-cli/readme.md index f262277f..c9b65a1d 100644 --- a/toolchains/solidity/core/crates/linter-cli/readme.md +++ b/toolchains/solidity/core/crates/linter-cli/readme.md @@ -31,6 +31,7 @@ Options: -i, --init Initialize rules file -h, --help Print help information -V, --version Print version information + -g, --ignore Specify ignore file ``` ## Configuration diff --git a/toolchains/solidity/core/crates/linter-cli/src/main.rs b/toolchains/solidity/core/crates/linter-cli/src/main.rs index 92df48c8..f970366b 100644 --- a/toolchains/solidity/core/crates/linter-cli/src/main.rs +++ b/toolchains/solidity/core/crates/linter-cli/src/main.rs @@ -51,6 +51,14 @@ struct Args { help = "Initialize rules file" )] init: bool, + + #[arg( + short = 'g', + long = "ignore", + default_value = ".solidhunterignore", + help = "Specify ignore file" + )] + ignore_file: String, } fn print_result(results: Vec) { @@ -86,6 +94,7 @@ fn main() -> Result<(), SolidHunterError> { println!("Exclude path: {:?}", args.ignore_path); println!("Using rules file: {}", args.rules_file); println!("Verbose output: {}", args.verbose); + println!("Ignore file output: {}", args.ignore_file); } if args.init { From 697ac1334a49ede51f6c2c3131ed44675f04b2eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9o=20Maringer?= Date: Thu, 2 Nov 2023 16:16:24 +0000 Subject: [PATCH 04/15] feat(solidity/linter): load solidhunter ignore by default and tests --- remove-me-bfa9fe2ae6eb4793aaed.txt | 1 - .../core/crates/linter-lib/src/ignore.rs | 24 ++++++++++++------- .../core/crates/linter-lib/src/linter.rs | 10 +++++--- .../SolidhunterIgnore/.solidhunter.json | 8 +++++++ .../SolidhunterIgnore/.solidhunterignore | 1 + .../testdata/SolidhunterIgnore/file.sol | 10 ++++++++ .../testdata/SolidhunterIgnore/findings.csv | 0 .../testdata/SolidhunterIgnore/test.sol | 0 .../core/crates/linter-lib/tests/linter.rs | 9 +++++-- 9 files changed, 48 insertions(+), 15 deletions(-) delete mode 100644 remove-me-bfa9fe2ae6eb4793aaed.txt create mode 100644 toolchains/solidity/core/crates/linter-lib/testdata/SolidhunterIgnore/.solidhunter.json create mode 100644 toolchains/solidity/core/crates/linter-lib/testdata/SolidhunterIgnore/.solidhunterignore create mode 100644 toolchains/solidity/core/crates/linter-lib/testdata/SolidhunterIgnore/file.sol create mode 100644 toolchains/solidity/core/crates/linter-lib/testdata/SolidhunterIgnore/findings.csv create mode 100644 toolchains/solidity/core/crates/linter-lib/testdata/SolidhunterIgnore/test.sol diff --git a/remove-me-bfa9fe2ae6eb4793aaed.txt b/remove-me-bfa9fe2ae6eb4793aaed.txt deleted file mode 100644 index 4bcb0534..00000000 --- a/remove-me-bfa9fe2ae6eb4793aaed.txt +++ /dev/null @@ -1 +0,0 @@ -bfa9fe2ae6eb4793aaed diff --git a/toolchains/solidity/core/crates/linter-lib/src/ignore.rs b/toolchains/solidity/core/crates/linter-lib/src/ignore.rs index a2eca0ca..e91d9701 100644 --- a/toolchains/solidity/core/crates/linter-lib/src/ignore.rs +++ b/toolchains/solidity/core/crates/linter-lib/src/ignore.rs @@ -1,29 +1,35 @@ +use std::path::Path; use glob::glob; use crate::errors::SolidHunterError; -fn parse_line (line: &str) -> Vec { +fn parse_line(line: &str, path: &Path) -> Vec { let mut files = Vec::new(); - - if let Ok(entries) = glob(line) { - for entry in entries.flatten() { - files.push(entry.into_os_string().into_string().unwrap()) + let line = line.replace("./", ""); + if let Some(parent) = path.parent() { + if let Some(filepath) = parent.join(line).to_str() { + if let Ok(entries) = glob(filepath) { + for entry in entries.flatten() { + files.push(entry.into_os_string().into_string().unwrap()) + } + } } } files } -pub fn get_ignored_files (filepath: &str) -> Result, SolidHunterError> { +pub fn get_ignored_files(filepath: &str) -> Result, SolidHunterError> { let mut ignored_files = Vec::new(); + let path = Path::new(filepath); - if !std::path::Path::new(filepath).is_file() { + if !path.is_file() { return Ok(ignored_files); } - let file = std::fs::read_to_string(filepath)?; + let file = std::fs::read_to_string(path)?; for line in file.lines() { - ignored_files.append(&mut parse_line(line)) + ignored_files.append(&mut parse_line(line, path)) } Ok(ignored_files) } \ No newline at end of file diff --git a/toolchains/solidity/core/crates/linter-lib/src/linter.rs b/toolchains/solidity/core/crates/linter-lib/src/linter.rs index 4894053d..6a9065dc 100644 --- a/toolchains/solidity/core/crates/linter-lib/src/linter.rs +++ b/toolchains/solidity/core/crates/linter-lib/src/linter.rs @@ -64,7 +64,7 @@ impl SolidLinter { Ok(()) } - pub fn initialize_ignore_file(&mut self, filepath: &str) ->Result<(), SolidHunterError> { + pub fn initialize_ignore_file(&mut self, filepath: &str) -> Result<(), SolidHunterError> { let ignored_files = get_ignored_files(filepath)?; for file in ignored_files { self.ignored_files.push(file.to_string()) @@ -105,7 +105,9 @@ impl SolidLinter { } pub fn parse_file(&mut self, filepath: String) -> LintResult { - println!("Parsing content: {}", filepath); + if self.ignored_files.contains(&filepath) { + return Ok(Vec::new()); + } let content = fs::read_to_string(filepath.clone())?; self.parse_content(filepath, content.as_str()) } @@ -127,7 +129,9 @@ impl SolidLinter { let mut result: Vec = Vec::new(); if let Ok(entries) = glob(&(folder.to_owned() + "/**/*.sol")) { for entry in entries.flatten() { - result.push(self.parse_file(&entry.into_os_string().into_string().unwrap())); + if !self.ignored_files.contains(&entry.clone().into_os_string().into_string().unwrap()) { + result.push(self.parse_file(entry.into_os_string().into_string().unwrap())); + } } } result diff --git a/toolchains/solidity/core/crates/linter-lib/testdata/SolidhunterIgnore/.solidhunter.json b/toolchains/solidity/core/crates/linter-lib/testdata/SolidhunterIgnore/.solidhunter.json new file mode 100644 index 00000000..96de8e57 --- /dev/null +++ b/toolchains/solidity/core/crates/linter-lib/testdata/SolidhunterIgnore/.solidhunter.json @@ -0,0 +1,8 @@ +{ + "name": "solidhunter", "rules": [ + { + "id": "avoid-tx-origin", + "severity": "WARNING" + } + ] +} \ No newline at end of file diff --git a/toolchains/solidity/core/crates/linter-lib/testdata/SolidhunterIgnore/.solidhunterignore b/toolchains/solidity/core/crates/linter-lib/testdata/SolidhunterIgnore/.solidhunterignore new file mode 100644 index 00000000..ef17dd66 --- /dev/null +++ b/toolchains/solidity/core/crates/linter-lib/testdata/SolidhunterIgnore/.solidhunterignore @@ -0,0 +1 @@ +*.sol diff --git a/toolchains/solidity/core/crates/linter-lib/testdata/SolidhunterIgnore/file.sol b/toolchains/solidity/core/crates/linter-lib/testdata/SolidhunterIgnore/file.sol new file mode 100644 index 00000000..97291c3b --- /dev/null +++ b/toolchains/solidity/core/crates/linter-lib/testdata/SolidhunterIgnore/file.sol @@ -0,0 +1,10 @@ +pragma solidity 0.8.0; + +contract Test { + function awesome() public returns (address) { + return tx.origin; + } + function notAwesome() public returns (address) { + return msg.sender; + } +} \ No newline at end of file diff --git a/toolchains/solidity/core/crates/linter-lib/testdata/SolidhunterIgnore/findings.csv b/toolchains/solidity/core/crates/linter-lib/testdata/SolidhunterIgnore/findings.csv new file mode 100644 index 00000000..e69de29b diff --git a/toolchains/solidity/core/crates/linter-lib/testdata/SolidhunterIgnore/test.sol b/toolchains/solidity/core/crates/linter-lib/testdata/SolidhunterIgnore/test.sol new file mode 100644 index 00000000..e69de29b diff --git a/toolchains/solidity/core/crates/linter-lib/tests/linter.rs b/toolchains/solidity/core/crates/linter-lib/tests/linter.rs index cfc7bde1..a6202916 100644 --- a/toolchains/solidity/core/crates/linter-lib/tests/linter.rs +++ b/toolchains/solidity/core/crates/linter-lib/tests/linter.rs @@ -11,6 +11,7 @@ struct Finding { fn test_directory(base_name: &str) { let mut source = String::new(); let mut config = String::new(); + let mut ignore = String::new(); let mut expected_findings: Vec = Vec::new(); for path in fs::read_dir( @@ -27,6 +28,8 @@ fn test_directory(base_name: &str) { source = path.to_str().unwrap().to_string(); } else if filename == ".solidhunter.json" { config = path.to_str().unwrap().to_string(); + } else if filename == ".solidhunterignore" { + ignore = path.to_str().unwrap().to_string(); } else if filename == "findings.csv" { for line in fs::read_to_string(path).unwrap().lines() { let splitted_line: Vec<&str> = line.split(':').collect(); @@ -46,12 +49,13 @@ fn test_directory(base_name: &str) { } } - test_linter(&config, &source, &expected_findings); + test_linter(&config, &source, &expected_findings, &ignore ); } -fn test_linter(config: &str, source: &str, expected_findings: &Vec) { +fn test_linter(config: &str, source: &str, expected_findings: &Vec, ignore: &str) { let mut linter: SolidLinter = SolidLinter::new(); let _ = linter.initialize_rules(&String::from(config)); + let _ = linter.initialize_ignore_file(&String::from(ignore)); let result = linter.parse_file(source); let mut found_findings: Vec<&Finding> = Vec::new(); @@ -172,4 +176,5 @@ test_directories! { PrivateVarsLeadingUnderscore, FoundryTestFunctions, AvoidTxOrigin, + SolidhunterIgnore } From 826c32e1bd1e1d09eb3da8dd29bcb6a14f168868 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9o=20Maringer?= Date: Fri, 3 Nov 2023 10:09:09 +0000 Subject: [PATCH 05/15] feat(solidity/cli): initialize ignore file if set --- toolchains/solidity/core/crates/linter-cli/src/main.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/toolchains/solidity/core/crates/linter-cli/src/main.rs b/toolchains/solidity/core/crates/linter-cli/src/main.rs index f970366b..6837690d 100644 --- a/toolchains/solidity/core/crates/linter-cli/src/main.rs +++ b/toolchains/solidity/core/crates/linter-cli/src/main.rs @@ -107,6 +107,7 @@ fn main() -> Result<(), SolidHunterError> { if !args.path.is_empty() { let mut linter: SolidLinter = SolidLinter::new(); linter.initialize_rules(&args.rules_file)?; + linter.initialize_ignore_file(&args.ignore_file)?; let result = linter.parse_path(&args.path); if !args.to_json { From 72237b5e6b0019130078b4eb83b2eb9b4905e126 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9o=20Maringer?= Date: Fri, 3 Nov 2023 10:10:00 +0000 Subject: [PATCH 06/15] feat(solidity/linter): remove useless condition --- toolchains/solidity/core/crates/linter-lib/src/linter.rs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/toolchains/solidity/core/crates/linter-lib/src/linter.rs b/toolchains/solidity/core/crates/linter-lib/src/linter.rs index 6a9065dc..4c128fce 100644 --- a/toolchains/solidity/core/crates/linter-lib/src/linter.rs +++ b/toolchains/solidity/core/crates/linter-lib/src/linter.rs @@ -129,9 +129,7 @@ impl SolidLinter { let mut result: Vec = Vec::new(); if let Ok(entries) = glob(&(folder.to_owned() + "/**/*.sol")) { for entry in entries.flatten() { - if !self.ignored_files.contains(&entry.clone().into_os_string().into_string().unwrap()) { - result.push(self.parse_file(entry.into_os_string().into_string().unwrap())); - } + result.push(self.parse_file(entry.into_os_string().into_string().unwrap())); } } result From 0d05c092f89598754c484f1cd429ccb6608bc60a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9o=20Maringer?= Date: Fri, 3 Nov 2023 10:16:47 +0000 Subject: [PATCH 07/15] feat(solidity/linter): format --- toolchains/solidity/core/crates/linter-lib/src/ignore.rs | 6 +++--- toolchains/solidity/core/crates/linter-lib/src/lib.rs | 2 +- toolchains/solidity/core/crates/linter-lib/src/linter.rs | 2 +- toolchains/solidity/core/crates/linter-lib/tests/linter.rs | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/toolchains/solidity/core/crates/linter-lib/src/ignore.rs b/toolchains/solidity/core/crates/linter-lib/src/ignore.rs index e91d9701..e8e09eb3 100644 --- a/toolchains/solidity/core/crates/linter-lib/src/ignore.rs +++ b/toolchains/solidity/core/crates/linter-lib/src/ignore.rs @@ -1,6 +1,6 @@ -use std::path::Path; -use glob::glob; use crate::errors::SolidHunterError; +use glob::glob; +use std::path::Path; fn parse_line(line: &str, path: &Path) -> Vec { let mut files = Vec::new(); @@ -32,4 +32,4 @@ pub fn get_ignored_files(filepath: &str) -> Result, SolidHunterError ignored_files.append(&mut parse_line(line, path)) } Ok(ignored_files) -} \ No newline at end of file +} diff --git a/toolchains/solidity/core/crates/linter-lib/src/lib.rs b/toolchains/solidity/core/crates/linter-lib/src/lib.rs index a069316a..fe1e58d0 100644 --- a/toolchains/solidity/core/crates/linter-lib/src/lib.rs +++ b/toolchains/solidity/core/crates/linter-lib/src/lib.rs @@ -1,5 +1,5 @@ pub mod errors; +mod ignore; pub mod linter; pub mod rules; pub mod types; -mod ignore; diff --git a/toolchains/solidity/core/crates/linter-lib/src/linter.rs b/toolchains/solidity/core/crates/linter-lib/src/linter.rs index 4c128fce..c4170576 100644 --- a/toolchains/solidity/core/crates/linter-lib/src/linter.rs +++ b/toolchains/solidity/core/crates/linter-lib/src/linter.rs @@ -6,9 +6,9 @@ use crate::rules::types::*; use crate::types::*; use std::fs; +use crate::ignore::get_ignored_files; use glob::glob; use std::path::Path; -use crate::ignore::get_ignored_files; #[derive(Debug, Clone)] pub struct SolidFile { diff --git a/toolchains/solidity/core/crates/linter-lib/tests/linter.rs b/toolchains/solidity/core/crates/linter-lib/tests/linter.rs index a6202916..6dbaecee 100644 --- a/toolchains/solidity/core/crates/linter-lib/tests/linter.rs +++ b/toolchains/solidity/core/crates/linter-lib/tests/linter.rs @@ -49,7 +49,7 @@ fn test_directory(base_name: &str) { } } - test_linter(&config, &source, &expected_findings, &ignore ); + test_linter(&config, &source, &expected_findings, &ignore); } fn test_linter(config: &str, source: &str, expected_findings: &Vec, ignore: &str) { From c4d8e7a552f109664652629fc610ffb02d453550 Mon Sep 17 00:00:00 2001 From: 0xMemoryGrinder <35138272+0xMemoryGrinder@users.noreply.github.com> Date: Mon, 6 Nov 2023 20:23:09 -0500 Subject: [PATCH 08/15] feat(solidity/linter-cli): made exclude argument a list of files --- .../core/crates/linter-cli/src/main.rs | 22 +++++++---------- .../core/crates/linter-lib/src/linter.rs | 24 +++++++++---------- 2 files changed, 20 insertions(+), 26 deletions(-) diff --git a/toolchains/solidity/core/crates/linter-cli/src/main.rs b/toolchains/solidity/core/crates/linter-cli/src/main.rs index 6837690d..7ffc02df 100644 --- a/toolchains/solidity/core/crates/linter-cli/src/main.rs +++ b/toolchains/solidity/core/crates/linter-cli/src/main.rs @@ -13,12 +13,6 @@ struct Args { help = "Path to the project to lint" )] path: String, - #[arg( - short = 'e', - long = "exclude", - help = "Exclude part of the project path" - )] - ignore_path: Vec, #[arg( short = 'r', @@ -53,12 +47,11 @@ struct Args { init: bool, #[arg( - short = 'g', - long = "ignore", - default_value = ".solidhunterignore", - help = "Specify ignore file" + short = 'e', + long = "exclude", + help = "Specify excluded files", )] - ignore_file: String, + exclude: Option>, } fn print_result(results: Vec) { @@ -91,10 +84,9 @@ fn main() -> Result<(), SolidHunterError> { if args.verbose { println!("Verbose output enabled"); println!("Project path: {:?}", args.path); - println!("Exclude path: {:?}", args.ignore_path); println!("Using rules file: {}", args.rules_file); println!("Verbose output: {}", args.verbose); - println!("Ignore file output: {}", args.ignore_file); + println!("Excluded files: {:?}", args.exclude); } if args.init { @@ -107,7 +99,9 @@ fn main() -> Result<(), SolidHunterError> { if !args.path.is_empty() { let mut linter: SolidLinter = SolidLinter::new(); linter.initialize_rules(&args.rules_file)?; - linter.initialize_ignore_file(&args.ignore_file)?; + if let Some(excluded) = &args.exclude { + linter.initialize_excluded_files(excluded, &args.path)?; + } let result = linter.parse_path(&args.path); if !args.to_json { diff --git a/toolchains/solidity/core/crates/linter-lib/src/linter.rs b/toolchains/solidity/core/crates/linter-lib/src/linter.rs index c4170576..151a5315 100644 --- a/toolchains/solidity/core/crates/linter-lib/src/linter.rs +++ b/toolchains/solidity/core/crates/linter-lib/src/linter.rs @@ -21,7 +21,7 @@ pub struct SolidLinter { files: Vec, rule_factory: RuleFactory, rules: Vec>, - ignored_files: Vec, + excluded_files: Vec, } impl Default for SolidLinter { @@ -36,7 +36,7 @@ impl SolidLinter { files: Vec::new(), rule_factory: RuleFactory::default(), rules: vec![], - ignored_files: Vec::new(), + excluded_files: Vec::new(), } } @@ -46,7 +46,7 @@ impl SolidLinter { files: Vec::new(), rule_factory: RuleFactory::default(), rules: Vec::new(), - ignored_files: Vec::new(), + excluded_files: Vec::new(), }; for rule in default_rules { @@ -64,11 +64,11 @@ impl SolidLinter { Ok(()) } - pub fn initialize_ignore_file(&mut self, filepath: &str) -> Result<(), SolidHunterError> { - let ignored_files = get_ignored_files(filepath)?; - for file in ignored_files { - self.ignored_files.push(file.to_string()) + pub fn initialize_excluded_files(&mut self, excluded_filepaths: &Vec, filepath: &String) -> Result<(), SolidHunterError> { + for path in excluded_filepaths { + self.excluded_files.push(path.clone()) } + // TODO: find recursively all .solidhunterignore files from the filepath Ok(()) } @@ -105,11 +105,11 @@ impl SolidLinter { } pub fn parse_file(&mut self, filepath: String) -> LintResult { - if self.ignored_files.contains(&filepath) { - return Ok(Vec::new()); - } let content = fs::read_to_string(filepath.clone())?; - self.parse_content(filepath, content.as_str()) + if self.excluded_files.contains(&filepath) { + return Ok(FileDiags::new(content, Vec::new())); + } + self.parse_content(&filepath, content.as_str()) } pub fn parse_content(&mut self, filepath: &str, content: &str) -> LintResult { @@ -136,7 +136,7 @@ impl SolidLinter { } pub fn parse_path(&mut self, path: &str) -> Vec { if Path::new(&path).is_file() { - vec![self.parse_file(path)] + vec![self.parse_file(path.to_string())] } else { self.parse_folder(path) } From d18f8a9aea2599121d2467e11e6cb8c4aa3d87be Mon Sep 17 00:00:00 2001 From: 0xMemoryGrinder <35138272+0xMemoryGrinder@users.noreply.github.com> Date: Mon, 6 Nov 2023 20:35:16 -0500 Subject: [PATCH 09/15] feat(solidity/linter): made linter takes multiple paths to lint --- .../core/crates/linter-cli/src/main.rs | 35 +++++++++++-------- .../core/crates/linter-lib/src/linter.rs | 2 +- 2 files changed, 21 insertions(+), 16 deletions(-) diff --git a/toolchains/solidity/core/crates/linter-cli/src/main.rs b/toolchains/solidity/core/crates/linter-cli/src/main.rs index 7ffc02df..5d3da83b 100644 --- a/toolchains/solidity/core/crates/linter-cli/src/main.rs +++ b/toolchains/solidity/core/crates/linter-cli/src/main.rs @@ -8,11 +8,9 @@ use solidhunter_lib::types::LintResult; #[command(author, version, about, long_about = None)] struct Args { #[arg( - required = false, - default_value = ".", - help = "Path to the project to lint" + help = "Paths to the projects to lint" )] - path: String, + paths: Vec, #[arg( short = 'r', @@ -68,7 +66,7 @@ fn print_result(results: Vec) { } fn main() -> Result<(), SolidHunterError> { - let args = Args::parse(); + let mut args = Args::parse(); if !args.to_json { println!(); @@ -83,7 +81,7 @@ fn main() -> Result<(), SolidHunterError> { if args.verbose { println!("Verbose output enabled"); - println!("Project path: {:?}", args.path); + println!("Project path: {:?}", args.paths); println!("Using rules file: {}", args.rules_file); println!("Verbose output: {}", args.verbose); println!("Excluded files: {:?}", args.exclude); @@ -96,18 +94,25 @@ fn main() -> Result<(), SolidHunterError> { return Ok(()); } - if !args.path.is_empty() { - let mut linter: SolidLinter = SolidLinter::new(); - linter.initialize_rules(&args.rules_file)?; - if let Some(excluded) = &args.exclude { - linter.initialize_excluded_files(excluded, &args.path)?; - } + if args.paths.is_empty() { + args.paths.push(String::from(".")); + } - let result = linter.parse_path(&args.path); + let mut linter: SolidLinter = SolidLinter::new(); + linter.initialize_rules(&args.rules_file)?; + if let Some(excluded) = &args.exclude { + linter.initialize_excluded_files(excluded, &args.paths)?; + } + let mut results = vec![]; + for path in &args.paths { + let result = linter.parse_path(path); + results.push(result); + } + for path_result in results { if !args.to_json { - print_result(result); + print_result(path_result); } else { - for res in result { + for res in path_result { match res { Ok(diags) => { let json = serde_json::to_string_pretty(&diags); diff --git a/toolchains/solidity/core/crates/linter-lib/src/linter.rs b/toolchains/solidity/core/crates/linter-lib/src/linter.rs index 151a5315..11d88dc0 100644 --- a/toolchains/solidity/core/crates/linter-lib/src/linter.rs +++ b/toolchains/solidity/core/crates/linter-lib/src/linter.rs @@ -64,7 +64,7 @@ impl SolidLinter { Ok(()) } - pub fn initialize_excluded_files(&mut self, excluded_filepaths: &Vec, filepath: &String) -> Result<(), SolidHunterError> { + pub fn initialize_excluded_files(&mut self, excluded_filepaths: &Vec, filepaths: &Vec) -> Result<(), SolidHunterError> { for path in excluded_filepaths { self.excluded_files.push(path.clone()) } From 12e52bee5a413c5e01cf415bb25bf4988e4a96c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9o=20Maringer?= Date: Wed, 8 Nov 2023 23:07:09 +0000 Subject: [PATCH 10/15] feat(solidity/linter): ignore files from every .solidhunterignore recursivly --- .../core/crates/linter-cli/src/main.rs | 5 +-- .../core/crates/linter-lib/src/ignore.rs | 44 +++++++++++++++---- .../core/crates/linter-lib/src/linter.rs | 13 +++--- .../core/crates/linter-lib/tests/linter.rs | 4 +- 4 files changed, 48 insertions(+), 18 deletions(-) diff --git a/toolchains/solidity/core/crates/linter-cli/src/main.rs b/toolchains/solidity/core/crates/linter-cli/src/main.rs index 5d3da83b..79d18542 100644 --- a/toolchains/solidity/core/crates/linter-cli/src/main.rs +++ b/toolchains/solidity/core/crates/linter-cli/src/main.rs @@ -100,9 +100,8 @@ fn main() -> Result<(), SolidHunterError> { let mut linter: SolidLinter = SolidLinter::new(); linter.initialize_rules(&args.rules_file)?; - if let Some(excluded) = &args.exclude { - linter.initialize_excluded_files(excluded, &args.paths)?; - } + linter.initialize_excluded_files(args.exclude.as_ref(), &args.paths)?; + let mut results = vec![]; for path in &args.paths { let result = linter.parse_path(path); diff --git a/toolchains/solidity/core/crates/linter-lib/src/ignore.rs b/toolchains/solidity/core/crates/linter-lib/src/ignore.rs index e8e09eb3..ab5aca66 100644 --- a/toolchains/solidity/core/crates/linter-lib/src/ignore.rs +++ b/toolchains/solidity/core/crates/linter-lib/src/ignore.rs @@ -18,18 +18,46 @@ fn parse_line(line: &str, path: &Path) -> Vec { files } -pub fn get_ignored_files(filepath: &str) -> Result, SolidHunterError> { - let mut ignored_files = Vec::new(); - let path = Path::new(filepath); +fn parse_solihunterignore(filepath: &String) -> Result, SolidHunterError> { + let mut excluded_files = Vec::new(); + let content = std::fs::read_to_string(filepath)?; - if !path.is_file() { - return Ok(ignored_files); + for line in content.lines() { + excluded_files.append(&mut parse_line(line, Path::new(filepath))); } - let file = std::fs::read_to_string(path)?; + Ok(excluded_files) +} + +fn get_solidhunterignore_paths(filepath: &String) -> Result, SolidHunterError> { + let mut ignored_files = Vec::new(); - for line in file.lines() { - ignored_files.append(&mut parse_line(line, path)) + if let Ok(entries) = glob(&format!("{}/**/.solidhunterignore", filepath)) { + for entry in entries.flatten() { + ignored_files.push(entry.into_os_string().into_string().unwrap()) + } } + Ok(ignored_files) } + +pub fn get_excluded_files(filepaths: &Vec) -> Result, SolidHunterError> { + let mut excluded_files = Vec::new(); + + for filepath in filepaths { + let path = Path::new(filepath); + + if path.is_file() { + continue; + } + + let solidhunterignore_paths = get_solidhunterignore_paths(&filepath)?; + + for solidhunterignore_path in solidhunterignore_paths { + if let Ok(mut excluded) = parse_solihunterignore(&solidhunterignore_path) { + excluded_files.append(&mut excluded); + } + } + } + Ok(excluded_files) +} diff --git a/toolchains/solidity/core/crates/linter-lib/src/linter.rs b/toolchains/solidity/core/crates/linter-lib/src/linter.rs index 11d88dc0..8e842b72 100644 --- a/toolchains/solidity/core/crates/linter-lib/src/linter.rs +++ b/toolchains/solidity/core/crates/linter-lib/src/linter.rs @@ -6,7 +6,7 @@ use crate::rules::types::*; use crate::types::*; use std::fs; -use crate::ignore::get_ignored_files; +use crate::ignore::get_excluded_files; use glob::glob; use std::path::Path; @@ -64,11 +64,14 @@ impl SolidLinter { Ok(()) } - pub fn initialize_excluded_files(&mut self, excluded_filepaths: &Vec, filepaths: &Vec) -> Result<(), SolidHunterError> { - for path in excluded_filepaths { - self.excluded_files.push(path.clone()) + pub fn initialize_excluded_files(&mut self, excluded_filepaths: Option<&Vec>, filepaths: &Vec) -> Result<(), SolidHunterError> { + if let Some(excluded) = excluded_filepaths { + for path in excluded { + self.excluded_files.push(path.clone()) + } } - // TODO: find recursively all .solidhunterignore files from the filepath + self.excluded_files.append(&mut get_excluded_files(filepaths)?); + Ok(()) } diff --git a/toolchains/solidity/core/crates/linter-lib/tests/linter.rs b/toolchains/solidity/core/crates/linter-lib/tests/linter.rs index 6dbaecee..2f79afe9 100644 --- a/toolchains/solidity/core/crates/linter-lib/tests/linter.rs +++ b/toolchains/solidity/core/crates/linter-lib/tests/linter.rs @@ -55,9 +55,9 @@ fn test_directory(base_name: &str) { fn test_linter(config: &str, source: &str, expected_findings: &Vec, ignore: &str) { let mut linter: SolidLinter = SolidLinter::new(); let _ = linter.initialize_rules(&String::from(config)); - let _ = linter.initialize_ignore_file(&String::from(ignore)); + //let _ = linter.initialize_excluded_files(&String::from(ignore)); - let result = linter.parse_file(source); + let result = linter.parse_file(source.to_string()); let mut found_findings: Vec<&Finding> = Vec::new(); let mut not_found_findings: Vec<&Finding> = Vec::new(); let mut not_needed_findings: Vec<&LintDiag> = Vec::new(); From f5c771f635f865f7978dc2db84cf40aa882192d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9o=20Maringer?= Date: Thu, 9 Nov 2023 03:44:21 +0000 Subject: [PATCH 11/15] feat(solidity/linter): starting SolidhunterIgnore test --- .../SolidhunterIgnore/.solidhunterignore | 1 - .../testdata/SolidhunterIgnore/file.sol | 10 ------ .../testdata/SolidhunterIgnore/findings.csv | 0 .../testdata/SolidhunterIgnore/test.sol | 5 +++ .../testdata/SolidhunterIgnore/test/test.sol | 5 +++ .../test/test/.solidhunterignore | 1 + .../SolidhunterIgnore/test/test/test.sol | 5 +++ .../SolidhunterIgnore/test/test/test2.sol | 5 +++ .../testdata/SolidhunterIgnore/test/test2.sol | 5 +++ .../test/test2/.solidhunterignore | 1 + .../SolidhunterIgnore/test/test2/test.sol | 5 +++ .../SolidhunterIgnore/test/test2/test2.sol | 5 +++ .../core/crates/linter-lib/tests/linter.rs | 35 ++++++++++++++++--- 13 files changed, 68 insertions(+), 15 deletions(-) delete mode 100644 toolchains/solidity/core/crates/linter-lib/testdata/SolidhunterIgnore/file.sol delete mode 100644 toolchains/solidity/core/crates/linter-lib/testdata/SolidhunterIgnore/findings.csv create mode 100644 toolchains/solidity/core/crates/linter-lib/testdata/SolidhunterIgnore/test/test.sol create mode 100644 toolchains/solidity/core/crates/linter-lib/testdata/SolidhunterIgnore/test/test/.solidhunterignore create mode 100644 toolchains/solidity/core/crates/linter-lib/testdata/SolidhunterIgnore/test/test/test.sol create mode 100644 toolchains/solidity/core/crates/linter-lib/testdata/SolidhunterIgnore/test/test/test2.sol create mode 100644 toolchains/solidity/core/crates/linter-lib/testdata/SolidhunterIgnore/test/test2.sol create mode 100644 toolchains/solidity/core/crates/linter-lib/testdata/SolidhunterIgnore/test/test2/.solidhunterignore create mode 100644 toolchains/solidity/core/crates/linter-lib/testdata/SolidhunterIgnore/test/test2/test.sol create mode 100644 toolchains/solidity/core/crates/linter-lib/testdata/SolidhunterIgnore/test/test2/test2.sol diff --git a/toolchains/solidity/core/crates/linter-lib/testdata/SolidhunterIgnore/.solidhunterignore b/toolchains/solidity/core/crates/linter-lib/testdata/SolidhunterIgnore/.solidhunterignore index ef17dd66..e69de29b 100644 --- a/toolchains/solidity/core/crates/linter-lib/testdata/SolidhunterIgnore/.solidhunterignore +++ b/toolchains/solidity/core/crates/linter-lib/testdata/SolidhunterIgnore/.solidhunterignore @@ -1 +0,0 @@ -*.sol diff --git a/toolchains/solidity/core/crates/linter-lib/testdata/SolidhunterIgnore/file.sol b/toolchains/solidity/core/crates/linter-lib/testdata/SolidhunterIgnore/file.sol deleted file mode 100644 index 97291c3b..00000000 --- a/toolchains/solidity/core/crates/linter-lib/testdata/SolidhunterIgnore/file.sol +++ /dev/null @@ -1,10 +0,0 @@ -pragma solidity 0.8.0; - -contract Test { - function awesome() public returns (address) { - return tx.origin; - } - function notAwesome() public returns (address) { - return msg.sender; - } -} \ No newline at end of file diff --git a/toolchains/solidity/core/crates/linter-lib/testdata/SolidhunterIgnore/findings.csv b/toolchains/solidity/core/crates/linter-lib/testdata/SolidhunterIgnore/findings.csv deleted file mode 100644 index e69de29b..00000000 diff --git a/toolchains/solidity/core/crates/linter-lib/testdata/SolidhunterIgnore/test.sol b/toolchains/solidity/core/crates/linter-lib/testdata/SolidhunterIgnore/test.sol index e69de29b..7a9f640f 100644 --- a/toolchains/solidity/core/crates/linter-lib/testdata/SolidhunterIgnore/test.sol +++ b/toolchains/solidity/core/crates/linter-lib/testdata/SolidhunterIgnore/test.sol @@ -0,0 +1,5 @@ +pragma solidity 0.8.0; + +contract Test { + string public constant symbol = "TEST"; +} \ No newline at end of file diff --git a/toolchains/solidity/core/crates/linter-lib/testdata/SolidhunterIgnore/test/test.sol b/toolchains/solidity/core/crates/linter-lib/testdata/SolidhunterIgnore/test/test.sol new file mode 100644 index 00000000..7a9f640f --- /dev/null +++ b/toolchains/solidity/core/crates/linter-lib/testdata/SolidhunterIgnore/test/test.sol @@ -0,0 +1,5 @@ +pragma solidity 0.8.0; + +contract Test { + string public constant symbol = "TEST"; +} \ No newline at end of file diff --git a/toolchains/solidity/core/crates/linter-lib/testdata/SolidhunterIgnore/test/test/.solidhunterignore b/toolchains/solidity/core/crates/linter-lib/testdata/SolidhunterIgnore/test/test/.solidhunterignore new file mode 100644 index 00000000..6ebc0949 --- /dev/null +++ b/toolchains/solidity/core/crates/linter-lib/testdata/SolidhunterIgnore/test/test/.solidhunterignore @@ -0,0 +1 @@ +test2.sol diff --git a/toolchains/solidity/core/crates/linter-lib/testdata/SolidhunterIgnore/test/test/test.sol b/toolchains/solidity/core/crates/linter-lib/testdata/SolidhunterIgnore/test/test/test.sol new file mode 100644 index 00000000..7a9f640f --- /dev/null +++ b/toolchains/solidity/core/crates/linter-lib/testdata/SolidhunterIgnore/test/test/test.sol @@ -0,0 +1,5 @@ +pragma solidity 0.8.0; + +contract Test { + string public constant symbol = "TEST"; +} \ No newline at end of file diff --git a/toolchains/solidity/core/crates/linter-lib/testdata/SolidhunterIgnore/test/test/test2.sol b/toolchains/solidity/core/crates/linter-lib/testdata/SolidhunterIgnore/test/test/test2.sol new file mode 100644 index 00000000..7a9f640f --- /dev/null +++ b/toolchains/solidity/core/crates/linter-lib/testdata/SolidhunterIgnore/test/test/test2.sol @@ -0,0 +1,5 @@ +pragma solidity 0.8.0; + +contract Test { + string public constant symbol = "TEST"; +} \ No newline at end of file diff --git a/toolchains/solidity/core/crates/linter-lib/testdata/SolidhunterIgnore/test/test2.sol b/toolchains/solidity/core/crates/linter-lib/testdata/SolidhunterIgnore/test/test2.sol new file mode 100644 index 00000000..7a9f640f --- /dev/null +++ b/toolchains/solidity/core/crates/linter-lib/testdata/SolidhunterIgnore/test/test2.sol @@ -0,0 +1,5 @@ +pragma solidity 0.8.0; + +contract Test { + string public constant symbol = "TEST"; +} \ No newline at end of file diff --git a/toolchains/solidity/core/crates/linter-lib/testdata/SolidhunterIgnore/test/test2/.solidhunterignore b/toolchains/solidity/core/crates/linter-lib/testdata/SolidhunterIgnore/test/test2/.solidhunterignore new file mode 100644 index 00000000..ef17dd66 --- /dev/null +++ b/toolchains/solidity/core/crates/linter-lib/testdata/SolidhunterIgnore/test/test2/.solidhunterignore @@ -0,0 +1 @@ +*.sol diff --git a/toolchains/solidity/core/crates/linter-lib/testdata/SolidhunterIgnore/test/test2/test.sol b/toolchains/solidity/core/crates/linter-lib/testdata/SolidhunterIgnore/test/test2/test.sol new file mode 100644 index 00000000..7a9f640f --- /dev/null +++ b/toolchains/solidity/core/crates/linter-lib/testdata/SolidhunterIgnore/test/test2/test.sol @@ -0,0 +1,5 @@ +pragma solidity 0.8.0; + +contract Test { + string public constant symbol = "TEST"; +} \ No newline at end of file diff --git a/toolchains/solidity/core/crates/linter-lib/testdata/SolidhunterIgnore/test/test2/test2.sol b/toolchains/solidity/core/crates/linter-lib/testdata/SolidhunterIgnore/test/test2/test2.sol new file mode 100644 index 00000000..7a9f640f --- /dev/null +++ b/toolchains/solidity/core/crates/linter-lib/testdata/SolidhunterIgnore/test/test2/test2.sol @@ -0,0 +1,5 @@ +pragma solidity 0.8.0; + +contract Test { + string public constant symbol = "TEST"; +} \ No newline at end of file diff --git a/toolchains/solidity/core/crates/linter-lib/tests/linter.rs b/toolchains/solidity/core/crates/linter-lib/tests/linter.rs index 2f79afe9..c7918769 100644 --- a/toolchains/solidity/core/crates/linter-lib/tests/linter.rs +++ b/toolchains/solidity/core/crates/linter-lib/tests/linter.rs @@ -19,7 +19,7 @@ fn test_directory(base_name: &str) { .join("testdata") .join(base_name), ) - .unwrap() + .unwrap() { let path = path.unwrap().path(); @@ -55,7 +55,6 @@ fn test_directory(base_name: &str) { fn test_linter(config: &str, source: &str, expected_findings: &Vec, ignore: &str) { let mut linter: SolidLinter = SolidLinter::new(); let _ = linter.initialize_rules(&String::from(config)); - //let _ = linter.initialize_excluded_files(&String::from(ignore)); let result = linter.parse_file(source.to_string()); let mut found_findings: Vec<&Finding> = Vec::new(); @@ -175,6 +174,34 @@ test_directories! { Ordering, PrivateVarsLeadingUnderscore, FoundryTestFunctions, - AvoidTxOrigin, - SolidhunterIgnore + AvoidTxOrigin } + +#[allow(non_snake_case)] +#[test] +fn SolidhunterIgnore() { + let path = PathBuf::from(env!("CARGO_MANIFEST_DIR")) + .join("testdata") + .join("SolidhunterIgnore"); + let mut linter: SolidLinter = SolidLinter::new(); + let _ = linter.initialize_rules(&String::from( + path.join(".solidhunter.json").to_str().unwrap(), + )); + println!( + "{:?} {:?}", + &String::from( + path.join(".solidhunter.json").to_str().unwrap(), + ), + path.to_str().unwrap() + ); + //let _ = linter.initialize_excluded_files( + // Some(&vec![]), + // &vec![path.to_str().unwrap().to_string()], + //); + + let result = linter.parse_path(path.to_str().unwrap()); + + for test in result { + println!("{:?}", test.unwrap()) + } +} \ No newline at end of file From bf11d09c3e38769baaf5ec617ef5ca1464601cfd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9o=20Maringer?= Date: Thu, 9 Nov 2023 14:30:23 +0000 Subject: [PATCH 12/15] feat(solidity/linter): test for solidhunterignore --- .../SolidhunterIgnore/.solidhunter.json | 8 +++---- .../SolidhunterIgnore/.solidhunterignore | 1 + .../test/test/.solidhunterignore | 2 +- .../core/crates/linter-lib/tests/linter.rs | 24 +++++++++---------- 4 files changed, 18 insertions(+), 17 deletions(-) diff --git a/toolchains/solidity/core/crates/linter-lib/testdata/SolidhunterIgnore/.solidhunter.json b/toolchains/solidity/core/crates/linter-lib/testdata/SolidhunterIgnore/.solidhunter.json index 96de8e57..6a555ad0 100644 --- a/toolchains/solidity/core/crates/linter-lib/testdata/SolidhunterIgnore/.solidhunter.json +++ b/toolchains/solidity/core/crates/linter-lib/testdata/SolidhunterIgnore/.solidhunter.json @@ -1,8 +1,8 @@ { "name": "solidhunter", "rules": [ - { - "id": "avoid-tx-origin", - "severity": "WARNING" - } + { + "id": "const-name-snakecase", + "severity": "WARNING" + } ] } \ No newline at end of file diff --git a/toolchains/solidity/core/crates/linter-lib/testdata/SolidhunterIgnore/.solidhunterignore b/toolchains/solidity/core/crates/linter-lib/testdata/SolidhunterIgnore/.solidhunterignore index e69de29b..03d0e9b8 100644 --- a/toolchains/solidity/core/crates/linter-lib/testdata/SolidhunterIgnore/.solidhunterignore +++ b/toolchains/solidity/core/crates/linter-lib/testdata/SolidhunterIgnore/.solidhunterignore @@ -0,0 +1 @@ +test/test.sol \ No newline at end of file diff --git a/toolchains/solidity/core/crates/linter-lib/testdata/SolidhunterIgnore/test/test/.solidhunterignore b/toolchains/solidity/core/crates/linter-lib/testdata/SolidhunterIgnore/test/test/.solidhunterignore index 6ebc0949..6a7b8139 100644 --- a/toolchains/solidity/core/crates/linter-lib/testdata/SolidhunterIgnore/test/test/.solidhunterignore +++ b/toolchains/solidity/core/crates/linter-lib/testdata/SolidhunterIgnore/test/test/.solidhunterignore @@ -1 +1 @@ -test2.sol +./test2.sol diff --git a/toolchains/solidity/core/crates/linter-lib/tests/linter.rs b/toolchains/solidity/core/crates/linter-lib/tests/linter.rs index c7918769..4d162021 100644 --- a/toolchains/solidity/core/crates/linter-lib/tests/linter.rs +++ b/toolchains/solidity/core/crates/linter-lib/tests/linter.rs @@ -187,21 +187,21 @@ fn SolidhunterIgnore() { let _ = linter.initialize_rules(&String::from( path.join(".solidhunter.json").to_str().unwrap(), )); - println!( - "{:?} {:?}", - &String::from( - path.join(".solidhunter.json").to_str().unwrap(), - ), - path.to_str().unwrap() + let _ = linter.initialize_excluded_files( + Some(&vec![]), + &vec![path.to_str().unwrap().to_string()], ); - //let _ = linter.initialize_excluded_files( - // Some(&vec![]), - // &vec![path.to_str().unwrap().to_string()], - //); let result = linter.parse_path(path.to_str().unwrap()); - for test in result { - println!("{:?}", test.unwrap()) + let mut diags_number = 0; + + for lint_result in result { + match lint_result { + Ok(lint_result) => diags_number += lint_result.diags.len(), + Err(e) => println!("{}", e) + } } + + assert_eq!(diags_number, 3, "Invalid number of diagnostics"); } \ No newline at end of file From a6cb9a08115936d5dadf536b486a08dc90b004f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9o=20Maringer?= Date: Thu, 9 Nov 2023 14:44:13 +0000 Subject: [PATCH 13/15] feat(solidity/linter): version --- toolchains/solidity/core/Cargo.toml | 4 ++-- toolchains/solidity/core/crates/linter-cli/Cargo.toml | 4 ++-- toolchains/solidity/core/crates/linter-lib/Cargo.toml | 2 +- toolchains/solidity/core/crates/linter-server/Cargo.toml | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/toolchains/solidity/core/Cargo.toml b/toolchains/solidity/core/Cargo.toml index 0f8f6933..23f0a5f8 100644 --- a/toolchains/solidity/core/Cargo.toml +++ b/toolchains/solidity/core/Cargo.toml @@ -16,6 +16,6 @@ rustdoc-args = ["--cfg", "docsrs"] [workspace.dependencies] # workspace crates extension = { version = "0.1.0", path = "crates/extension", default-features = false } -solidhunter = { version = "0.1.0", path = "crates/solidhunter", default-features = false } -linter-cli = { version = "0.1.0", path = "crates/linter-cli", default-features = false } +solidhunter = { version = "0.2.1", path = "crates/solidhunter", default-features = false } +linter-cli = { version = "0.2.0", path = "crates/linter-cli", default-features = false } linter-server = { version = "0.1.0", path = "crates/linter-server", default-features = false } \ No newline at end of file diff --git a/toolchains/solidity/core/crates/linter-cli/Cargo.toml b/toolchains/solidity/core/crates/linter-cli/Cargo.toml index f9d3501a..23d8805d 100644 --- a/toolchains/solidity/core/crates/linter-cli/Cargo.toml +++ b/toolchains/solidity/core/crates/linter-cli/Cargo.toml @@ -2,14 +2,14 @@ name = "solidhunter" description = "Fast solidity linter cli" repository = "https://github.com/astrodevs-labs/osmium" -version = "0.1.1" +version = "0.2.1" edition = "2021" license = "GPL-3.0-or-later" authors = ["AstroDevs-Labs"] # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -solidhunter-lib = { path = "../linter-lib", version = "0.1.0" } +solidhunter-lib = { path = "../linter-lib", version = "0.2.0" } clap = { version = "4.0.29", features = ["derive"] } colored = "2" serde = { version = "1.0.149", features = ["derive"] } diff --git a/toolchains/solidity/core/crates/linter-lib/Cargo.toml b/toolchains/solidity/core/crates/linter-lib/Cargo.toml index ec4349f3..e3468157 100644 --- a/toolchains/solidity/core/crates/linter-lib/Cargo.toml +++ b/toolchains/solidity/core/crates/linter-lib/Cargo.toml @@ -2,7 +2,7 @@ name = "solidhunter-lib" description = "Solidhunter/Osmium solidity linter library" repository = "https://github.com/astrodevs-labs/osmium" -version = "0.1.0" +version = "0.2.0" edition = "2021" authors = ["Astrodevs Labs"] license = "GPL-3.0-or-later" diff --git a/toolchains/solidity/core/crates/linter-server/Cargo.toml b/toolchains/solidity/core/crates/linter-server/Cargo.toml index 5158efd1..2aae3a68 100644 --- a/toolchains/solidity/core/crates/linter-server/Cargo.toml +++ b/toolchains/solidity/core/crates/linter-server/Cargo.toml @@ -11,5 +11,5 @@ crate-type = ["cdylib", "rlib"] [dependencies] osmium-libs-lsp-handler = { path = "../../../../../libs/lsp-handler", version = "0.0.3" } -solidhunter-lib = { path = "../linter-lib", version = "0.1.0" } +solidhunter-lib = { path = "../linter-lib", version = "0.2.0" } js-sys = "0.3.64" \ No newline at end of file From c2562733b2af197187eb5f57319dcb4bde5a79bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9o=20Maringer?= Date: Fri, 10 Nov 2023 17:38:26 +0000 Subject: [PATCH 14/15] feat(solidity/linter): fix linting and format --- toolchains/solidity/core/Cargo.lock | 4 ++-- .../core/crates/linter-cli/src/main.rs | 10 ++-------- .../core/crates/linter-lib/src/ignore.rs | 4 ++-- .../core/crates/linter-lib/src/linter.rs | 9 +++++++-- .../core/crates/linter-lib/tests/linter.rs | 19 +++++++------------ 5 files changed, 20 insertions(+), 26 deletions(-) diff --git a/toolchains/solidity/core/Cargo.lock b/toolchains/solidity/core/Cargo.lock index d88e5ff9..ed6b7f31 100644 --- a/toolchains/solidity/core/Cargo.lock +++ b/toolchains/solidity/core/Cargo.lock @@ -451,7 +451,7 @@ dependencies = [ [[package]] name = "solidhunter" -version = "0.1.1" +version = "0.2.1" dependencies = [ "clap", "colored", @@ -462,7 +462,7 @@ dependencies = [ [[package]] name = "solidhunter-lib" -version = "0.1.0" +version = "0.2.0" dependencies = [ "anyhow", "clap", diff --git a/toolchains/solidity/core/crates/linter-cli/src/main.rs b/toolchains/solidity/core/crates/linter-cli/src/main.rs index 79d18542..dd3f4281 100644 --- a/toolchains/solidity/core/crates/linter-cli/src/main.rs +++ b/toolchains/solidity/core/crates/linter-cli/src/main.rs @@ -7,9 +7,7 @@ use solidhunter_lib::types::LintResult; #[derive(Parser, Debug)] #[command(author, version, about, long_about = None)] struct Args { - #[arg( - help = "Paths to the projects to lint" - )] + #[arg(help = "Paths to the projects to lint")] paths: Vec, #[arg( @@ -44,11 +42,7 @@ struct Args { )] init: bool, - #[arg( - short = 'e', - long = "exclude", - help = "Specify excluded files", - )] + #[arg(short = 'e', long = "exclude", help = "Specify excluded files")] exclude: Option>, } diff --git a/toolchains/solidity/core/crates/linter-lib/src/ignore.rs b/toolchains/solidity/core/crates/linter-lib/src/ignore.rs index ab5aca66..7cdc8f02 100644 --- a/toolchains/solidity/core/crates/linter-lib/src/ignore.rs +++ b/toolchains/solidity/core/crates/linter-lib/src/ignore.rs @@ -34,7 +34,7 @@ fn get_solidhunterignore_paths(filepath: &String) -> Result, SolidHu if let Ok(entries) = glob(&format!("{}/**/.solidhunterignore", filepath)) { for entry in entries.flatten() { - ignored_files.push(entry.into_os_string().into_string().unwrap()) + ignored_files.push(entry.into_os_string().into_string().unwrap()) } } @@ -51,7 +51,7 @@ pub fn get_excluded_files(filepaths: &Vec) -> Result, SolidH continue; } - let solidhunterignore_paths = get_solidhunterignore_paths(&filepath)?; + let solidhunterignore_paths = get_solidhunterignore_paths(filepath)?; for solidhunterignore_path in solidhunterignore_paths { if let Ok(mut excluded) = parse_solihunterignore(&solidhunterignore_path) { diff --git a/toolchains/solidity/core/crates/linter-lib/src/linter.rs b/toolchains/solidity/core/crates/linter-lib/src/linter.rs index 8e842b72..da50f1f9 100644 --- a/toolchains/solidity/core/crates/linter-lib/src/linter.rs +++ b/toolchains/solidity/core/crates/linter-lib/src/linter.rs @@ -64,13 +64,18 @@ impl SolidLinter { Ok(()) } - pub fn initialize_excluded_files(&mut self, excluded_filepaths: Option<&Vec>, filepaths: &Vec) -> Result<(), SolidHunterError> { + pub fn initialize_excluded_files( + &mut self, + excluded_filepaths: Option<&Vec>, + filepaths: &Vec, + ) -> Result<(), SolidHunterError> { if let Some(excluded) = excluded_filepaths { for path in excluded { self.excluded_files.push(path.clone()) } } - self.excluded_files.append(&mut get_excluded_files(filepaths)?); + self.excluded_files + .append(&mut get_excluded_files(filepaths)?); Ok(()) } diff --git a/toolchains/solidity/core/crates/linter-lib/tests/linter.rs b/toolchains/solidity/core/crates/linter-lib/tests/linter.rs index 4d162021..05bf0d4e 100644 --- a/toolchains/solidity/core/crates/linter-lib/tests/linter.rs +++ b/toolchains/solidity/core/crates/linter-lib/tests/linter.rs @@ -11,7 +11,6 @@ struct Finding { fn test_directory(base_name: &str) { let mut source = String::new(); let mut config = String::new(); - let mut ignore = String::new(); let mut expected_findings: Vec = Vec::new(); for path in fs::read_dir( @@ -19,7 +18,7 @@ fn test_directory(base_name: &str) { .join("testdata") .join(base_name), ) - .unwrap() + .unwrap() { let path = path.unwrap().path(); @@ -28,8 +27,6 @@ fn test_directory(base_name: &str) { source = path.to_str().unwrap().to_string(); } else if filename == ".solidhunter.json" { config = path.to_str().unwrap().to_string(); - } else if filename == ".solidhunterignore" { - ignore = path.to_str().unwrap().to_string(); } else if filename == "findings.csv" { for line in fs::read_to_string(path).unwrap().lines() { let splitted_line: Vec<&str> = line.split(':').collect(); @@ -49,10 +46,10 @@ fn test_directory(base_name: &str) { } } - test_linter(&config, &source, &expected_findings, &ignore); + test_linter(&config, &source, &expected_findings); } -fn test_linter(config: &str, source: &str, expected_findings: &Vec, ignore: &str) { +fn test_linter(config: &str, source: &str, expected_findings: &Vec) { let mut linter: SolidLinter = SolidLinter::new(); let _ = linter.initialize_rules(&String::from(config)); @@ -187,10 +184,8 @@ fn SolidhunterIgnore() { let _ = linter.initialize_rules(&String::from( path.join(".solidhunter.json").to_str().unwrap(), )); - let _ = linter.initialize_excluded_files( - Some(&vec![]), - &vec![path.to_str().unwrap().to_string()], - ); + let _ = + linter.initialize_excluded_files(Some(&vec![]), &vec![path.to_str().unwrap().to_string()]); let result = linter.parse_path(path.to_str().unwrap()); @@ -199,9 +194,9 @@ fn SolidhunterIgnore() { for lint_result in result { match lint_result { Ok(lint_result) => diags_number += lint_result.diags.len(), - Err(e) => println!("{}", e) + Err(e) => println!("{}", e), } } assert_eq!(diags_number, 3, "Invalid number of diagnostics"); -} \ No newline at end of file +} From e701300d9b30ea3ff7bc43eb64d11342e9b24637 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9o=20Maringer?= Date: Fri, 10 Nov 2023 17:41:59 +0000 Subject: [PATCH 15/15] feat(solidity/linter): change linter-server crate version --- toolchains/solidity/core/Cargo.lock | 2 +- toolchains/solidity/core/crates/linter-server/Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/toolchains/solidity/core/Cargo.lock b/toolchains/solidity/core/Cargo.lock index ed6b7f31..cfe81d74 100644 --- a/toolchains/solidity/core/Cargo.lock +++ b/toolchains/solidity/core/Cargo.lock @@ -243,7 +243,7 @@ checksum = "a08173bc88b7955d1b3145aa561539096c421ac8debde8cbc3612ec635fee29b" [[package]] name = "linter-server" -version = "0.0.2" +version = "0.1.2" dependencies = [ "js-sys", "osmium-libs-lsp-handler", diff --git a/toolchains/solidity/core/crates/linter-server/Cargo.toml b/toolchains/solidity/core/crates/linter-server/Cargo.toml index 2aae3a68..91e79196 100644 --- a/toolchains/solidity/core/crates/linter-server/Cargo.toml +++ b/toolchains/solidity/core/crates/linter-server/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "linter-server" license = "GPL-3.0-or-later" -version = "0.0.2" +version = "0.1.2" edition = "2021" [lib]