Python Flake8 與 Black Formatter 擴充套件快速上手
替代方案——Ruff:Python 開發:Ruff Linter、Formatter 介紹 + 設定教學
Python linter、formatter 整合 VS Code 的文章,已經寫過好幾篇,但還是不厭其煩地繼續寫,原因很簡單——它們實在太基本也太重要,卻往往未受到足夠的重視。
永遠不要小看這些排版上的細節對程式寫作習慣的影響。
如同我在〈Python isort 擴充套件介紹與簡易設定教學〉文末所言:
對於重視程式寫作規範,意在貫徹 Clean Code 精神的開發者而言,它不是一種選擇,而是一種必然。
以及〈VS Code 設定 Python Linter、Formatter 教學〉中說的:
Linter 和 formatter 雖然無法保證你寫出 Clean Code,但至少能協助你盡可能符合 PEP 8 風格,並省下處理排版細節上的心力,讓你更專注在程式的核心部分。
儘管「善用 linter、formatter」和「寫出 Clean Code」之間,還相隔著不知多少努力與反省,但後者必定是建立在前者之上——我對此深信不疑。
所以我不曾去質疑這些工具的必要性,因為它們就像陽光、空氣、水一般,不可或缺,只要我還寫程式的一天,就只會立足於它們之上。
廢話不多說,我們進入正題。
本文重點
有鑑於微軟已經從 VS Code Python extension 中拆分了幾個重要的 Python linter、formatter 功能,所以在settings.json
中的設定會有一些變化,本文就來介紹,這些新套件在設定上的重點。
其實——也沒什麼重點啦!複製貼上即可。🐸
目前已「獨立」出的 Python 相關擴充套件有:
- Linter:Pylint、Flake8。
- Formatter:Black Formatter。
- Import 排序:isort。
isort 我們上一篇講過了,這次把剩下的兩項補完,功德圓滿。
Flake8 設定
2023/07/05
補充:無論 Flake8 還是 Black Formatter,當你的虛擬環境沒有安裝該 package 時,擴充套件會使用它預設的版本。但一旦你的虛擬環境有安裝,擴充套件則會使用虛擬環境中的版本。
舊有的 Flake8,是前述 Python 擴充套件的一部分,需要你額外安裝 Flake8 package 在專案的 Python 虛擬環境中。其settings.json
設定如下:
1 | "python.linting.flake8Enabled": true, |
使用 Flake8 擴充套件後,新的設定改為:
1 | "flake8.args": [ |
內容相同,只是 token 名稱不同而已。
和以前最大的區別是:Flake8 package 已安裝於擴充套件中,不必再額外安裝到專案虛擬環境,且可以跨專案共用!這也是採用新方案的最大優點。
注意,新舊兩者是可以並存的!因為它們指向的flake8
路徑各不相同。但我還是建議,安裝擴充套件以後,原來的設定就可以移除了,以免混淆。
Black Formatter 設定
舊有的設定:
1 | "python.formatting.provider": "black", |
安裝 Black Formatter 擴充套件後的設定:
1 | "[python]": { |
這裡的一大重點,就是要把 Python 預設的格式化器,從 Python 擴充套件提供,改為直接使用 Black 擴充套件。
不同專案使用不同格式化器
最後補充一個常見的情境,以我自己為例:個人開發我使用 Black,但工作上都是使用 yapf,怎麼辦?
此時要善用 VS Code 的專案設定檔。
該設定檔預設並不存在,最簡單的方式就是先在專案的根目錄中建立.vscode
資料夾(記得要加入.gitignore
),並在其中新增一個settings.json
檔。
假設我們平常以 Black 為預設格式化器,在特定專案才使用 yapf,那麼我們只要在專案設定檔中,把格式化器改為 yapf 即可,而專案設定會優先於使用者全域設定。
以上述情境為例,我的專案設定如下:
1 | "python.formatting.provider": "yapf", |
yapf 的參數部分,因為不會發生衝突(使用 yapf 時才會生效),個人認為寫在使用者全域設定中即可:
1 | "python.formatting.yapfArgs": [ |
如此一來,在有上述設定的工作專案中,VS Code 會優先使用 yapf 作為 formatter,並套用對應的參數。而沒有額外設定時,則一律使用 Black。
相關文章