diff --git a/toolchains/solidity/linter/core/solidhunter-lib/src/rules/naming/foundry_func_name.rs b/toolchains/solidity/linter/core/solidhunter-lib/src/rules/naming/foundry_func_name.rs index 6414b48b..dab6458b 100644 --- a/toolchains/solidity/linter/core/solidhunter-lib/src/rules/naming/foundry_func_name.rs +++ b/toolchains/solidity/linter/core/solidhunter-lib/src/rules/naming/foundry_func_name.rs @@ -51,6 +51,15 @@ impl RuleType for FoundryFuncName { for contract in contracts { for function in ast_extractor::retriever::retrieve_functions_nodes(&contract) { + let visibility = function.attributes.iter().find(|attr| matches!(attr, ast_extractor::FunctionAttribute::Visibility(_))); + let visibility = match visibility { + Some(ast_extractor::FunctionAttribute::Visibility(visibility)) => visibility, + _ => continue, + }; + + if !matches!(visibility, ast_extractor::Visibility::Public(_)) && !matches!(visibility, ast_extractor::Visibility::External(_)) { + continue; + } if let Some(name) = function.name { if !re.is_match(&name.as_string()) && !self.excluded.contains(&name.as_string()) { let span = name.span(); diff --git a/toolchains/solidity/linter/core/solidhunter-lib/testdata/FoundryFunctionName/file.t.sol b/toolchains/solidity/linter/core/solidhunter-lib/testdata/FoundryFunctionName/file.t.sol index 564fbef3..e35de6ca 100644 --- a/toolchains/solidity/linter/core/solidhunter-lib/testdata/FoundryFunctionName/file.t.sol +++ b/toolchains/solidity/linter/core/solidhunter-lib/testdata/FoundryFunctionName/file.t.sol @@ -1,6 +1,8 @@ pragma solidity 0.8.0; contract Test { + function testFail_Add42() external {} // should pass + function test_NumberIs42() public {} // should pass function testFail_Subtract43() public {} // should pass @@ -8,4 +10,8 @@ contract Test { function testFuzz_FuzzyTest() public {} // should pass function numberIs42() public {} // should fail + + function YoloNamingBecauseSkipped() internal {} // should pass + + function YoloNamingBacausePrivate() private {} // should pass }