diff --git a/contracts/governance/Governor.sol b/contracts/governance/Governor.sol index a0a99ae29ab..d1c1b21e8c7 100644 --- a/contracts/governance/Governor.sol +++ b/contracts/governance/Governor.sol @@ -792,7 +792,7 @@ abstract contract Governor is Context, ERC165, EIP712, Nonces, IGovernor, IERC72 /// @inheritdoc IERC6372 // solhint-disable-next-line func-name-mixedcase - function CLOCK_MODE() public view virtual returns (string memory); + function CLOCK_MODE() public view virtual returns (string memory); // slippy-disable-line naming-convention /// @inheritdoc IGovernor function votingDelay() public view virtual returns (uint256); diff --git a/contracts/governance/IGovernor.sol b/contracts/governance/IGovernor.sol index 2afa913394c..578db2684af 100644 --- a/contracts/governance/IGovernor.sol +++ b/contracts/governance/IGovernor.sol @@ -199,7 +199,7 @@ interface IGovernor is IERC165, IERC6372 { * JavaScript class. */ // solhint-disable-next-line func-name-mixedcase - function COUNTING_MODE() external view returns (string memory); + function COUNTING_MODE() external view returns (string memory); // slippy-disable-line naming-convention /** * @notice module:core diff --git a/contracts/governance/extensions/GovernorCountingFractional.sol b/contracts/governance/extensions/GovernorCountingFractional.sol index 1460d2ddef7..42ce846a1bc 100644 --- a/contracts/governance/extensions/GovernorCountingFractional.sol +++ b/contracts/governance/extensions/GovernorCountingFractional.sol @@ -56,6 +56,7 @@ abstract contract GovernorCountingFractional is Governor { /// @inheritdoc IGovernor // solhint-disable-next-line func-name-mixedcase function COUNTING_MODE() public pure virtual override returns (string memory) { + // slippy-disable-previous-line naming-convention return "support=bravo,fractional&quorum=for,abstain¶ms=fractional"; } diff --git a/contracts/governance/extensions/GovernorCountingOverridable.sol b/contracts/governance/extensions/GovernorCountingOverridable.sol index 45a72ea780c..b490632960c 100644 --- a/contracts/governance/extensions/GovernorCountingOverridable.sol +++ b/contracts/governance/extensions/GovernorCountingOverridable.sol @@ -50,6 +50,7 @@ abstract contract GovernorCountingOverridable is GovernorVotes { /// @inheritdoc IGovernor // solhint-disable-next-line func-name-mixedcase function COUNTING_MODE() public pure virtual override returns (string memory) { + // slippy-disable-previous-line naming-convention return "support=bravo,override&quorum=for,abstain&overridable=true"; } diff --git a/contracts/governance/extensions/GovernorCountingSimple.sol b/contracts/governance/extensions/GovernorCountingSimple.sol index 3f24a657cee..11b2d94a643 100644 --- a/contracts/governance/extensions/GovernorCountingSimple.sol +++ b/contracts/governance/extensions/GovernorCountingSimple.sol @@ -30,6 +30,7 @@ abstract contract GovernorCountingSimple is Governor { /// @inheritdoc IGovernor // solhint-disable-next-line func-name-mixedcase function COUNTING_MODE() public pure virtual override returns (string memory) { + // slippy-disable-previous-line naming-convention return "support=bravo&quorum=for,abstain"; } diff --git a/contracts/governance/extensions/GovernorVotes.sol b/contracts/governance/extensions/GovernorVotes.sol index 4ad5870a448..da8801dcd20 100644 --- a/contracts/governance/extensions/GovernorVotes.sol +++ b/contracts/governance/extensions/GovernorVotes.sol @@ -43,6 +43,7 @@ abstract contract GovernorVotes is Governor { */ // solhint-disable-next-line func-name-mixedcase function CLOCK_MODE() public view virtual override returns (string memory) { + // slippy-disable-previous-line naming-convention try token().CLOCK_MODE() returns (string memory clockmode) { return clockmode; } catch { diff --git a/contracts/governance/utils/Votes.sol b/contracts/governance/utils/Votes.sol index 02c68d028c0..1cab1c2721e 100644 --- a/contracts/governance/utils/Votes.sol +++ b/contracts/governance/utils/Votes.sol @@ -64,6 +64,7 @@ abstract contract Votes is Context, EIP712, Nonces, IERC5805 { */ // solhint-disable-next-line func-name-mixedcase function CLOCK_MODE() public view virtual returns (string memory) { + // slippy-disable-previous-line naming-convention // Check that the clock was not modified if (clock() != Time.blockNumber()) { revert ERC6372InconsistentClock(); diff --git a/contracts/interfaces/IERC6372.sol b/contracts/interfaces/IERC6372.sol index 447a8ea33a9..5210ba58ed0 100644 --- a/contracts/interfaces/IERC6372.sol +++ b/contracts/interfaces/IERC6372.sol @@ -13,5 +13,5 @@ interface IERC6372 { * @dev Description of the clock */ // solhint-disable-next-line func-name-mixedcase - function CLOCK_MODE() external view returns (string memory); + function CLOCK_MODE() external view returns (string memory); // slippy-disable-line naming-convention } diff --git a/contracts/mocks/MultipleInheritanceInitializableMocks.sol b/contracts/mocks/MultipleInheritanceInitializableMocks.sol index 51030acd68a..8f2c127ebd1 100644 --- a/contracts/mocks/MultipleInheritanceInitializableMocks.sol +++ b/contracts/mocks/MultipleInheritanceInitializableMocks.sol @@ -27,11 +27,13 @@ contract SampleHuman is Initializable { // solhint-disable-next-line func-name-mixedcase function __SampleHuman_init() internal onlyInitializing { + // slippy-disable-previous-line naming-convention __SampleHuman_init_unchained(); } // solhint-disable-next-line func-name-mixedcase function __SampleHuman_init_unchained() internal onlyInitializing { + // slippy-disable-previous-line naming-convention isHuman = true; } } @@ -48,12 +50,14 @@ contract SampleMother is Initializable, SampleHuman { // solhint-disable-next-line func-name-mixedcase function __SampleMother_init(uint256 value) internal onlyInitializing { + // slippy-disable-previous-line naming-convention __SampleHuman_init(); __SampleMother_init_unchained(value); } // solhint-disable-next-line func-name-mixedcase function __SampleMother_init_unchained(uint256 value) internal onlyInitializing { + // slippy-disable-previous-line naming-convention mother = value; } } @@ -70,12 +74,14 @@ contract SampleGramps is Initializable, SampleHuman { // solhint-disable-next-line func-name-mixedcase function __SampleGramps_init(string memory value) internal onlyInitializing { + // slippy-disable-previous-line naming-convention __SampleHuman_init(); __SampleGramps_init_unchained(value); } // solhint-disable-next-line func-name-mixedcase function __SampleGramps_init_unchained(string memory value) internal onlyInitializing { + // slippy-disable-previous-line naming-convention gramps = value; } } @@ -92,12 +98,14 @@ contract SampleFather is Initializable, SampleGramps { // solhint-disable-next-line func-name-mixedcase function __SampleFather_init(string memory _gramps, uint256 _father) internal onlyInitializing { + // slippy-disable-previous-line naming-convention __SampleGramps_init(_gramps); __SampleFather_init_unchained(_father); } // solhint-disable-next-line func-name-mixedcase function __SampleFather_init_unchained(uint256 _father) internal onlyInitializing { + // slippy-disable-previous-line naming-convention father = _father; } } @@ -114,6 +122,7 @@ contract SampleChild is Initializable, SampleMother, SampleFather { // solhint-disable-next-line func-name-mixedcase function __SampleChild_init( + // slippy-disable-previous-line naming-convention uint256 _mother, string memory _gramps, uint256 _father, @@ -126,6 +135,7 @@ contract SampleChild is Initializable, SampleMother, SampleFather { // solhint-disable-next-line func-name-mixedcase function __SampleChild_init_unchained(uint256 _child) internal onlyInitializing { + // slippy-disable-previous-line naming-convention child = _child; } } diff --git a/contracts/mocks/Stateless.sol b/contracts/mocks/Stateless.sol index 0b74c9a0ee3..c0d14031ac4 100644 --- a/contracts/mocks/Stateless.sol +++ b/contracts/mocks/Stateless.sol @@ -2,6 +2,7 @@ pragma solidity ^0.8.26; +// slippy-disable no-unused-vars // We keep these imports and a dummy contract just to we can run the test suite after transpilation. import {Accumulators} from "../utils/structs/Accumulators.sol"; diff --git a/contracts/mocks/VotesExtendedMock.sol b/contracts/mocks/VotesExtendedMock.sol index e9c11da5492..ad669b20848 100644 --- a/contracts/mocks/VotesExtendedMock.sol +++ b/contracts/mocks/VotesExtendedMock.sol @@ -37,6 +37,7 @@ abstract contract VotesExtendedTimestampMock is VotesExtendedMock { // solhint-disable-next-line func-name-mixedcase function CLOCK_MODE() public view virtual override returns (string memory) { + // slippy-disable-previous-line naming-convention return "mode=timestamp"; } } diff --git a/contracts/mocks/VotesMock.sol b/contracts/mocks/VotesMock.sol index afef5ab7cf0..95643be451a 100644 --- a/contracts/mocks/VotesMock.sol +++ b/contracts/mocks/VotesMock.sol @@ -37,6 +37,7 @@ abstract contract VotesTimestampMock is VotesMock { // solhint-disable-next-line func-name-mixedcase function CLOCK_MODE() public view virtual override returns (string memory) { + // slippy-disable-previous-line naming-convention return "mode=timestamp"; } } diff --git a/contracts/mocks/account/modules/ERC7579Mock.sol b/contracts/mocks/account/modules/ERC7579Mock.sol index 41083186cb2..3b936ee210e 100644 --- a/contracts/mocks/account/modules/ERC7579Mock.sol +++ b/contracts/mocks/account/modules/ERC7579Mock.sol @@ -77,7 +77,7 @@ abstract contract ERC7579FallbackHandlerMock is ERC7579ModuleMock(MODULE_TYPE_FA emit ERC7579FallbackHandlerMockCalled(_msgAccount(), _msgSender(), msg.value, _msgData()); } - function callView() public view returns (address, address) { + function callView() public view returns (address account, address sender) { return (_msgAccount(), _msgSender()); } diff --git a/contracts/mocks/docs/governance/MyTokenTimestampBased.sol b/contracts/mocks/docs/governance/MyTokenTimestampBased.sol index 60f206414c5..1c5eac77f61 100644 --- a/contracts/mocks/docs/governance/MyTokenTimestampBased.sol +++ b/contracts/mocks/docs/governance/MyTokenTimestampBased.sol @@ -17,6 +17,7 @@ contract MyTokenTimestampBased is ERC20, ERC20Permit, ERC20Votes { // solhint-disable-next-line func-name-mixedcase function CLOCK_MODE() public pure override returns (string memory) { + // slippy-disable-previous-line naming-convention return "mode=timestamp"; } diff --git a/contracts/mocks/token/ERC20VotesAdditionalCheckpointsMock.sol b/contracts/mocks/token/ERC20VotesAdditionalCheckpointsMock.sol index e965b17bd87..c363a85c5fc 100644 --- a/contracts/mocks/token/ERC20VotesAdditionalCheckpointsMock.sol +++ b/contracts/mocks/token/ERC20VotesAdditionalCheckpointsMock.sol @@ -26,6 +26,7 @@ abstract contract ERC20VotesExtendedTimestampMock is ERC20VotesExtendedMock { // solhint-disable-next-line func-name-mixedcase function CLOCK_MODE() public view virtual override returns (string memory) { + // slippy-disable-previous-line naming-convention return "mode=timestamp"; } } diff --git a/contracts/mocks/token/ERC20VotesTimestampMock.sol b/contracts/mocks/token/ERC20VotesTimestampMock.sol index bebdef82184..549bc20e521 100644 --- a/contracts/mocks/token/ERC20VotesTimestampMock.sol +++ b/contracts/mocks/token/ERC20VotesTimestampMock.sol @@ -13,6 +13,7 @@ abstract contract ERC20VotesTimestampMock is ERC20Votes { // solhint-disable-next-line func-name-mixedcase function CLOCK_MODE() public view virtual override returns (string memory) { + // slippy-disable-previous-line naming-convention return "mode=timestamp"; } } @@ -24,6 +25,7 @@ abstract contract ERC721VotesTimestampMock is ERC721Votes { // solhint-disable-next-line func-name-mixedcase function CLOCK_MODE() public view virtual override returns (string memory) { + // slippy-disable-previous-line naming-convention return "mode=timestamp"; } } diff --git a/contracts/proxy/utils/UUPSUpgradeable.sol b/contracts/proxy/utils/UUPSUpgradeable.sol index 2a88b021156..1e7a283382c 100644 --- a/contracts/proxy/utils/UUPSUpgradeable.sol +++ b/contracts/proxy/utils/UUPSUpgradeable.sol @@ -20,7 +20,7 @@ import {ERC1967Utils} from "../ERC1967/ERC1967Utils.sol"; */ abstract contract UUPSUpgradeable is IERC1822Proxiable { /// @custom:oz-upgrades-unsafe-allow state-variable-immutable - address private immutable __self = address(this); + address private immutable __self = address(this); // slippy-disable-line naming-convention /** * @dev The version of the upgrade interface of the contract. If this getter is missing, both `upgradeTo(address)` diff --git a/contracts/token/ERC20/extensions/ERC20Permit.sol b/contracts/token/ERC20/extensions/ERC20Permit.sol index b89df28be9e..0c29abbfb7c 100644 --- a/contracts/token/ERC20/extensions/ERC20Permit.sol +++ b/contracts/token/ERC20/extensions/ERC20Permit.sol @@ -72,6 +72,7 @@ abstract contract ERC20Permit is ERC20, IERC20Permit, EIP712, Nonces { /// @inheritdoc IERC20Permit // solhint-disable-next-line func-name-mixedcase function DOMAIN_SEPARATOR() external view returns (bytes32) { + // slippy-disable-previous-line naming-convention return _domainSeparatorV4(); } } diff --git a/contracts/token/ERC20/extensions/IERC20Permit.sol b/contracts/token/ERC20/extensions/IERC20Permit.sol index ae388b8de81..6fb7f00f2c6 100644 --- a/contracts/token/ERC20/extensions/IERC20Permit.sol +++ b/contracts/token/ERC20/extensions/IERC20Permit.sol @@ -86,5 +86,5 @@ interface IERC20Permit { * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}. */ // solhint-disable-next-line func-name-mixedcase - function DOMAIN_SEPARATOR() external view returns (bytes32); + function DOMAIN_SEPARATOR() external view returns (bytes32); // slippy-disable-line naming-convention } diff --git a/contracts/utils/Packing.sol b/contracts/utils/Packing.sol index f7c5d6fcc3c..474d4014b3e 100644 --- a/contracts/utils/Packing.sol +++ b/contracts/utils/Packing.sol @@ -33,6 +33,7 @@ pragma solidity ^0.8.20; * _Available since v5.1._ */ // solhint-disable func-name-mixedcase +// slippy-disable naming-convention library Packing { error OutOfRangeAccess(); diff --git a/contracts/utils/cryptography/EIP712.sol b/contracts/utils/cryptography/EIP712.sol index 0eaef9d27e0..516aa552b4c 100644 --- a/contracts/utils/cryptography/EIP712.sol +++ b/contracts/utils/cryptography/EIP712.sol @@ -144,6 +144,7 @@ abstract contract EIP712 is IERC5267 { */ // solhint-disable-next-line func-name-mixedcase function _EIP712Name() internal view returns (string memory) { + // slippy-disable-previous-line naming-convention return _name.toStringWithFallback(_nameFallback); } @@ -155,6 +156,7 @@ abstract contract EIP712 is IERC5267 { */ // solhint-disable-next-line func-name-mixedcase function _EIP712Version() internal view returns (string memory) { + // slippy-disable-previous-line naming-convention return _version.toStringWithFallback(_versionFallback); } } diff --git a/contracts/vendor/compound/ICompoundTimelock.sol b/contracts/vendor/compound/ICompoundTimelock.sol index 84cd62ed12c..67f6ca31e16 100644 --- a/contracts/vendor/compound/ICompoundTimelock.sol +++ b/contracts/vendor/compound/ICompoundTimelock.sol @@ -38,13 +38,13 @@ interface ICompoundTimelock { receive() external payable; // solhint-disable-next-line func-name-mixedcase - function GRACE_PERIOD() external view returns (uint256); + function GRACE_PERIOD() external view returns (uint256); // slippy-disable-line naming-convention // solhint-disable-next-line func-name-mixedcase - function MINIMUM_DELAY() external view returns (uint256); + function MINIMUM_DELAY() external view returns (uint256); // slippy-disable-line naming-convention // solhint-disable-next-line func-name-mixedcase - function MAXIMUM_DELAY() external view returns (uint256); + function MAXIMUM_DELAY() external view returns (uint256); // slippy-disable-line naming-convention function admin() external view returns (address); diff --git a/package-lock.json b/package-lock.json index ac6c165a06b..cb85cdbf2b8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21,6 +21,7 @@ "@openzeppelin/merkle-tree": "^1.0.7", "@openzeppelin/upgrade-safe-transpiler": "^0.4.1", "@openzeppelin/upgrades-core": "^1.20.6", + "@slippy-lint/slippy": "^0.1.2", "chai": "^4.2.0", "eslint": "^9.0.0", "eslint-config-prettier": "^10.0.0", @@ -2364,6 +2365,73 @@ "url": "https://github.com/sindresorhus/is?sponsor=1" } }, + "node_modules/@slippy-lint/slippy": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@slippy-lint/slippy/-/slippy-0.1.2.tgz", + "integrity": "sha512-TC5E6eMXwPr09tp2KFlwhxulWeu7QelA6fGx3I3JHgYgcppXMjCad8NlEi71UEWnQVDtHy2+ebLL9sBoZa8SsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nomicfoundation/slang": "^1.2.1", + "chalk": "^5.4.1", + "fast-glob": "^3.3.3", + "micromatch": "^4.0.8", + "minimist": "^1.2.8", + "semver": "^7.7.2", + "workerpool": "^9.3.3", + "zod": "^4.0.10" + }, + "bin": { + "slippy": "dist/cli/cli.js" + } + }, + "node_modules/@slippy-lint/slippy/node_modules/@bytecodealliance/preview2-shim": { + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/@bytecodealliance/preview2-shim/-/preview2-shim-0.17.2.tgz", + "integrity": "sha512-mNm/lblgES8UkVle8rGImXOz4TtL3eU3inHay/7TVchkKrb/lgcVvTK0+VAw8p5zQ0rgQsXm1j5dOlAAd+MeoA==", + "dev": true, + "license": "(Apache-2.0 WITH LLVM-exception)" + }, + "node_modules/@slippy-lint/slippy/node_modules/@nomicfoundation/slang": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/slang/-/slang-1.2.1.tgz", + "integrity": "sha512-XQirzqDGxMnhOZtGPRLdc1F6UymU0N/lhXUcWsf6bqy29Pq+g6ougvbSTTCTXjgWXjBp6zQ1gaJmzWmMBvMgOw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@bytecodealliance/preview2-shim": "0.17.2" + } + }, + "node_modules/@slippy-lint/slippy/node_modules/chalk": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.0.tgz", + "integrity": "sha512-46QrSQFyVSEyYAgQ22hQ+zDa60YHA4fBstHmtSApj1Y5vKtG27fWowW03jCk5KcbXEWPZUIR894aARCA/G1kfQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@slippy-lint/slippy/node_modules/workerpool": { + "version": "9.3.3", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-9.3.3.tgz", + "integrity": "sha512-slxCaKbYjEdFT/o2rH9xS1hf4uRDch1w7Uo+apxhZ+sf/1d9e0ZVkn42kPNGP2dgjIx6YFvSevj0zHvbWe2jdw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/@slippy-lint/slippy/node_modules/zod": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.1.5.tgz", + "integrity": "sha512-rcUUZqlLJgBC33IT3PNMgsCq6TzLQEG/Ei/KTCU0PedSWRMAXoOUN+4t/0H+Q8bdnLPdqUYnvboJT0bn/229qg==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, "node_modules/@solidity-parser/parser": { "version": "0.19.0", "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.19.0.tgz", @@ -9129,9 +9197,9 @@ "license": "MIT" }, "node_modules/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "dev": true, "license": "ISC", "bin": { diff --git a/package.json b/package.json index c01775bd963..dbe1e467fa8 100644 --- a/package.json +++ b/package.json @@ -64,6 +64,7 @@ "@openzeppelin/merkle-tree": "^1.0.7", "@openzeppelin/upgrade-safe-transpiler": "^0.4.1", "@openzeppelin/upgrades-core": "^1.20.6", + "@slippy-lint/slippy": "^0.1.2", "chai": "^4.2.0", "eslint": "^9.0.0", "eslint-config-prettier": "^10.0.0", diff --git a/scripts/generate/templates/Packing.js b/scripts/generate/templates/Packing.js index 9f3b7716a6a..8f7fbd50983 100644 --- a/scripts/generate/templates/Packing.js +++ b/scripts/generate/templates/Packing.js @@ -36,6 +36,7 @@ pragma solidity ^0.8.20; * _Available since v5.1._ */ // solhint-disable func-name-mixedcase +// slippy-disable naming-convention `; const errors = `\ diff --git a/slippy.config.js b/slippy.config.js new file mode 100644 index 00000000000..b4422aa38c0 --- /dev/null +++ b/slippy.config.js @@ -0,0 +1,122 @@ +const namingConventionCommon = [ + { + selector: 'variableLike', + format: ['camelCase'], + leadingUnderscore: 'allowSingleOrDouble', + trailingUnderscore: 'allow', + }, + { + selector: 'typeLike', + format: ['PascalCase'], + }, + { + selector: 'stateVariable', + format: ['UPPER_CASE'], + modifiers: ['constant'], + leadingUnderscore: 'allow', + }, + // interface should start with I + { + selector: 'interface', + format: ['PascalCase'], + custom: { + match: true, + regex: '^I[A-Z]', + }, + }, +]; + +const namingConventionSources = [ + ...namingConventionCommon, + // constant and private state variables should not have a leading underscore + { + selector: 'stateVariable', + format: ['camelCase', 'UPPER_CASE'], + modifiers: ['private', 'constant'], + leadingUnderscore: 'forbid', + }, + // non-constant private state variables should have a leading underscore + { + selector: 'stateVariable', + format: ['camelCase', 'UPPER_CASE'], + modifiers: ['private'], + leadingUnderscore: 'require', + }, + // private functions and non-library internal functions should have a leading underscore + { + selector: 'function', + modifiers: ['private'], + format: ['camelCase'], + leadingUnderscore: 'require', + }, + { + selector: 'function', + modifiers: ['internal'], + format: ['camelCase'], + leadingUnderscore: 'require', + }, + // library internal functions should not have a leading underscore + { + selector: 'function', + modifiers: ['internal', 'library'], + format: ['camelCase'], + leadingUnderscore: 'forbid', + }, +]; + +const namingConventionTests = [ + ...namingConventionCommon, + // allow snake_case in tests + { + selector: 'function', + format: ['camelCase', 'snake_case'], + leadingUnderscore: 'allow', + }, +]; + +module.exports = [ + { + rules: { + 'compatible-pragma': 'error', + curly: 'off', + 'explicit-types': 'error', + 'id-denylist': 'error', + 'imports-on-top': 'error', + 'max-state-vars': 'error', + 'named-return-params': 'error', + 'naming-convention': ['error', namingConventionCommon], + 'no-console': 'error', + 'no-default-visibility': 'off', + 'no-duplicate-imports': 'error', + 'no-empty-blocks': 'off', + 'no-global-imports': 'error', + 'no-restricted-syntax': 'off', + 'no-send': 'error', + 'no-tx-origin': 'error', + 'no-unchecked-calls': 'error', + 'no-uninitialized-immutable-references': 'error', + 'no-unused-vars': 'error', + 'one-contract-per-file': 'off', + 'private-vars': 'off', + 'require-revert-reason': 'off', + 'sort-imports': 'off', + 'sort-members': 'off', + 'sort-modifiers': 'error', + }, + }, + { + ignores: ['contracts/mocks/**/*', 'test/**/*'], + rules: { + 'naming-convention': ['error', namingConventionSources], + 'no-default-visibility': 'error', + 'private-vars': 'error', + 'require-revert-reason': 'error', + }, + }, + { + files: ['test/**/*'], + rules: { + 'naming-convention': ['error', namingConventionTests], + }, + }, +]; diff --git a/test/account/utils/draft-ERC7579Utils.t.sol b/test/account/utils/draft-ERC7579Utils.t.sol index bd7b9ad826e..deb79c541d3 100644 --- a/test/account/utils/draft-ERC7579Utils.t.sol +++ b/test/account/utils/draft-ERC7579Utils.t.sol @@ -5,6 +5,7 @@ pragma solidity ^0.8.24; // https://github.com/adamegyed/erc7579-execute-vulnerability/tree/4589a30ff139e143d6c57183ac62b5c029217a90 // // solhint-disable no-console +// slippy-disable no-console import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol"; import {ECDSA} from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; diff --git a/test/governance/Governor.t.sol b/test/governance/Governor.t.sol index 66b684d26e4..6ffbe81c6d4 100644 --- a/test/governance/Governor.t.sol +++ b/test/governance/Governor.t.sol @@ -36,10 +36,10 @@ contract GovernorInternalTest is Test, Governor { function clock() public pure override returns (uint48) {} // solhint-disable-next-line func-name-mixedcase - function CLOCK_MODE() public pure override returns (string memory) {} + function CLOCK_MODE() public pure override returns (string memory) {} // slippy-disable-line naming-convention // solhint-disable-next-line func-name-mixedcase - function COUNTING_MODE() public pure virtual override returns (string memory) {} + function COUNTING_MODE() public pure virtual override returns (string memory) {} // slippy-disable-line naming-convention function votingDelay() public pure virtual override returns (uint256) {} diff --git a/test/governance/extensions/GovernorSuperQuorumGreaterThanQuorum.t.sol b/test/governance/extensions/GovernorSuperQuorumGreaterThanQuorum.t.sol index 25fd846830d..2236f3bb1a4 100644 --- a/test/governance/extensions/GovernorSuperQuorumGreaterThanQuorum.t.sol +++ b/test/governance/extensions/GovernorSuperQuorumGreaterThanQuorum.t.sol @@ -44,11 +44,13 @@ contract GovernorHandler is GovernorVotesSuperQuorumFractionMock { // solhint-disable-next-line func-name-mixedcase function $_updateSuperQuorumNumerator(uint256 newSuperQuorumNumerator) public { + // slippy-disable-previous-line naming-convention _updateSuperQuorumNumerator(newSuperQuorumNumerator); } // solhint-disable-next-line func-name-mixedcase function $_updateQuorumNumerator(uint256 newQuorumNumerator) public { + // slippy-disable-previous-line naming-convention _updateQuorumNumerator(newQuorumNumerator); } } @@ -78,6 +80,7 @@ contract GovernorSuperQuorumGreaterThanQuorum is Test { // solhint-disable-next-line func-name-mixedcase function invariant_superQuorumGreaterThanQuorum() external view { + // slippy-disable-previous-line naming-convention assertGe(_governorHandler.superQuorumNumerator(), _governorHandler.quorumNumerator()); } }