【Python 軍火庫🧨 - Ruff】更加豐富強大的Python Linter

更新於 發佈於 閱讀時間約 6 分鐘
raw-image


我們在「【🔒 Python 先修班】⬆️ 培養良好的Coding Style讓專業度 Up!Up!Up!」談到了Coding Style, 在文末也分享了pylint的程式碼檢查工具, 雖然內建、簡單快速上手, 但隨著技術的演進, 我們總需要又快、又好、又簡單的工具做為預設的工具庫, Ruff就是一個新世代的Python Linter工具, 底層由Rust程式語言進行開發, 我們可以看看官方的效能評比報告, 根本就是開跑車啊!!!

raw-image

功能也接近Flake8的完整功能, 這一套也是非常熱門的一套工具, 因此想嚐鮮的朋友也不妨試試。

什麼是Linter?

它是一種程式碼檢查工具, 幫助我們在開發的過程中檢查出語法錯誤、漏洞…等, 可能危害程式的語法, 就如同我們的編輯器會抱怨出紅字一樣的告警。

raw-image

目的都是為了自動化的幫我們進行QA, feat.【🔒 Python 先修班】⬆️ 培養良好的Coding Style讓專業度 Up!Up!Up!

安裝無負擔

雖然是rust開發, 但ruff一樣有將工具打包成pypi並上傳至平台(feat.【🔒 Python 先修班】教你親手打包專屬套件庫的手作課(pip install…)), 因此我們也可以輕鬆的進行安裝。

pip install ruff

如果我們不打算安裝, 只想要初淺的玩玩語法檢查, 那可以來這裡 https://play.ruff.rs/ 試玩看看…

raw-image

基本指令導覽

我們可以對某個python檔案進行檢查

ruff check xxx.py

也可以檢查目錄

ruff check 目錄

當然也可以僅針對某個目錄底下的.py檔案檢查

