Zero-config Hardhat plugin to check the output of the compiler for any problems.
- ツ Zero-configuration required
- 🔍 Checks for : NatSpec comments & Compilation warnings.
- 🔧 Extendable with custom checks. (TODO)
First thing to do is to install the plugin in your Hardhat project:
# Using yarn
yarn add hardhat-output-validator
# Or using npm
npm i hardhat-output-validator
Next step is simply to include the plugin into your hardhat.config.js
or hardhat.config.ts
file:
// Using JavaScript
require('hardhat-output-validator');
// Using ES6 or TypeScript
import 'hardhat-output-validator';
And you're done! Documentation will be automatically checked on the next compilation and you'll see the result in your console. :)
The Output Validator loops through all your Solidity contracts and checks for missing NatSpec . For example, given the following function:
/// @notice Does another thing when the function is called.
/// @dev More info about doing another thing when the function is called.
/// @param num A random number
/// @return A random variable
function anotherThing(uint256 num) external pure returns (uint256);
It will generate the following output:
Comments Error: Function: (anotherThing) is missing @notice
@ IExampleContract
--> contracts/IExampleContract.sol
The plugin is compatible with all the NatSpec tags (except custom ones), and checks all events and external / public functions and state variables.
You can change the default settings in your Hardhat config file:
import { HardhatUserConfig } from 'hardhat/config';
import '@nomiclabs/hardhat-waffle';
import '@nomiclabs/hardhat-ethers';
import 'hardhat-output-validator';
const config: HardhatUserConfig = {
// ... Your Hardhat config
outputValidator: {
runOnCompile: true,
errorMode: true,
checks: {
title: "error",
details: "error",
params: "error",
returns: "error",
compilationWarnings: "warning",
variables: false,
events: false
},
exclude: ['contracts/test-helpers', "IExampleContract"],
},
};
export default config;
Here are all the configuration parameters that are currently available, but as said above, all of them are entirely optional:
Parameter | Description | Default value |
---|---|---|
errorMode |
If any checks don't pass it'll throw and error (on compilation). | true |
runOnCompile |
True if the plugin should make the checks on every compilation | true |
include |
List of all the contract / interface / library names to include. An empty array will check for everything | [] |
exclude |
List of all the contract / interface / library names to exclude. | [] |
checks |
Enable/Disable certain checks | defaultValue = errorMode ? 'error' : 'warning' { title: default, details: default, compilationWarnings: default, missingUserDoc: default, missingDevDoc: default, events: false, variables: false, functions: default, ctor: false, params: default, returnParams: default, } |
- Dev & User Documentation
- @param & @return checks
- Function Overloads
- Checks in Base Contracts
- Compilation Warnings
- Events
- Config-level ignore
- Strict mode
All feedback and contributions are welcome. Feel free to open an issue !