為什么使用lint
在日常開發中,不同開發人員會寫下不同風格的代碼,導致代碼可維護性變差,為了解決風格不一致問題,我們可以制定代碼規范,讓開發人員都遵守同樣的規范編寫代碼。在開發過程中,部分代碼存在質量問題,這個時候需要code review的方式,人工檢查一些可能的錯誤。然而,在實際開發中,開發規范仍然嚴重依賴開發人員的自覺性,還是會出現一些不合規范的現象,在人員發生變化的時候,代碼規范需要再次的普及和培訓,也浪費了很多時間。代碼質量的檢查也是嚴重依賴開發人員review的細致程度,實際上還是有很多bad code引入到工程中。如何自動化的完成上述的工作,在更大程度上提高代碼風格一致性和代碼質量呢?
lint可以在代碼編寫期,提交代碼期,或者打包部署的時候自動檢查代碼,它可以識別并自動修改部分錯誤,比如檢測沒有初始化或者沒有定義的變量,檢查調用未定義的方法,自動補齊或者刪除行末的分號等。不同于格式化,格式化僅僅能改變代碼文本的展示,而lint可以發現代碼中的一些錯誤,提升代碼規范和質量。在單人開發或者團隊開發的情況下,lint都是很有好處的,它幫助我們寫出更好的代碼。節省了學習代碼規范的時間,避免了開發交接產生的代碼規范變化,提升了代碼質量,使得code review可以更加專注于代碼邏輯,而不是把時間花在檢查代碼規范或者一些明顯的錯誤上。本文主要講解在VSCode中怎樣lint python代碼。VSCode支持哪些python linter
VSCode支持很多linter,默認使用的是Pylint,python.linting.pylintEnabled控制開關,python.linting.pylintArgs設置參數,python.linting.pylintPath自定義路徑。配置Pylint
代碼VSCode,macOS系統中輸入cmd+shift+P(windows系統輸入ctrl+shift+P),打開命令面板,輸入select linter
點擊確認后,出現新的面板,選擇pylint
右下角出現彈框,提示沒有安裝pylint,點擊install
.vscode文件夾下,VSCode自動生成了settings.json文件,文件內容為:
{
"python.pythonPath": "/usr/local/bin/python3",
"python.linting.pylintEnabled": true,
"python.linting.enabled": true
}
"python.pythonPath": "/usr/local/bin/python3"是python解釋器的路徑,可以通過命令面板里select interpreter來修改
"python.linting.pylintEnabled": true代表pylint已經開啟
"python.linting.enabled": true代表lint開啟
Pylint配置好了,我們可以試試Pylint嘗試
我們寫下兩行簡單的代碼,pylint出現紅色波浪線,這代表代碼有錯誤出現,鼠標懸浮直接可以看到,print后面需要跟上括號,pylint給出了修改建議。可以發現,Pylint使用是非常方便的,在代碼保存后,它會自動檢查代碼問題,并指出具體的問題點,很多問題都可以迅速地解決。它提高了我們的代碼規范程度,提前發現了代碼問題,并且沒有花費額外的開發時間,可以說lint是非常有用的工具了。Pylint檢查規則
Pylint把檢查出的問題分為五個級別,E(Error)和F(Fatal)默認開啟,C(Convention)和R(Refactor)默認關閉,W(Warning)信息部分開啟部分關閉Enable all Error (E) and Fatal (F) messages. 開啟錯誤和fatal信息
Disable all Convention (C) and Refactor (R) messages. 關閉Convention和Refactor信息
Disable all Warning (W) messages except the following: 關閉warning信息(以下除外)unreachable (W0101): Unreachable code (不可觸達的代碼)
duplicate-key (W0109): Duplicate key %r in dictionary (字典里面重復key)
unnecessary-semicolon (W0301): Unnecessary semicolon (不必要的分號)
global-variable-not-assigned (W0602): Using global for %r but no assignment is done (全局變量沒有賦值)
unused-variable (W0612): Unused variable %r (未使用的變量)
binary-op-exception (W0711): Exception to catch is the result of a binary "%s" operation (二進制操作異常)
bad-format-string (W1302): Invalid format string (不合理的格式化)
anomalous-backslash-in-string (W1401): Anomalous backslash in string (異常的反斜杠)
bad-open-mode (W1501): "%s" is not a valid mode for open (不合理的打開方式)