用 pre-commit 提升程式碼品質
pre-commit 是一套相當方便的 Git pre-commit hooks 工具,除了內建不少好用的程式碼檢查工具之外,也同時支援 Python, Ruby, Swift, golang, node 等熱門程式語言,更能夠在其所提供的框架(framework)針對自己的需求開發 pre-commit hooks 。
這麼好用的工具怎能不裝來使用呢!
一起利用 pre-commit 改善我們的程式碼品質吧!
本文環境
- Python 3.6.5
- pre-commit 2.5.1
安裝(Installation)
pre-commit 是利用 Python 所開發的工具,因此安裝 pre-commit
只需要透過 Python 套件管理工具 pip 即可:
$ pip install pre-commit
設定 .pre-commit-config.yaml
pre-commit
是在執行 git commit
指令時會跟著運作的指令,所以必須在 git 專案中添加 .pre-commit-config.yaml
設定檔,讓 pre-commit
知道要執行哪些 hooks 。
所以 .pre-commit-config.yaml
設定檔會跟 .git/
同一層,例如:
.
├── README.md
├── requirements.txt
├── .git
├── .pre-commit-config.yaml
└── project/
.pre-commit-config.yaml
最簡單的設定如下,該設定會把每一行結尾的空格刪去,讓程式碼可以維持整潔:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v3.1.0
hooks:
- id: trailing-whitespace
如果是 Python 的開發者,可以使用以下設定(啟用 flake8 的檢查):
- repo: https://gitlab.com/pycqa/flake8
rev: '3.8.3'
hooks:
- id: flake8
p.s. 請記得安裝 flake8
接著說明上述設定檔的內容。
由於 pre-commit 將各種 hooks 存放在另外的 Github repository 中 pre-commit-hooks ,因此能夠看到 .pre-commit-config.yaml
中設定為 repo: https://github.com/pre-commit/pre-commit-hooks
。
而我們所指定的 repo 版本為 v3.1.0
,對應的即是 https://github.com/pre-commit/pre-commit-hooks/releases 中的版本號,原則上只要用最新的版本號即可。
最後是透過 hooks 設定要啟用的功能,唯一必填的設定為 id
,這些 id
可以在 https://github.com/pre-commit/pre-commit-hooks/blob/master/.pre-commit-hooks.yaml 找到,大家可以閱讀各個功能的說明,並且挑選合用的 hooks 。
關於 hooks 更詳細的設定可以參閱 文件 。
安裝 pre-commit hooks
完成 .pre-commit-config.yaml
設定檔之後,用以下指令安裝 pre-commit hooks ,就完成了:
$ pre-commit install --install-hooks
試著隨便改幾個檔案,並執行 git commit -m 'test pre-commit'
看看是否會出現類似以下的訊息:
$ git cim 'test pre-commit'
Trim Trailing Whitespace.................................................Passed
Flake8...................................................................Passed
[master 1234567] test pre-commit
2 files changed, 2 insertions(+), 1 deletion(-)
如果有出現類似以上的訊息就是成功囉!