Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description
Forge provides a new
linterbased on Solar, a Rust based solidity compiler.This PR aims to discuss about should we use it or not?
Note: we can choose to only run it on contracts, not on script or test.
Pros
unsafe-typecast(this is the only case I encountered):Cons
How to try
Ensure you use last Foundry version + build
Try linter
Docs
Forge-lint rules — by severity
incorrect-shiftunchecked-call.call(),.delegatecall(),.staticcall()) without checking success return — risk of silent failure / security issue.erc20-unchecked-transfertransfer/transferFromcalls ignoring the boolean return — transfers might silently fail.divide-before-multiplyunsafe-typecastpascal-case-structPascalCasenaming for structs — style / readability.mixed-case-functionmixedCase(camelCase) for function names — style / readability.mixed-case-variablemixedCasenaming for mutable variables — style / readability.screaming-snake-case-constSCREAMING_SNAKE_CASEnaming forconstantvariables — style / readability.screaming-snake-case-immutableSCREAMING_SNAKE_CASEnaming forimmutablevariables — style / readability.unused-importunaliased-plain-importasm-keccak256keccak256when appropriate — may reduce gas usage vs high-level call.unwrapped-modifier-logic_placeholder — such logic is duplicated per function, increasing contract size.