在 Solhint 中添加自定义规则

问题描述

我正在使用 solhint 插件来检查 solidity 代码。但是我想为代码分析添加自定义规则。如何添加自定义规则作为规则集的一部分?

自定义规则添加代码

const BaseChecker = require('./../base-checker')

const ruleId = 'no-foos'
const Meta = {
  type: 'naming',docs: {
    description: `Don't use Foo for Contract name`,category: 'Style Guide Rules'
  },isDefault: false,recommended: true,defaultSetup: 'warn',schema: null
}

class NoFoosAllowed extends BaseChecker {
  constructor(reporter) {
    super(reporter,ruleId,Meta)
  }

  ContractDeFinition(ctx) {
    const { name } = ctx

    if (name === 'Foo') {
      this.reporter.error(ctx,this.ruleId,'Contracts cannot be named "Foo"')
    }
  }
}

module.exports = NoFoosAllowed

我已将上述代码保存到 rules->naming 文件夹中的新 js 文件中。我在我的 .solhint.json 文件中的 rules 属性中使用了“no-foos”规则 ID。

{
    "extends": "solhint:all","plugins": [],"rules": {
      "avoid-suicide": "error","avoid-sha3": "warn","no-foos" : "warn","var-name-mixedcase": "error"
    }
}

解决方法

每个规则集循环遍历所有 rules 并根据 rule metadataruleset config 启用(或不启用)它。

因此,您可以在 rules 文件夹中创建自定义规则,并将其设置为您的规则集将启用的元数据组合。