All repos · Python (radon CC) · JS/JSX (complexity proxy) · HCL (tflint)
Generated 2026-03-20 10:05 UTC · 8 repos · 29,136 LOC
0 E/F-grade functions/blocks across all repos; target ≤15 CC per unit
17 test file(s), 2,218 test LOC (10.5% of code) — moderate coverage
No exact duplicate files found across repos
Python: 0 bare except, 31 broad except Exception (141 try blocks) · JS: 0 empty catch (2 try blocks)
890 comment lines, 641 docstring lines vs 17,777 source lines (9% doc density) — Python only
21 pipeline file(s) — multi-stage dev→prd, approval gates, test steps
1 potential hardcoded secret(s): analysis/summary.py: hardcoded secret
| Score | File | Lang | Lines | Issues | Suggestion |
|---|---|---|---|---|---|
| 5 | scraper/classifier.py | py | 325 | Break up _classify_product() (CC 26) — extract 2–3 sub-functions to lower complexity below 10 |
|
| 5 | scraper/main.py | py | 302 | Break up main() (CC 23) — extract 2–3 sub-functions to lower complexity below 10 |
|
| 5 | scraper/browser.py | py | 292 | Break up handle_cloudflare() (CC 24) — extract 2–3 sub-functions to lower complexity below 10 |
|
| 7 | scripts/recalculate_metrics.py | py | 409 | Large file — consider splitting into smaller modules as it grows | |
| 7 | scraper/parser.py | py | 395 | Minor: scrape_product_page() (CC 19) is borderline — add early returns or extract helpers if it grows |
|
| 7 | scraper/summary.py | py | 250 | Minor: _partition_listings() (CC 14) is borderline — add early returns or extract helpers if it grows |
|
| 7 | scripts/reclassify.py | py | 223 | Minor: _parse_response() (CC 12) is borderline — add early returns or extract helpers if it grows |
|
| 9 | scripts/smoke_test.py | py | 211 | No action needed | |
| 9 | scraper/reporter.py | py | 202 | No action needed | |
| 9 | scraper/sentiment.py | py | 152 | No action needed | |
| 9 | tests/test_classify.py | py | 143 | No action needed | |
| 9 | tests/test_db.py | py | 142 | No action needed | |
| 9 | scripts/migrate_sqlite_to_pg.py | py | 141 | No action needed | |
| 9 | tests/test_db_pool.py | py | 141 | No action needed | |
| 9 | scraper/config.py | py | 124 | No action needed | |
| 9 | scraper/recommendations.py | py | 124 | No action needed | |
| 9 | scripts/db_summary.py | py | 99 | No action needed | |
| 10 | api/main.py | py | 227 | No action needed | |
| 10 | tests/test_recalculate_metrics.py | py | 204 | No action needed | |
| 10 | tests/test_sentiment.py | py | 136 | No action needed | |
| 10 | .azuredevops/link_pr_workitem.py | py | 135 | No action needed | |
| 10 | tests/conftest.py | py | 34 | No action needed | |
| 10 | scraper/debug.py | py | 12 | No action needed | |
| 10 | scraper/__init__.py | py | 0 | No action needed |
| Score | File | Lang | Lines | Issues | Suggestion |
|---|---|---|---|---|---|
| 7 | scripts/gen_release_notes.py | py | 267 | Minor: _build() (CC 11) is borderline — add early returns or extract helpers if it grows |
|
| 9 | scripts/smoke_test.py | py | 213 | No action needed | |
| 9 | scripts/gen_sitemap.py | py | 92 | No action needed | |
| 10 | api/main.py | py | 227 | No action needed | |
| 10 | tests/test_api.py | py | 177 | No action needed | |
| 10 | tests/test_smoke_test.py | py | 147 | No action needed | |
| 10 | .azuredevops/link_pr_workitem.py | py | 135 | No action needed | |
| 10 | tests/conftest.py | py | 23 | No action needed |
| Score | File | Lang | Lines | Issues | Suggestion |
|---|---|---|---|---|---|
| 7 | backend/water.py | py | 286 | Minor: _fetch_osm_mask() (CC 13) is borderline — add early returns or extract helpers if it grows |
|
| 7 | scripts/gen_release_notes.py | py | 267 | Minor: _build() (CC 11) is borderline — add early returns or extract helpers if it grows |
|
| 9 | backend/mesh.py | py | 491 | Large file — consider splitting into smaller modules as it grows | |
| 9 | backend/terrain.py | py | 194 | No action needed | |
| 9 | backend/test_gpx_parser.py | py | 173 | No action needed | |
| 9 | backend/routers/process.py | py | 147 | No action needed | |
| 9 | backend/routers/orders.py | py | 115 | No action needed | |
| 9 | backend/gpx_parser.py | py | 82 | No action needed | |
| 9 | backend/test_demos.py | py | 78 | No action needed | |
| 9 | backend/routers/share.py | py | 76 | No action needed | |
| 10 | backend/db.py | py | 200 | No action needed | |
| 10 | backend/routers/admin.py | py | 143 | No action needed | |
| 10 | backend/build_demos.py | py | 103 | No action needed | |
| 10 | backend/blob.py | py | 80 | No action needed | |
| 10 | backend/email_utils.py | py | 80 | No action needed | |
| 10 | backend/main.py | py | 71 | No action needed | |
| 10 | backend/pricing.py | py | 18 | No action needed | |
| 10 | backend/routers/__init__.py | py | 0 | No action needed |
| Score | File | Lang | Lines | Issues | Suggestion |
|---|---|---|---|---|---|
| 7 | scripts/gen_release_notes.py | py | 265 | Minor: _build() (CC 11) is borderline — add early returns or extract helpers if it grows |
|
| 9 | migrations/generate_pokemon_import.py | py | 265 | No action needed | |
| 9 | api/routers/invoices.py | py | 204 | No action needed | |
| 9 | api/routers/inventory.py | py | 185 | No action needed | |
| 9 | api/routers/orders.py | py | 167 | No action needed | |
| 9 | api/main.py | py | 98 | No action needed | |
| 10 | frontend/src/pages/ProductDetail.jsx | js | 244 | Growing file — consider splitting by responsibility | |
| 10 | frontend/src/pages/Inventory.jsx | js | 132 | No action needed | |
| 10 | tests/test_inventory.py | py | 92 | No action needed | |
| 10 | frontend/src/pages/Invoices.jsx | js | 88 | No action needed | |
| 10 | frontend/src/App.jsx | js | 86 | No action needed | |
| 10 | frontend/src/pages/Orders.jsx | js | 81 | No action needed | |
| 10 | db.py | py | 78 | No action needed | |
| 10 | frontend/src/pages/WhatsNew.jsx | js | 74 | No action needed | |
| 10 | frontend/src/auth.js | js | 43 | No action needed | |
| 10 | api/routers/pricing.py | py | 35 | No action needed | |
| 10 | frontend/src/main.jsx | js | 14 | No action needed | |
| 10 | frontend/vite.config.js | js | 12 | No action needed | |
| 10 | api/routers/__init__.py | py | 0 | No action needed | |
| 10 | tests/__init__.py | py | 0 | No action needed |
| Score | File | Lang | Lines | Issues | Suggestion |
|---|---|---|---|---|---|
| 7 | datacore/db.py | py | 904 | God file — split by responsibility into separate modules | |
| 10 | datacore/api/main.py | py | 227 | No action needed | |
| 10 | datacore/__init__.py | py | 9 | No action needed | |
| 10 | datacore/api/__init__.py | py | 0 | No action needed |
| Score | File | Lang | Lines | Issues | Suggestion |
|---|---|---|---|---|---|
| 5 | quality.py | py | 1,111 | God file — split by responsibility into separate modules | |
| 5 | index.py | py | 754 | Break up build_html() (CC 21) — extract 2–3 sub-functions to lower complexity below 10 |
|
| 5 | delivery/delivery_dashboard.py | py | 656 | Break up build_html() (CC 22) — extract 2–3 sub-functions to lower complexity below 10 |
|
| 5 | pipelines/pipeline_dashboard.py | py | 396 | Break up build_html() (CC 28) — extract 2–3 sub-functions to lower complexity below 10 |
|
| 5 | scraper/scraper_health.py | py | 355 | Break up crunch() (CC 30) — extract 2–3 sub-functions to lower complexity below 10 |
|
| 7 | leverage/report.py | py | 2,160 | God file — split by responsibility into separate modules | |
| 7 | ado/close_completed.py | py | 377 | Minor: print_report() (CC 12) is borderline — add early returns or extract helpers if it grows |
|
| 9 | leverage/summary.py | py | 1,437 | God file — split by responsibility into separate modules | |
| 9 | leverage/report_data.py | py | 971 | God file — split by responsibility into separate modules | |
| 9 | leverage/collect.py | py | 759 | Large file — consider splitting into smaller modules as it grows | |
| 9 | cost/cost.py | py | 730 | Large file — consider splitting into smaller modules as it grows | |
| 9 | leverage/summary_data.py | py | 402 | Large file — consider splitting into smaller modules as it grows | |
| 9 | ado/ado.py | py | 372 | No action needed | |
| 9 | leverage/calibrate.py | py | 348 | No action needed | |
| 9 | release_notes.py | py | 319 | No action needed | |
| 10 | tests/test_close_completed.py | py | 196 | No action needed | |
| 10 | projections/ai_value_projection.py | py | 163 | No action needed | |
| 10 | tests/test_calibrate.py | py | 108 | No action needed | |
| 10 | projections/value_projection.py | py | 93 | No action needed | |
| 10 | tz_utils.py | py | 61 | No action needed |
No source files found.
| Score | File | Lang | Lines | Issues | Suggestion |
|---|---|---|---|---|---|
| 9 | modules/scraper/main.tf | hcl | 546 | Consider splitting into smaller modules by resource type | |
| 9 | modules/app/main.tf | hcl | 161 | No action needed | |
| 10 | modules/cardmarket/main.tf | hcl | 631 | Consider splitting into smaller modules by resource type | |
| 10 | envs/ado/main.tf | hcl | 438 | Consider splitting into smaller modules by resource type | |
| 10 | modules/3dtrails/main.tf | hcl | 343 | Consider splitting into smaller modules by resource type | |
| 10 | envs/dev/main.tf | hcl | 237 | No action needed | |
| 10 | envs/prd/main.tf | hcl | 218 | No action needed | |
| 10 | modules/tradehub/main.tf | hcl | 202 | No action needed | |
| 10 | modules/data/main.tf | hcl | 152 | No action needed | |
| 10 | modules/analysis/main.tf | hcl | 149 | No action needed | |
| 10 | modules/monitoring/main.tf | hcl | 144 | No action needed | |
| 10 | modules/scraper/variables.tf | hcl | 123 | No action needed | |
| 10 | modules/cardmarket/variables.tf | hcl | 112 | No action needed | |
| 10 | modules/app/variables.tf | hcl | 106 | No action needed | |
| 10 | envs/dev/trails/main.tf | hcl | 86 | No action needed | |
| 10 | modules/cicd/main.tf | hcl | 84 | No action needed | |
| 10 | envs/dev/data/main.tf | hcl | 81 | No action needed | |
| 10 | envs/dev/app/main.tf | hcl | 79 | No action needed | |
| 10 | envs/prd/app/main.tf | hcl | 79 | No action needed | |
| 10 | envs/prd/data/main.tf | hcl | 76 | No action needed | |
| 10 | envs/prd/trails/main.tf | hcl | 76 | No action needed | |
| 10 | modules/tradehub/variables.tf | hcl | 76 | No action needed | |
| 10 | modules/3dtrails/variables.tf | hcl | 75 | No action needed | |
| 10 | envs/dev/scraper/main.tf | hcl | 72 | No action needed | |
| 10 | envs/monitoring/main.tf | hcl | 72 | No action needed | |
| 10 | envs/prd/scraper/main.tf | hcl | 70 | No action needed | |
| 10 | envs/prd/tradehub/main.tf | hcl | 67 | No action needed | |
| 10 | modules/analysis/variables.tf | hcl | 67 | No action needed | |
| 10 | envs/dev/tradehub/main.tf | hcl | 66 | No action needed | |
| 10 | envs/prd/analysis/main.tf | hcl | 61 | No action needed | |
| 10 | envs/dev/analysis/main.tf | hcl | 60 | No action needed | |
| 10 | bootstrap/create-remote-storage.tf | hcl | 59 | No action needed | |
| 10 | modules/platform/main.tf | hcl | 59 | No action needed | |
| 10 | modules/cicd/variables.tf | hcl | 58 | No action needed | |
| 10 | modules/data/variables.tf | hcl | 54 | No action needed | |
| 10 | envs/dev/platform/main.tf | hcl | 52 | No action needed | |
| 10 | envs/prd/platform/main.tf | hcl | 52 | No action needed | |
| 10 | envs/dev/cicd/main.tf | hcl | 51 | No action needed | |
| 10 | envs/prd/cicd/main.tf | hcl | 51 | No action needed | |
| 10 | modules/cardmarket/outputs.tf | hcl | 50 | No action needed | |
| 10 | modules/data/outputs.tf | hcl | 46 | No action needed | |
| 10 | modules/monitoring/variables.tf | hcl | 37 | No action needed | |
| 10 | modules/platform/variables.tf | hcl | 31 | No action needed | |
| 10 | modules/platform/outputs.tf | hcl | 30 | No action needed | |
| 10 | modules/analysis/outputs.tf | hcl | 26 | No action needed | |
| 10 | modules/tradehub/outputs.tf | hcl | 21 | No action needed | |
| 10 | modules/3dtrails/outputs.tf | hcl | 20 | No action needed | |
| 10 | modules/monitoring/outputs.tf | hcl | 17 | No action needed | |
| 10 | modules/app/outputs.tf | hcl | 15 | No action needed | |
| 10 | envs/ado/variables.tf | hcl | 14 | No action needed | |
| 10 | envs/ado/backend.tf | hcl | 10 | No action needed | |
| 10 | envs/dev/analysis/backend.tf | hcl | 10 | No action needed | |
| 10 | envs/dev/app/backend.tf | hcl | 10 | No action needed | |
| 10 | envs/dev/backend.tf | hcl | 10 | No action needed | |
| 10 | envs/dev/cicd/backend.tf | hcl | 10 | No action needed | |
| 10 | envs/dev/data/backend.tf | hcl | 10 | No action needed | |
| 10 | envs/dev/platform/backend.tf | hcl | 10 | No action needed | |
| 10 | envs/dev/scraper/backend.tf | hcl | 10 | No action needed | |
| 10 | envs/dev/tradehub/backend.tf | hcl | 10 | No action needed | |
| 10 | envs/dev/trails/backend.tf | hcl | 10 | No action needed | |
| 10 | envs/monitoring/backend.tf | hcl | 10 | No action needed | |
| 10 | envs/prd/analysis/backend.tf | hcl | 10 | No action needed | |
| 10 | envs/prd/app/backend.tf | hcl | 10 | No action needed | |
| 10 | envs/prd/backend.tf | hcl | 10 | No action needed | |
| 10 | envs/prd/cicd/backend.tf | hcl | 10 | No action needed | |
| 10 | envs/prd/data/backend.tf | hcl | 10 | No action needed | |
| 10 | envs/prd/platform/backend.tf | hcl | 10 | No action needed | |
| 10 | envs/prd/scraper/backend.tf | hcl | 10 | No action needed | |
| 10 | envs/prd/tradehub/backend.tf | hcl | 10 | No action needed | |
| 10 | envs/prd/trails/backend.tf | hcl | 10 | No action needed | |
| 10 | modules/scraper/outputs.tf | hcl | 5 | No action needed |