From f0cddaf4b8f853998638b91fb6ab6bafce5713fa Mon Sep 17 00:00:00 2001 From: L Lllvvuu Date: Sun, 30 Jul 2023 00:29:50 -0700 Subject: [PATCH] husky hook to generate docs and ruleset --- .husky/pre-commit | 4 ++ docs/rules.md | 1 + docs/rules/best-practises/no-unused-import.md | 39 +++++++++++++++++++ package-lock.json | 22 +++++++++++ package.json | 5 ++- scripts/generate-changed.sh | 10 +++++ 6 files changed, 80 insertions(+), 1 deletion(-) create mode 100755 .husky/pre-commit create mode 100644 docs/rules/best-practises/no-unused-import.md create mode 100644 scripts/generate-changed.sh diff --git a/.husky/pre-commit b/.husky/pre-commit new file mode 100755 index 00000000..e09f21fc --- /dev/null +++ b/.husky/pre-commit @@ -0,0 +1,4 @@ +#!/usr/bin/env sh +. "$(dirname -- "$0")/_/husky.sh" + +sh ./scripts/generate-changed.sh diff --git a/docs/rules.md b/docs/rules.md index 65aacdf3..87bf4858 100644 --- a/docs/rules.md +++ b/docs/rules.md @@ -15,6 +15,7 @@ title: "Rule Index of Solhint" | [no-console](./rules/best-practises/no-console.md) | No console.log/logInt/logBytesX/logString/etc & No hardhat and forge-std console.sol import statements | ✔️ | | [no-empty-blocks](./rules/best-practises/no-empty-blocks.md) | Code contains empty block. | ✔️ | | [no-global-import](./rules/best-practises/no-global-import.md) | Import statement includes an entire file instead of selected symbols | ✔️ | +| [no-unused-import](./rules/best-practises/no-unused-import.md) | Imported name is not used | ✔️ | | [no-unused-vars](./rules/best-practises/no-unused-vars.md) | Variable "name" is unused. | ✔️ | | [payable-fallback](./rules/best-practises/payable-fallback.md) | When fallback is not payable you will not be able to receive ethers. | ✔️ | | [reason-string](./rules/best-practises/reason-string.md) | Require or revert statement must have a reason string and check that each reason string is at most N characters long. | ✔️ | diff --git a/docs/rules/best-practises/no-unused-import.md b/docs/rules/best-practises/no-unused-import.md new file mode 100644 index 00000000..e03199a1 --- /dev/null +++ b/docs/rules/best-practises/no-unused-import.md @@ -0,0 +1,39 @@ +--- +warning: "This is a dynamically generated file. Do not edit manually." +layout: "default" +title: "no-unused-import | Solhint" +--- + +# no-unused-import +![Recommended Badge](https://img.shields.io/badge/-Recommended-brightgreen) +![Category Badge](https://img.shields.io/badge/-Best%20Practise%20Rules-informational) +![Default Severity Badge warn](https://img.shields.io/badge/Default%20Severity-warn-yellow) +> The {"extends": "solhint:recommended"} property in a configuration file enables this rule. + + +## Description +Imported name is not used + +## Options +This rule accepts a string option of rule severity. Must be one of "error", "warn", "off". Default to warn. + +### Example Config +```json +{ + "rules": { + "no-unused-import": "warn" + } +} +``` + + +## Examples +This rule does not have examples. + +## Version +This rule is introduced in the latest version. + +## Resources +- [Rule source](https://github.com/protofire/solhint/tree/master/lib/rules/best-practises/no-unused-import.js) +- [Document source](https://github.com/protofire/solhint/tree/master/docs/rules/best-practises/no-unused-import.md) +- [Test cases](https://github.com/protofire/solhint/tree/master/test/rules/best-practises/no-unused-import.js) diff --git a/package-lock.json b/package-lock.json index 450008be..16da77da 100644 --- a/package-lock.json +++ b/package-lock.json @@ -38,6 +38,7 @@ "eslint-config-prettier": "^8.6.0", "eslint-plugin-import": "^2.27.4", "eslint-plugin-prettier": "^4.2.1", + "husky": "^8.0.3", "markdown-table": "^2.0.0", "mocha": "^10.2.0", "mocha-lcov-reporter": "^1.3.0", @@ -2498,6 +2499,21 @@ "npm": ">=1.3.7" } }, + "node_modules/husky": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.3.tgz", + "integrity": "sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==", + "dev": true, + "bin": { + "husky": "lib/bin.js" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/typicode" + } + }, "node_modules/ignore": { "version": "5.2.4", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", @@ -7023,6 +7039,12 @@ "sshpk": "^1.7.0" } }, + "husky": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.3.tgz", + "integrity": "sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==", + "dev": true + }, "ignore": { "version": "5.2.4", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", diff --git a/package.json b/package.json index 241c8531..72687b81 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,9 @@ "test": "mocha --recursive", "lint": "eslint .", "generate-rulesets": "node scripts/generate-rulesets.js && prettier --write conf/rulesets", - "docs": "node scripts/generate-rule-docs.js" + "docs": "node scripts/generate-rule-docs.js", + "prepare": "husky install", + "prepublishOnly": "npm run lint && npm run test && npm run generate-rulesets" }, "bin": { "solhint": "solhint.js" @@ -61,6 +63,7 @@ "eslint-config-prettier": "^8.6.0", "eslint-plugin-import": "^2.27.4", "eslint-plugin-prettier": "^4.2.1", + "husky": "^8.0.3", "markdown-table": "^2.0.0", "mocha": "^10.2.0", "mocha-lcov-reporter": "^1.3.0", diff --git a/scripts/generate-changed.sh b/scripts/generate-changed.sh new file mode 100644 index 00000000..4223a46a --- /dev/null +++ b/scripts/generate-changed.sh @@ -0,0 +1,10 @@ +#!/bin/sh + +changed() { + git diff-index --name-only -B -R -M -C HEAD lib/rules +} + +if [ "$(changed)" != "" ]; then + npm run generate-rulesets + npm run docs +fi