0.1.1 • Published 2 years ago
@sidestream/solhint-plugin-makerdao v0.1.1
MakerDAO solidity linter
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.
Getting started
Use this package as a standalone cli tool
- 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
Add this linter to existing project
- 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.jsonaccording to the documentation or use the one provided in this repository. - Add
lintscript to thepackage.jsonwithsolhint ./**/*.sol - Run
npm run lintmanually, in CI or before every commit
Rules
| 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) |
Publishing to npm
- Login to npm (if not yet) via
npm login - Update
versionfield insidepackage.jsonaccording to the semver- Run
npm installto propagate changes to thepackage-lock.json
- Run
- Open a PR with the changes
- Publish the new version via
npm publish --access public