
bellybutton是Python的可自定義,易於配置的絨毛引擎。
Pylint和Flake8之類的工具提供了開箱即用的規則,以實施Python最佳實踐,確保PEP-8合規性以及避免頻繁的錯誤來源。但是,許多項目都有用於靜態分析的項目特定候選人,例如內部樣式指南,棄用功能的領域或常見的錯誤來源。對於擁有許多貢獻者或大型或傳統代碼庫的這些項目尤其如此。
bellybutton允許以每項項目為基礎指定自定義覆蓋規則,並作為正常構建,測試和部署過程的一部分檢測,此外,指定這些規則高度易於訪問,大大降低了採用成本。
bellybutton :
可以通過bellybutton
pip install bellybutton安裝後,運行
bellybutton init在您項目的根目錄中,將創建一個.bellybutton.yml配置文件,其中示例規則供您開始適應。 bellybutton還將嘗試根據項目目錄結構提供其他規則設置。
一旦您為項目配置了bellybutton ,請運行
bellybutton lint將根據您的.bellybutton.yml中指定的規則來調整該項目。另外,運行
bellybutton lint --modified-only如果使用git,則只會僅覆蓋那些與origin/master不同的文件。
要在CI管道中添加bellybutton ,請查看此存儲庫的TOX配置和.travis.yml的示例。
bellybutton供應模式的規則應被捕獲並導致絨毛失敗。 .bellybutton.yml配置中指定的規則必須包括:
description ,表達規則的含義expr ,指定要捕獲的模式 - 作為astpath表達式或正則表達式( !regex ... )。此外, rules映射中用於規則的鍵是其名稱。
規則也可能包括:
settings ,以及是否可以通過# bb: ignore該規則example ,該代碼將與規則相匹配instead不是替代代碼,用於指導開發人員修復其覆蓋誤差。這些example和instead在運行時檢查,以確保它們分別與規則的expr相匹配。
例如,使用ASTPATH表達式的不推薦使用函數調用的覆蓋物的規則可能看起來像:
DeprecatedFnCall :
description : ` deprecated_fn ` will be deprecated in v9.1.2. Please use `new_fn` instead.
expr : //Call[func/Name/@id='deprecated_fn']
example : " deprecated_fn(*values) "
instead : " new_fn(values) "!settings節點指定:
included使用Glob Note法運行哪些規則的路徑excluded在哪些規則不運行的路徑(即使匹配included路徑)allow_ignore ,確定是否可以忽略規則,提供匹配規則的行的行為# bb: ignore註釋。此外,在.bellybutton.yml的根級別上,可以指定一個default_settings設置,該設置將被規則使用而無需明確設置。每個規則必須具有settings參數,也必須能夠倒在default_settings上。
例如,僅特定模塊的!settings節點可能看起來像:
my_module_settings : !settings
included :
- ~+/my_package/my_module.py
excluded : []
allow_ignore : no 查看此存儲庫的.bellybutton.yml作為示例bellybutton配置文件,以及astpath的ReadMe,以獲取可以使用bellybutton模式類型的示例。
bellybutton正在Alpha版本中,因此缺少一些關鍵功能,文檔和完整的測試覆蓋範圍。此外, bellybutton沒有在極大的代碼庫上進行性能進行優化,並且可能包含破壞錯誤。請報告遇到的任何錯誤。
!chain和!verbal表達節點尚未實現