用 pre-commit hook 解決 Python 項目編碼規範

本文參考了:html

代碼規範、測試是開發中很重要的一環,重要性無需我多說。咱們須要一些自動化工具,來幫助咱們更輕鬆地管理項目。本文推薦幾個實用的自動化工具。python

pre-commit 我在以前的一篇文章 推薦一些維護大型 Python 項目的工具中簡要提到過,這裏再稍微講一下。git

pre-commit 用到一個配置文件:.pre-commit-config.yaml,官方文檔在這裏。這裏針對 Python 項目,但願 git precommit hooks 可以實現如下功能:能找出不符合 pep8規範的代碼,而且可以自動格式化。這須要用到兩個工具:blackflake8black自動格式化,flake8檢測代碼不規範的地方。github

整個的 workflow 以下圖所示:bash

具體的執行步驟以下:jvm

  1. 安裝 pre-commit : pip install pre-commit
  2. .pre-commit-config.yaml配置文件
  3. pre-commit install安裝git hooks到你的.git/目錄

咱們的.pre-commit-config.yaml很簡單,以下:工具

repos:
- repo: https://github.com/ambv/black
  rev: stable
  hooks:
    - id: black
      language_version: python3.7
- repo: https://github.com/pre-commit/pre-commit-hooks
  rev: v1.2.3
  hooks:
    - id: flake8
複製代碼

而後咱們下一次提交 commit 的時候,會先運行blackflake8,檢查出哪有不規範的地方,而且能自動幫你格式化。你修改以後從新提交 commit,就能順利提交了。post

實際操做一下:測試

新建一個測試文件:bad_pep8.pyspa

有好幾處不符合 pep8規範,咱們試着 commit 一下:

能夠看到兩個 hook 都沒有經過,另外 black幫咱們把代碼格式化了。

同時flake8提示咱們x變量定義了可是沒有使用,把這一行刪掉,而後從新add 並 commit:

若是你以爲沒有必要強制要求不能定義變量而不使用(從輸出能夠看出這個規範的編號爲F841),能夠在項目根目錄建一個.flake8配置文件,以下圖。更加詳細的配置請看官方文檔

[flake8]
ignore = F841
複製代碼
相關文章
相關標籤/搜索