# @chainlink/solhint-plugin-chainlink-solidity

> A set of Solhint rules for Chainlink's Solidity Style Guide.

Latest version **1.0.1** (published 2022-10-20) · 0 weekly downloads

## Install

```sh
npm install @chainlink/solhint-plugin-chainlink-solidity
pnpm add @chainlink/solhint-plugin-chainlink-solidity
yarn add @chainlink/solhint-plugin-chainlink-solidity
bun add @chainlink/solhint-plugin-chainlink-solidity
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.0.1 |
| Published | 2022-10-20 |
| First published | 2022-10-20 |
| Weekly downloads | 0 |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 0 |
| Unpacked size | 14.1 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Maintainers | cllyos, boxhock, ad0ll, amit.momin, alejoberardinolink, skcl, austin-born-cll, ivan.savin, hyena22, mjk90, kyle.martin, clemsut, ainsleybc, dimitris.grigoriou, jmank88, m4us, ryan_hall, archseer, chainchad, clandrew, chainlink_brandon, akhilchainani, sdrug, reductionista, anirudhwarrier, frankzhu, mesoic, futureproof1, alkhara, jdh42, michipulatos, csastropranoto, smartcabbage, cltate, skudasov, notoriousenigma, secure.andrew, krebernisak, aalu-cl, secure.javier, secure.ericz, rodrigo.smartcontract, dvidal12, chainlink-steve, se3000, henrynguyen5, chainlink-external-adapter, chainlink-explorer |

## Links

- npm: https://www.npmjs.com/package/@chainlink/solhint-plugin-chainlink-solidity
- npm.io page: https://npm.io/package/@chainlink/solhint-plugin-chainlink-solidity

## Recent versions

- 1.0.1 (latest) — 2022-10-20
- 1.0.0 — 2022-10-20

## README

# Chainlink Solhint Rules

A set of Solhint rules for Chainlink's Solidity Style Guide.

[You can find a working Foundry example here](https://github.com/smartcontractkit/chainlink-solhint-rules-example).

## Install to a new project

```
npm init && npm install solhint solhint-plugin-chainlink-solidity@npm:@chainlink/solhint-plugin-chainlink-solidity --save
```

Create a `.solhint.json` in your root project directory:

```
{
  "extends": "solhint:recommended",
  "plugins": ["chainlink-solidity"],
  "rules": {
    "compiler-version": ["off", "^0.7.0"],
    "const-name-snakecase": "off",
    "constructor-syntax": "error",
    "var-name-mixedcase": "off",
    "func-visibility": [
      "error",
      {
        "ignoreConstructors": true
      }
    ],
    "max-line-length": ["error", 160],
    "not-rely-on-time": "off",
    "no-empty-blocks": "off",
    "quotes": ["error", "single"],
    "reason-string": [
      "warn",
      {
        "maxLength": 64
      }
    ],
    "chainlink-solidity/prefix-internal-functions-with-underscore": "warn",
    "chainlink-solidity/prefix-private-functions-with-underscore": "warn",
    "chainlink-solidity/prefix-storage-variables-with-s-underscore": "warn",
    "chainlink-solidity/prefix-immutable-variables-with-i": "warn",
    "chainlink-solidity/all-caps-constant-storage-variables": "warn",
    "chainlink-solidity/no-hardhat-imports": "warn",
    "chainlink-solidity/inherited-constructor-args-not-in-contract-definition": "warn",
    "chainlink-solidity/explicit-imports": "warn",
    "chainlink-solidity/no-require-statements": "warn",
    "chainlink-solidity/no-block-single-if-reverts": "warn"
  }
}
```

Add the following to your `package.json`:

```
  "scripts": {
    "solhint": "solhint --config .solhint.json \"src/*.sol\""
  },
```

Then, run:

```
npm solhint

src/Counter.sol
  4:1  warning  Internal function increment is not prefixed with underscore (_)  chainlink-solidity/prefix-internal-functions-with-underscore
  4:1  warning  Private / internal variable number is not prefixed with s_       chainlink-solidity/prefix-storage-variables-with-s-underscore
  8:9  warning  Use custom errors instead of revert statements                   chainlink-solidity/no-require-statements
  8:9  warning  Provide an error message for require                             reason-string
```

## Rules

| Rule Id                                                 | Description                                                                           |
|---------------------------------------------------------|---------------------------------------------------------------------------------------|
| `prefix-internal-functions-with-underscore`             | Naming convention                                                                     |
| `prefix-private-functions-with-underscore`              | Naming convention                                                                     |
| `prefix-storage-variables-with-s-underscore`            | Naming convention                                                                     |
| `prefix-immutable-variables-with-i`                     | Naming convention                                                                     |
| `all-caps-constant-storage-variables`                   | Naming convention                                                                     |
| `no-hardhat-imports`                                    | Leftover `hardhat/*.sol` imports not allowed                                          |
| `inherited-constructor-args-not-in-contract-definition` | Inherited contract constructor arguments should be specified in the constructor block |
| `explicit-imports`                                      | import {Foo} from 'Foo.sol'                                                           |
| `no-require-statements`                                 | Use custom errors instead                                                             |
| `no-block-single-if-reverts`                            | Omit curly braces for single-line guard clauses                                       |

---
_Source: https://npm.io/package/@chainlink/solhint-plugin-chainlink-solidity · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
