This repository contains linting rules and opinionated configuration for the code style enforced by MakerDAO protocol engineers. Technically, it's a set of solhint plugins and a configuration file that can be globally installed in your system and executed on demand of as a pre-commit hook.
- Install solhint globaly via
npm i -g solhint
- Install this repository via
npm i -g solhint-plugin-makerdao@npm:@sidestream/solhint-plugin-makerdao
- Lint all solidity files in the current folder via
npx solhint-plugin-makerdao ./**/*.sol
- Install solhint via
npm i --save-dev solhint
- Install this repository via
npm i --save-dev solhint-plugin-makerdao@npm:@sidestream/solhint-plugin-makerdao
- Create a new
.solhint.json
according to the documentation or use the one provided in this repository. - Add
lint
script to thepackage.json
withsolhint ./**/*.sol
- Run
npm run lint
manually, in CI or before every commit
Rule | Description |
---|---|
vertically-aligned-comments | Enforce comments in the same block that start with // to start on the same column |
vertically-aligned-declarations | Enforce contract scope declarations to have variable names start on the same column |
vertically-aligned-state-var-visibility | Enforce visibility modifiers such as public to start on the same column in the declarations |
no-newlines-between-function-signatures | Forbid newlines in interface defenitions |
capitalized-snake-only-for-const | Forbid CAPITALIZED_SNAKE_CASE for variables that are not constants |
newlines-between-custom-and-native-declarations | Enforce newlines between variable declarations of custom and native types (e.g. IExampleContract and uint256 ) |
constructor-arguments-unserscored | Enforce underscores for constructor argument names |
prefer-type-provided-max | enforce using type provided max values over conversions. I.e. type(uint256).max over uint256(-1) |
- Login to npm (if not yet) via
npm login
- Update
version
field insidepackage.json
according to the semver- Run
npm install
to propagate changes to thepackage-lock.json
- Run
- Open a PR with the changes
- Publish the new version via
npm publish --access public