參數(shù)精準(zhǔn)控制 docstring 覆蓋率檢查)
interrogate 命令行完全指南19 個(gè)參數(shù)精準(zhǔn)控制 docstring 覆蓋率檢查【免費(fèi)下載鏈接】interrogateExplain yourself! Interrogate a codebase for docstring coverage.項(xiàng)目地址: https://gitcode.com/gh_mirrors/in/interrogateinterrogate 是一款開(kāi)源的 Pythondocstring 覆蓋率檢查命令行工具它逐個(gè)掃描代碼中的模塊、類(lèi)、方法與函數(shù)精確統(tǒng)計(jì)哪些寫(xiě)了文檔字符串、哪些沒(méi)有并輸出覆蓋率百分比。對(duì)于想把代碼文檔質(zhì)量管起來(lái)的團(tuán)隊(duì)和個(gè)人開(kāi)發(fā)者interrogate 是把 docstring 覆蓋率變成可量化指標(biāo)的終極利器。本文將帶你從零上手一次性掌握它的19 個(gè)核心參數(shù)并學(xué)會(huì)用pyproject.toml、CI/CD 把覆蓋率檢查固化到日常流程中。interrogate 是什么為什么需要 docstring 覆蓋率檢查Python 的 docstring 是寫(xiě)在模塊、類(lèi)、函數(shù)開(kāi)頭的一段字符串文檔。它是help()、Sphinx、pydoc 等工具的數(shù)據(jù)源但很多項(xiàng)目寫(xiě)代碼時(shí)常常忘了補(bǔ)文檔。interrogate 正是為了解決文檔到底寫(xiě)了多少這個(gè)問(wèn)題而生量化文檔健康度用百分比告訴你項(xiàng)目文檔覆蓋了多少告別憑感覺(jué)守住底線接入 CI/CD 后覆蓋率不達(dá)標(biāo)就構(gòu)建失敗強(qiáng)制新代碼補(bǔ)文檔精準(zhǔn)定位-vv詳細(xì)模式直接列出每一個(gè)漏網(wǎng)之魚(yú)所在文件與行號(hào)。interrogate 支持 Python 3.8 及以上版本安裝只需一條命令pip install interrogate快速上手第一條 interrogate 命令在項(xiàng)目根目錄直接運(yùn)行不傳路徑則默認(rèn)掃描當(dāng)前目錄$ interrogate RESULT: PASSED (minimum: 80.0%, actual: 100.0%)默認(rèn)要求覆蓋率不低于 80%達(dá)標(biāo)顯示PASSED否則返回FAILED并讓進(jìn)程以退出碼 1 結(jié)束——這正是它能在 CI 里當(dāng)門(mén)衛(wèi)的關(guān)鍵。加上-v查看每個(gè)文件的摘要統(tǒng)計(jì)$ interrogate -v src Coverage for /path/to/project/src/ ------------------------------------ Summary ------------------------------------ | Name | Total | Miss | Cover | Cover% | |--------------------------------|---------|--------|---------|----------| | interrogate/__init__.py | 1 | 0 | 1 | 100% | | interrogate/cli.py | 2 | 0 | 2 | 100% | | interrogate/partial.py | 29 | 19 | 10 | 34% | |--------------------------------|---------|--------|---------|----------| | TOTAL | 32 | 19 | 13 | 40.6% | ---------------- RESULT: FAILED (minimum: 80.0%, actual: 40.6%) ----------------再加上一檔-vv還會(huì)多出詳細(xì)覆蓋率表逐個(gè)列出每個(gè)類(lèi)、方法、函數(shù)的COVERED/MISSED狀態(tài)和行號(hào)方便直接去補(bǔ)文檔。這些輸出邏輯都實(shí)現(xiàn)在 coverage.py 中。19 個(gè)核心參數(shù)速查表interrogate 的命令行參數(shù)都定義在 cli.py 中除去輔助項(xiàng)核心可配置參數(shù)正好 19 個(gè)先收藏這張速查表參數(shù)作用默認(rèn)值-v, --verbose輸出詳細(xì)程度可疊加-v/-vv0-q, --quiet不打印任何輸出關(guān)閉-f, --fail-under低于該覆蓋率則失敗80.0-e, --exclude排除文件/目錄可多次指定空-i, --ignore-init-method忽略類(lèi)的__init__方法關(guān)閉-I, --ignore-init-module忽略__init__.py模塊關(guān)閉-m, --ignore-magic忽略魔法方法不含__init__關(guān)閉-M, --ignore-module忽略模塊級(jí) docstring關(guān)閉-C, --ignore-nested-classes忽略嵌套類(lèi)關(guān)閉-n, --ignore-nested-functions忽略嵌套函數(shù)與內(nèi)部方法關(guān)閉-O, --ignore-overloaded-functions忽略typing.overload裝飾函數(shù)關(guān)閉-p, --ignore-private忽略雙下劃線開(kāi)頭的私有成員關(guān)閉-P, --ignore-property-decorators忽略 property getter/setter/deleter關(guān)閉-S, --ignore-setters忽略 property setter 方法關(guān)閉-s, --ignore-semiprivate忽略單下劃線開(kāi)頭的半私有成員關(guān)閉-r, --ignore-regex按正則忽略指定名稱(chēng)可多次指定空--ext額外掃描.pyi等 Python 類(lèi)文件空-w, --whitelist-regex按正則白名單只統(tǒng)計(jì)指定名稱(chēng)空--styledocstring 風(fēng)格sphinx/googlesphinx下面按類(lèi)別逐一詳解??刂戚敵雠c檢查結(jié)果-v、-q、--fail-under三檔輸出詳細(xì)程度-v 與 -vv 不加參數(shù)只打印一行RESULT: PASSED/FAILED-v額外輸出每個(gè)文件的摘要表-vv在摘要表基礎(chǔ)上追加逐成員的詳細(xì)覆蓋表。注意在pyproject.toml里配置時(shí)verbose1對(duì)應(yīng)-vverbose2對(duì)應(yīng)-vv。靜默模式-q 只關(guān)心退出碼、不關(guān)心輸出時(shí)使用非常適合接入 CI 任務(wù)interrogate --quiet --fail-under 95 src tests覆蓋率門(mén)檻--fail-under 類(lèi)型可以是整數(shù)或浮點(diǎn)數(shù)如--fail-under 95.5。計(jì)算規(guī)則為已覆蓋數(shù) / 總數(shù) × 100%當(dāng)結(jié)果低于門(mén)檻時(shí)退出碼為 1??刂茠呙璺秶?e、--ext排除指定路徑--exclude 自動(dòng)生成文檔、遷移腳本這類(lèi)文件往往不需要 docstring用-e排除可多次指定interrogate -v -e docs -e setup.py -e tests/fixtures srcinterrogate 默認(rèn)還會(huì)自動(dòng)排除.tox、.venv、venv、.git、.hg等常見(jiàn)目錄。掃描 .pyi 等類(lèi)型文件--ext 默認(rèn)只掃描.py文件想順帶檢查類(lèi)型存根.pyi文件時(shí)interrogate --ext pyi src13 個(gè) ignore 參數(shù)按需豁免檢查對(duì)象忽略參數(shù)是 interrogate 的精華它們的作用從代碼注釋到魔法方法全覆蓋邏輯實(shí)現(xiàn)在 visit.py 的 AST 遍歷器中。模塊與類(lèi)級(jí)別-M / -I / -i / -m / -C / -n-M/--ignore-module不要求模塊頂部有 docstring-I/--ignore-init-module跳過(guò)所有__init__.py-i/--ignore-init-method不要求類(lèi)的__init__寫(xiě) docstring很多項(xiàng)目遵循類(lèi) docstring 已說(shuō)明一切-m/--ignore-magic跳過(guò)__str__、__repr__等魔法方法不含__init__兩者要分開(kāi)配置-C/--ignore-nested-classes與-n/--ignore-nested-functions忽略定義在函數(shù)/類(lèi)內(nèi)部的嵌套結(jié)構(gòu)。類(lèi)成員級(jí)別-p / -s / -P / -S / -O-p/--ignore-private忽略__xxx開(kāi)頭的私有類(lèi)、方法、函數(shù)不含魔法方法-s/--ignore-semiprivate忽略_xxx開(kāi)頭的半私有成員-P/--ignore-property-decorators忽略帶propertygetter/setter/deleter 的方法-S/--ignore-setters只忽略 setter-O/--ignore-overloaded-functions忽略typing.overload裝飾的重載函數(shù)這些只是類(lèi)型聲明無(wú)需 docstring。一次疊加多個(gè)豁免參數(shù)非常常見(jiàn)例如interrogate -v -i -m -M -p -s -O src正則與文檔風(fēng)格-r、-w、--style用正則精準(zhǔn)忽略--ignore-regex 當(dāng)命名規(guī)則無(wú)法用前綴概括時(shí)正則就是終極方案支持多次指定interrogate -v -r ^get -r .*BaseClass$ -r mock_.* src白名單模式--whitelist-regex ?與忽略相反-w只統(tǒng)計(jì)匹配正則的名稱(chēng)其余一律不算入分母。開(kāi)啟后模塊級(jí) docstring 也會(huì)被自動(dòng)忽略適合只想考核某個(gè)核心子集的場(chǎng)景。sphinx 與 google 文檔風(fēng)格--style sphinx默認(rèn)類(lèi)與__init__各自都算作獨(dú)立對(duì)象都要有 docstring 才算覆蓋google類(lèi) docstring 或__init__docstring任有其一兩者均視為已覆蓋更貼近 Google 風(fēng)格文檔的慣例。注意--style google與-i/--ignore-init-method互斥同時(shí)使用會(huì)直接報(bào)錯(cuò)。進(jìn)階玩法徽章、配置文件與 CI 集成一鍵生成 docstring 覆蓋率徽章 interrogate 可以生成 shields.io 風(fēng)格的覆蓋率徽章SVG/PNG實(shí)現(xiàn)在 badge_gen.pyinterrogate --generate-badge . --badge-format svg --badge-style flat src--badge-formatsvg默認(rèn)或png生成 PNG 需安裝pip install interrogate[png]--badge-styleflat、flat-square、flat-square-modified默認(rèn)、for-the-badge、plastic、social六種風(fēng)格任選徽章顏色隨覆蓋率變化≥95 亮綠、≥90 綠、≥75 黃綠、≥60 黃、≥40 橙、40 紅只有結(jié)果發(fā)生變化時(shí)才重寫(xiě)徽章避免 CI 產(chǎn)生無(wú)謂的文件改動(dòng)。用 pyproject.toml 固化參數(shù) ??與其把一長(zhǎng)串參數(shù)寫(xiě)進(jìn)每條命令不如沉淀到配置里interrogate 會(huì)自動(dòng)發(fā)現(xiàn)pyproject.toml解析邏輯見(jiàn) config.py[tool.interrogate] fail-under 90 exclude [setup.py, docs, build] ignore-init-method true ignore-magic true ignore-private true ignore-semiprivate true ignore-regex [^get$, ^mock_.*] style sphinx命令行參數(shù)優(yōu)先級(jí)更高兩者可以互相覆蓋靈活組合。接入 CI/CD讓文檔覆蓋率硬起來(lái) 寫(xiě)入tox.ini讓文檔檢查成為獨(dú)立測(cè)試環(huán)境[testenv:doc] deps interrogate skip_install true commands interrogate --quiet --fail-under 95 src tests也可以作為 pre-commit 鉤子每次提交自動(dòng)把關(guān)repos: - repo: https://gitcode.com/gh_mirrors/in/interrogate rev: 1.7.0 hooks: - id: interrogate args: [--quiet, --fail-under95] pass_filenames: false常見(jiàn)問(wèn)題速答 Q怎么快速找出哪些函數(shù)沒(méi)寫(xiě) docstringA用interrogate -vv詳細(xì)表中標(biāo)記為MISSED的條目就是行號(hào)都給你標(biāo)好了。Q如何只檢查單個(gè)文件A直接傳入文件路徑如interrogate -v my_module.py。Q空文件也算覆蓋嗎A空文件算作已覆蓋覆蓋率為 100%配合--omit-covered-files可讓 100% 覆蓋的文件不再出現(xiàn)在報(bào)告中。Q想把報(bào)告保存下來(lái)A用-o report.txt把結(jié)果寫(xiě)入文件--no-color可關(guān)閉顏色方便日志與 CI 存檔??偨Y(jié)interrogate 用 19 個(gè)精悍的參數(shù)把寫(xiě)沒(méi)寫(xiě)文檔這件看似主觀的事變成了可量化、可強(qiáng)制執(zhí)行的質(zhì)量指標(biāo)。無(wú)論是個(gè)人項(xiàng)目自我約束還是團(tuán)隊(duì)在 CI 里設(shè)置覆蓋率紅線它都能在幾分鐘內(nèi)配置完畢、長(zhǎng)期生效?,F(xiàn)在就跑一條interrogate -v看看你的代碼自證清白了沒(méi)有吧【免費(fèi)下載鏈接】interrogateExplain yourself! Interrogate a codebase for docstring coverage.項(xiàng)目地址: https://gitcode.com/gh_mirrors/in/interrogate創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考