以太坊開發人員社羣開始開發一些非常棒的工具,讓我們更加接近自動化的工作流和開發人員的“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"
}
}
}