A plugin using remix analyzer for solidity syntax analysis.
This plugin can help solidity developers to find potential issues in their contracts code. It is using remix analyzer as the tool doing this job. So, ideally, it should show developers the same report as what they got when using Remix IDE.
Since it is remix analyzer doing the analyzation job, you can use all the rules it supports. You can find all here.
npm install hardhat-remix-analyzer @dteam/st2 @remix-project/remix-analyzer fast-levenshtein
Import the plugin in your hardhat.config.js
:
require("hardhat-remix-analyzer");
Or if you are using TypeScript, in your hardhat.config.ts
:
import "hardhat-remix-analyzer";
None.
This plugin adds the analyze
task to Hardhat:
analyze Analyze the contracts code
This plugin extends the Hardhat Runtime Environment by adding an analyze
function:
hre.analyze(hre);
This plugin needs no configuration to run, in this case, it will apply all rules for all the contracts files.
To customize it, you can add analyzerRules
to HardhatUserConfig
in your hardhat project. The type of the configuration:
export type AnalyzerConfiguration = {
default?: string[];
sources?: {
[source: string]: { [rule: string]: boolean };
};
};
Where:
- When it is an empty object like
{}
, then all rules will be applied. default
defines the rules for all contracts files. it is an array of strings. Each element must be one of the following names:
export const ANALYZER_RULES: { [rule: string]: any } = {
txOrigin,
gasCosts,
thisLocal,
checksEffectsInteraction,
constantFunctions,
similarVariableNames,
inlineAssembly,
blockTimestamp,
lowLevelCalls,
blockBlockhash,
noReturn,
selfdestruct,
guardConditions,
deleteDynamicArrays,
assignAndCompare,
erc20Decimals,
stringBytesLength,
intDivisionTruncate,
etherTransferInLoop,
deleteFromDynamicArray,
forLoopIteratesOverDynamicArray,
};
sources
can control two things and the key must be a path pointing to a contract file.- which rules in
default
will not be applied to a specific contract file. - which new rules will be added for a specific file.
- which rules in
An example of configuration:
const config: HardhatUserConfig = {
...,
analyzerRules: {
default: ["txOrigin", "gasCosts", "thisLocal"],
sources: {
"contracts/Global.sol": {
gasCosts: false,
thisLocal: false,
blockTimestamp: true,
},
},
},
};
There are no additional steps you need to take for this plugin to work.
npx hardhat analyze