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 forconstant
variable names not adhering toSCREAMING_SNAKE_CASE
.screaming-snake-case-immutable
: Flags forimmutable
variable names not adhering toSCREAMING_SNAKE_CASE
.
- Gas Optimizations:
asm-keccak256
: Recommends using inline assembly forkeccak256
for 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-Bug
for bugs orT-feature
for features), addC-forge
andCmd-forge-fmt
labels.
§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/testdata
that 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 with their corresponding
SolLint
.