Expand description
§Linter (lint)
Solidity linter for identifying potential errors, vulnerabilities, gas optimizations, and style guide violations. It helps enforce best practices and improve code quality within Foundry projects.
§Supported Lints
forge-lint includes rules across several categories:
- High Severity:
incorrect-shift: Warns against shift operations where operands might be in the wrong order.
- Medium Severity:
divide-before-multiply: Warns against performing division before multiplication in the same expression, which can cause precision loss.
- Informational / Style Guide:
pascal-case-struct: Flags for struct names not adhering toPascalCase.mixed-case-function: Flags for function names not adhering tomixedCase.mixed-case-variable: Flags for mutable variable names not adhering tomixedCase.screaming-snake-case-const: Flags forconstantvariable names not adhering toSCREAMING_SNAKE_CASE.screaming-snake-case-immutable: Flags forimmutablevariable names not adhering toSCREAMING_SNAKE_CASE.
- Gas Optimizations:
asm-keccak256: Recommends using inline assembly forkeccak256for potential gas savings.
§Configuration
The behavior of the SolidityLinter can be customized with the following options:
| Option | Default | Description |
|---|---|---|
with_severity | None | Filters active lints by their severity (High, Med, Low, Info, Gas). None means all severities. |
with_lints | None | Specifies a list of SolLint instances to include. Overrides severity filter if a lint matches. |
without_lints | None | Specifies a list of SolLint instances to exclude, even if they match other criteria. |
with_description | true | Whether to include the lint’s description in the diagnostic output. |
with_json_emitter | false | If true, diagnostics are output in rustc-compatible JSON format; otherwise, human-readable text. |
§Contributing
Check out the foundry contribution guide.
Guidelines for contributing to forge lint:
§Opening an issue
- Create a short concise title describing an issue.
- Bad Title Examples
Forge lint does not work Forge lint breaks Forge lint unexpected behavior - Good Title Examples
Forge lint does not flag incorrect shift operations
- Bad Title Examples
- Fill in the issue template fields that include foundry version, platform & component info.
- Provide the code snippets showing the current & expected behaviors.
- If it’s a feature request, specify why this feature is needed.
- Besides the default label (
T-Bugfor bugs orT-featurefor features), addC-forgeandCmd-forge-fmtlabels.
§Fixing A Bug
- Specify an issue that is being addressed in the PR description.
- Add a note on the solution in the PR description.
- Add a test case to
lint/testdatathat specifically demonstrates the bug and is fixed by your changes. Ensure all tests pass.
§Developing a New Lint Rule
Check the dev docs for a full implementation guide.
Modules§
Macros§
- declare_
forge_ lint - Macro for defining lints and relevant metadata for the Solidity linter.
- register_
lints - Registers Solidity linter passes that can have both early and late variants.