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

更新 發佈閱讀 6 分鐘
vocus|新世代的創作平台


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

vocus|新世代的創作平台

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

什麼是Linter?

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

vocus|新世代的創作平台

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

安裝無負擔

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

pip install ruff

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

vocus|新世代的創作平台

基本指令導覽

我們可以對某個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 擴展,它支援修復操作、導入排序等。

vocus|新世代的創作平台


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

vocus|新世代的創作平台


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

vocus|新世代的創作平台

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


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

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


結語

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


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

留言
avatar-img
阿Han的沙龍
165會員
332內容數
哈囉,我是阿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
我們在「【🔒 Python 先修班】⬆️ 培養良好的Coding Style讓專業度 Up!Up!Up!」談到了Coding Style, 在文末也分享了pylint的程式碼檢查工具, 雖然內建、簡單快速上手, 但隨著技術的演進, 我們總需要又快、又好、又簡單的工具做為預設的工具庫, Ruff
Thumbnail
我們在「【🔒 Python 先修班】⬆️ 培養良好的Coding Style讓專業度 Up!Up!Up!」談到了Coding Style, 在文末也分享了pylint的程式碼檢查工具, 雖然內建、簡單快速上手, 但隨著技術的演進, 我們總需要又快、又好、又簡單的工具做為預設的工具庫, Ruff
Thumbnail
寫程式不僅只是能動, 更要能夠看得懂, 如果我們的程式碼可以更貼近人類能懂的語言時, 後續的維護肯定會大幅度的減少成本, 想想我們回頭看看三個月前的程式碼是什麼感受吧…😫😫😫, 為了避免這樣的窘境, 我們還真的應該好好的為我們的程式碼負責, 除了「【🔒 Python 先修班】培養良好的Cod
Thumbnail
寫程式不僅只是能動, 更要能夠看得懂, 如果我們的程式碼可以更貼近人類能懂的語言時, 後續的維護肯定會大幅度的減少成本, 想想我們回頭看看三個月前的程式碼是什麼感受吧…😫😫😫, 為了避免這樣的窘境, 我們還真的應該好好的為我們的程式碼負責, 除了「【🔒 Python 先修班】培養良好的Cod
Thumbnail
軟體開發的時候, 我們通常會與一個團隊一起奮鬥, 那團隊之間勢必需要培養一個良好的默契, 以及相近的風格, 這樣共事起來才會更加的有效率, 而Coding Style就是讓團隊具有一個參考的標準, 但風格百百種, 我們究竟應該怎麼選擇呢? 這個篇章我們會建議及幫助您選擇一個良好的Coding St
Thumbnail
軟體開發的時候, 我們通常會與一個團隊一起奮鬥, 那團隊之間勢必需要培養一個良好的默契, 以及相近的風格, 這樣共事起來才會更加的有效率, 而Coding Style就是讓團隊具有一個參考的標準, 但風格百百種, 我們究竟應該怎麼選擇呢? 這個篇章我們會建議及幫助您選擇一個良好的Coding St
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
從 JavaScript 到 Python
Thumbnail
從 JavaScript 到 Python
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
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
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
Python是一種易學且功能強大的程式語言,具有直譯、動態語法等特性,並擁有豐富的標準庫。它在各領域如Web開發、數據科學和人工智慧等得到廣泛應用,並被許多大公司如Google和Facebook等使用。Python還有強大的框架、豐富的交互機能、和龐大的社區。
Thumbnail
Python是一種易學且功能強大的程式語言,具有直譯、動態語法等特性,並擁有豐富的標準庫。它在各領域如Web開發、數據科學和人工智慧等得到廣泛應用,並被許多大公司如Google和Facebook等使用。Python還有強大的框架、豐富的交互機能、和龐大的社區。
Thumbnail
什麼是Python python是電腦程式語言的一種,如同python官方網站上的介紹 "Python是一種程式語,可讓你更快速地工作並更有效的整合系統"。簡單地說,就是你可用python這個程式語言去告訴電腦你想要作什麼,讓電腦來幫你完成你要作的事情。
Thumbnail
什麼是Python python是電腦程式語言的一種,如同python官方網站上的介紹 "Python是一種程式語,可讓你更快速地工作並更有效的整合系統"。簡單地說,就是你可用python這個程式語言去告訴電腦你想要作什麼,讓電腦來幫你完成你要作的事情。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News