区块链研究实验室|Solidity Linting和Formatting的使用教程

IP归属:

 

以太坊开发人员社区开始开发一些非常棒的工具,让我们更加接近自动化的工作流和开发人员的“cockpit”,例如我们现在使用的比较成熟的语言:javascript或go。

其中有两个工具是触及了开发人员工作流程最核心的部分编写代码:

  • linters自动分析代码是否存在可能的编程样式错误(常见示例:eslint for javascript)

  • Formatters根据预定义的规则和缩进默认值自动格式化代码(例子:gofmt for go)

 我们在使用Truffle框架的repo的环境中涉及到这些工具,但是这些步骤可以适用于任何框架中。

Linter

 

在本教程中,我们将重点介绍solhint,不过我强烈建议您尝试一下ethlint。

 

Solhint

首先,确保您位于项目根目录中,然后使用NPM或Yarn添加solhint模块。

 

npm install --save-dev solhint

配置Solhint

使用基本配置文件初始化solhint。

> ./node_modules/.bin/solhint init-config

你应该在项目的根目录中创建一个./solhint.json文件。这个文件指定了您希望solhint为哪个规则执行lint。solhint对安全规则、样式指南规则和最佳实践规则有着非常出色的覆盖。

一个很大的问题:默认情况下,很少有规则被启用。经过一些试验和错误后,我发现solhint:稍微好一些(与solhint相比:Solhint在文档中列出的默认值)。

我强烈建议您浏览一下规则列表并添加到您想要的./solhint.json。我个人发现安全规则和最佳实践非常有用。

 

{
    "extends""solhint:recommended",
    "plugins": [],
    "rules": {
      "avoid-throw"false,
      "avoid-suicide""error",
      "avoid-sha3""warn"
    }
  }

Solhint ignores

 

与.gitignore类似,您可以获取solhint去忽略文件和文件夹

 

node_modules/
migrations/

Solhint脚本

编辑package.json以包含一个新脚本来运行Solhint。

 

"solhint""./node_modules/.bin/solhint -f table contracts/**/*.sol"

上面的命令有几点需要注意:

  • Solhint运行在与文件模式匹配的globs上。在上面,它运行在contract目录中的所有** / * .sol文件中

  • -f表以表格形式显示结果。您可以选择其他选项(例如unix,tap)

Solhint动作

 

npm run solhint

您可能会看到一堆错误,尤其是缩进和样式错误。您无需手动修复这些!我们的下一个工具(formatter)将对此有所帮助。

 

Formatter

Prettier是一款出色的工具,可根据预定义的样式指南自动格式化代码库。只需在团队层面上就规则达成一致,然后Prettier将以相同的方式自动编码每个人的代码。

prettier solidity是与solhint一起使用的solidity文件的prettier。它有助于自动修复solhint发现的许多错误,特别是像缩进和代码样式这样简单的错误。

安装Prettier

 

npm install --save-dev prettier prettier-plugin-solidity

配置Prettier

 

你可以使用.prettierrc文件配置prettier。大多数规则都是使用solhint现成的,但您可能需要添加或关闭其中的一些规则。我建议你保持规则尽量简短。

 

您可以阅读Prettier文档以获取更多详细信息。您还可以在.prettierignore中指定要忽略的文件。

 

{
  "printWidth"100,
  "singleQuote"true
}

配置Solhint使用Prettier

安装solhint-plugin-prettier,这使得solhint可以很好地使用prettier solidity。

 

npm install --save-dev solhint-plugin-prettier

然后更新./solhint.json以将Prettier添加为插件和规则。

{
  "extends": ["solhint:recommended"],
  "rules": {
    "prettier/prettier""error",
    "avoid-throw"false,
    "avoid-suicide""error",
    "avoid-sha3""warn"
  },
  "plugins": ["prettier"]
}

运行Prettier-Solidity

 

将prettier命令添加到package.json中。--write标志将格式化并覆盖现有文件。根据prettier文档,最好先提交代码。

 

"prettier:solidity""./node_modules/.bin/prettier --write contracts/**/*.sol"

然后在输入命令行

 

npm run prettier:solidity

Git Hooks(可选)

在理想的世界中,我们总是记得在将代码推送到我们团队的代码库之前运行我们的linter和formatter。我们可以使用Git Hooks自动执行此过程。

设置Husky

 

我们将使用Husky,一个非常有用的npm模块,它可以处理git hook的内部问题。

 

npm install --save-dev husky

然后,在package.json中添加几行。在下面的示例中,我们使用pre-push hook来运行我们的Prettier格式化程序。

// package.json
{
  "husky": {
    "hooks": {
       "pre-push""npm run prettier:solidity"
    }
  }
}

本文来源:陀螺科技 文章作者:区块链研究实验室
收藏
举报
区块链研究实验室
累计发布内容13篇 累计总热度10万+

陀螺科技现已开放专栏入驻,详情请见入驻指南: https://www.tuoluo.cn/article/detail-27547.html

区块链研究实验室专栏: https://www.tuoluo.cn/columns/author1286336/

本文网址: https://www.tuoluo.cn/article/detail-52148.html

免责声明:
1、本文版权归原作者所有,仅代表作者本人观点,不代表陀螺科技观点或立场。
2、如发现文章、图片等侵权行为,侵权责任将由作者本人承担。

相关文章