ruff check 目錄/*.py

修復錯誤可以這樣做:

ruff check --fix .
Found 1 error (1 fixed, 0 remaining).

要怎麼假裝看不見的忽略錯誤?

一切都不是我的錯, 我不想看到錯誤, 我們開發到很煩躁的時候應該都非常想這樣做吧! 雖然這個作法不太建議啦, 但有時候我們幾乎可以不用理會一些非必要的錯誤時(註解、docstring…),我們就可以這樣做。

# Ignore F841.
x = 1 # noqa: F841

# Ignore E741 and F841.
i = 1 # noqa: E741, F841

# Ignore _all_ violations.
x = 1 # noqa

當然在docstring也可以如此。

""Lorem ipsum dolor sit amet.

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor.
""" # noqa

配置檔與規則

我們可以在這裡「settings/#top-level」看到一堆密密麻麻的規則, 當然我們不需要嚴謹的每一條都列上, 這取決於團隊的風格與偏好去進行選擇。

P.S 不論是老牌的pylint到flake8, 各種配置應有盡有, 只是團隊要轉移時需要有一次性的工序, 將原本的配置檔進行轉換一下。

至於檔案的名稱雖然支援了「pyproject.toml」、「ruff.toml」、「.ruff.toml」, 但會比較建議另外的檔案去管理這些規則, 如果都納入「pyproject.toml」, 我們除了安裝的配置也要有Lint的配置, 會稍微混亂一些。

如果還是堅持想要直接在「pyproject.toml」裡面描述的話, 那需要一個區塊來進行區隔。

[tool.ruff]
select = ["E4", "E7", "E9", "F"]
ignore = []

如果是獨立的「.ruff.toml」與「ruff.toml」時, 我們就不需要多一層進行區隔了。

# Enable flake8-bugbear (`B`) rules.
select = ["E", "F", "B"]

# Never enforce `E501` (line length violations).
ignore = ["E501"]

以下是個人習慣的簡易配置。

line-length = 80

[pydocstyle]
convention = "google"

[format]
quote-style = "single"

如何與編輯器vscode整合?

下載Ruff VS Code 擴展,它支援修復操作、導入排序等。

raw-image


安裝完畢之後, 我們只要在專案目錄底下撰寫.toml配置檔, vscode就能夠根據我們的配置檔幫我們進行程式碼的檢查與格式化了。

raw-image


我們可以使用Ctrl + Shift + P並設定預設的「文件格式化方式」, 這邊會有三個選項, 我們可以選擇ruff即可(記得重新載入VSCode才會生效唷)。

raw-image

接下來我們就可以直接對程式碼文件進行Ctrl + Shift + I 就可以幫我們進行排版了。


結合自動化檢核流程讓我們更省事

既然我們已經學會怎麼搭建Linter之後,但會面臨到一個問題,我們通常在開發的過程會使用Git來管理原始碼,如果能夠在提交之前自動幫我們檢查那該有多好啊! 正好,Python的開發模式也提供了pre-commit套件,它可以在commit之前進行一些前置作業流程,詳細請參考:「【🔒 Python 先修班】🧐 請加入自動化QA(pre-commit)來幫我們檢核程式碼


結語

我想大家應該都不想在Code Review的時候被排版的問題耗費大量的時間與精力吧! 而我們也難以人工的去肉眼檢查每一個空格、Tab…等的格式, 這時候就需要有自動化的工具來幫我們完成, 而Ruff是目前用起來效能較佳、功能較完整的一套工具, 不妨試著導入看看, 讓我們的程式碼品質更加精進吧!


您是否苦於網路資訊爆炸嗎? 教學何其多,但卻無法好好選擇的困境呢? 歡迎加入「🔒 阿Han的軟體心法實戰營」, 這裡不給您冗餘的雜訊, 單刀直入直接送您重點, 避開選擇障礙的困境, 讓您獲得業界標準的開發起手式, 成為Top 1的頂尖人才。

留言
avatar-img
留言分享你的想法!
avatar-img
阿Han的沙龍
136會員
301內容數
哈囉,我是阿Han,是一位 👩‍💻 軟體研發工程師,喜歡閱讀、學習、撰寫文章及教學,擅長以圖代文,化繁為簡,除了幫助自己釐清思路之外,也希望藉由圖解的方式幫助大家共同學習,甚至手把手帶您設計出高品質的軟體產品。
阿Han的沙龍的其他內容
2025/01/29
🤔 簡單且靜態就足夠了? 相信我們在開發Python應用程式的過程中, 常常會借用Enum來定義我們可能的選項, 就像顏色紅、綠、黃會有這樣的結構: class Color(str, Enum): RED = 'red' GREED = 'green' YELLOW = 'yel
Thumbnail
2025/01/29
🤔 簡單且靜態就足夠了? 相信我們在開發Python應用程式的過程中, 常常會借用Enum來定義我們可能的選項, 就像顏色紅、綠、黃會有這樣的結構: class Color(str, Enum): RED = 'red' GREED = 'green' YELLOW = 'yel
Thumbnail
2025/01/08
當我們的系統發展到一定程度時, 難免會面臨到正式上線的問題, 要如何讓維運更加簡易呢? 尤其隨著複雜的客製化配置的出現時, 我們應該如何有效的管理, 甚至驗證配置是否如預期資料型態、格式…, 而正好 pydantic 可以滿足這樣的需求, 就讓我們來看看怎麼使用吧! 需安裝的套件 pip i
Thumbnail
2025/01/08
當我們的系統發展到一定程度時, 難免會面臨到正式上線的問題, 要如何讓維運更加簡易呢? 尤其隨著複雜的客製化配置的出現時, 我們應該如何有效的管理, 甚至驗證配置是否如預期資料型態、格式…, 而正好 pydantic 可以滿足這樣的需求, 就讓我們來看看怎麼使用吧! 需安裝的套件 pip i
Thumbnail
2025/01/02
要如何使用unicorn啟動多個FastAPI服務, 歡迎參考我們的「【💊 Python的解憂錦囊 - FastAPI】如何啟動多個Workers」。 當我們試著設計帶入模組化時… 我們在「【💊 Python的解憂錦囊 - FastAPI】使用 lifespan 來共享資料與管理生命週期
Thumbnail
2025/01/02
要如何使用unicorn啟動多個FastAPI服務, 歡迎參考我們的「【💊 Python的解憂錦囊 - FastAPI】如何啟動多個Workers」。 當我們試著設計帶入模組化時… 我們在「【💊 Python的解憂錦囊 - FastAPI】使用 lifespan 來共享資料與管理生命週期
Thumbnail
看更多
你可能也想看
Thumbnail
嗨!歡迎來到 vocus vocus 方格子是台灣最大的內容創作與知識變現平台,並且計畫持續拓展東南亞等等國際市場。我們致力於打造讓創作者能夠自由發表、累積影響力並獲得實質收益的創作生態圈!「創作至上」是我們的核心價值,我們致力於透過平台功能與服務,賦予創作者更多的可能。 vocus 平台匯聚了
Thumbnail
嗨!歡迎來到 vocus vocus 方格子是台灣最大的內容創作與知識變現平台,並且計畫持續拓展東南亞等等國際市場。我們致力於打造讓創作者能夠自由發表、累積影響力並獲得實質收益的創作生態圈!「創作至上」是我們的核心價值,我們致力於透過平台功能與服務,賦予創作者更多的可能。 vocus 平台匯聚了
Thumbnail
什麼是Python python是電腦程式語言的一種,如同python官方網站上的介紹 "Python是一種程式語,可讓你更快速地工作並更有效的整合系統"。簡單地說,就是你可用python這個程式語言去告訴電腦你想要作什麼,讓電腦來幫你完成你要作的事情。
Thumbnail
什麼是Python python是電腦程式語言的一種,如同python官方網站上的介紹 "Python是一種程式語,可讓你更快速地工作並更有效的整合系統"。簡單地說,就是你可用python這個程式語言去告訴電腦你想要作什麼,讓電腦來幫你完成你要作的事情。
Thumbnail
Python是一種易學且功能強大的程式語言,具有直譯、動態語法等特性,並擁有豐富的標準庫。它在各領域如Web開發、數據科學和人工智慧等得到廣泛應用,並被許多大公司如Google和Facebook等使用。Python還有強大的框架、豐富的交互機能、和龐大的社區。
Thumbnail
Python是一種易學且功能強大的程式語言,具有直譯、動態語法等特性,並擁有豐富的標準庫。它在各領域如Web開發、數據科學和人工智慧等得到廣泛應用,並被許多大公司如Google和Facebook等使用。Python還有強大的框架、豐富的交互機能、和龐大的社區。
Thumbnail
從 JavaScript 到 Python
Thumbnail
從 JavaScript 到 Python
Thumbnail
寫程式不僅只是能動, 更要能夠看得懂, 如果我們的程式碼可以更貼近人類能懂的語言時, 後續的維護肯定會大幅度的減少成本, 想想我們回頭看看三個月前的程式碼是什麼感受吧…😫😫😫, 為了避免這樣的窘境, 我們還真的應該好好的為我們的程式碼負責, 除了「【🔒 Python 先修班】培養良好的Cod
Thumbnail
寫程式不僅只是能動, 更要能夠看得懂, 如果我們的程式碼可以更貼近人類能懂的語言時, 後續的維護肯定會大幅度的減少成本, 想想我們回頭看看三個月前的程式碼是什麼感受吧…😫😫😫, 為了避免這樣的窘境, 我們還真的應該好好的為我們的程式碼負責, 除了「【🔒 Python 先修班】培養良好的Cod
Thumbnail
我們在「【🔒 Python 先修班】⬆️ 培養良好的Coding Style讓專業度 Up!Up!Up!」談到了Coding Style, 在文末也分享了pylint的程式碼檢查工具, 雖然內建、簡單快速上手, 但隨著技術的演進, 我們總需要又快、又好、又簡單的工具做為預設的工具庫, Ruff
Thumbnail
我們在「【🔒 Python 先修班】⬆️ 培養良好的Coding Style讓專業度 Up!Up!Up!」談到了Coding Style, 在文末也分享了pylint的程式碼檢查工具, 雖然內建、簡單快速上手, 但隨著技術的演進, 我們總需要又快、又好、又簡單的工具做為預設的工具庫, Ruff
Thumbnail
對於剛學習 Rust 的人來說,最一開始不是看 Youtube 的影片或是跟著 Rust 官方手冊 The Book 學習,這邊來推薦一個練習 Rust 的專案,名為 rustlings。 rustlings 包含著一些簡單的題目,來讓你更習慣閱讀或編寫 Rust 程式碼。該專案會在每道題目上給予
Thumbnail
對於剛學習 Rust 的人來說,最一開始不是看 Youtube 的影片或是跟著 Rust 官方手冊 The Book 學習,這邊來推薦一個練習 Rust 的專案,名為 rustlings。 rustlings 包含著一些簡單的題目,來讓你更習慣閱讀或編寫 Rust 程式碼。該專案會在每道題目上給予
Thumbnail
相信玩過Python一陣子的朋友應該曾經都遇到過套件版本衝突的問題吧…, 這實在是很惱人, 但如果我們能夠快速的檢驗我們所安裝的套件是否如我們所預期的版本, 該有多好, 如此一來能夠讓自己更加安心一些, 那麼今天將提供兩種方法讓我們來檢查一番。 列出所有套件及版本 簡單且暴力。 pip lis
Thumbnail
相信玩過Python一陣子的朋友應該曾經都遇到過套件版本衝突的問題吧…, 這實在是很惱人, 但如果我們能夠快速的檢驗我們所安裝的套件是否如我們所預期的版本, 該有多好, 如此一來能夠讓自己更加安心一些, 那麼今天將提供兩種方法讓我們來檢查一番。 列出所有套件及版本 簡單且暴力。 pip lis
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News