repoglance 0.3.0__tar.gz → 0.4.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. repoglance-0.4.0/.repoglance-badge.json +1 -0
  2. {repoglance-0.3.0 → repoglance-0.4.0}/CHANGELOG.md +21 -0
  3. {repoglance-0.3.0 → repoglance-0.4.0}/PKG-INFO +14 -4
  4. {repoglance-0.3.0 → repoglance-0.4.0}/README.md +13 -3
  5. repoglance-0.4.0/assets/demo.svg +391 -0
  6. repoglance-0.4.0/assets/showcase/flask.svg +312 -0
  7. repoglance-0.4.0/assets/showcase/httpie.svg +351 -0
  8. repoglance-0.4.0/assets/showcase/requests.svg +326 -0
  9. repoglance-0.4.0/editors/vscode/README.md +19 -0
  10. repoglance-0.4.0/editors/vscode/extension.js +63 -0
  11. repoglance-0.4.0/editors/vscode/package.json +26 -0
  12. repoglance-0.4.0/packaging/homebrew/repoglance.rb +34 -0
  13. {repoglance-0.3.0 → repoglance-0.4.0}/pyproject.toml +1 -1
  14. {repoglance-0.3.0 → repoglance-0.4.0}/src/repoglance/__init__.py +1 -1
  15. repoglance-0.4.0/src/repoglance/cache.py +59 -0
  16. {repoglance-0.3.0 → repoglance-0.4.0}/src/repoglance/cli.py +122 -53
  17. repoglance-0.4.0/src/repoglance/dedup.py +70 -0
  18. {repoglance-0.3.0 → repoglance-0.4.0}/src/repoglance/gitinfo.py +20 -0
  19. repoglance-0.4.0/src/repoglance/plugins.py +43 -0
  20. {repoglance-0.3.0 → repoglance-0.4.0}/src/repoglance/report.py +42 -0
  21. {repoglance-0.3.0 → repoglance-0.4.0}/src/repoglance/scanner.py +79 -26
  22. repoglance-0.4.0/src/repoglance/vendored.py +57 -0
  23. repoglance-0.4.0/tests/test_v040.py +70 -0
  24. repoglance-0.3.0/.repoglance-badge.json +0 -1
  25. repoglance-0.3.0/assets/demo.svg +0 -329
  26. repoglance-0.3.0/assets/showcase/flask.svg +0 -308
  27. repoglance-0.3.0/assets/showcase/httpie.svg +0 -347
  28. repoglance-0.3.0/assets/showcase/requests.svg +0 -322
  29. {repoglance-0.3.0 → repoglance-0.4.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  30. {repoglance-0.3.0 → repoglance-0.4.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  31. {repoglance-0.3.0 → repoglance-0.4.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  32. {repoglance-0.3.0 → repoglance-0.4.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  33. {repoglance-0.3.0 → repoglance-0.4.0}/.github/workflows/ci.yml +0 -0
  34. {repoglance-0.3.0 → repoglance-0.4.0}/.github/workflows/release.yml +0 -0
  35. {repoglance-0.3.0 → repoglance-0.4.0}/.github/workflows/repoglance.yml +0 -0
  36. {repoglance-0.3.0 → repoglance-0.4.0}/.gitignore +0 -0
  37. {repoglance-0.3.0 → repoglance-0.4.0}/.pre-commit-hooks.yaml +0 -0
  38. {repoglance-0.3.0 → repoglance-0.4.0}/CODE_OF_CONDUCT.md +0 -0
  39. {repoglance-0.3.0 → repoglance-0.4.0}/CONTRIBUTING.md +0 -0
  40. {repoglance-0.3.0 → repoglance-0.4.0}/Dockerfile +0 -0
  41. {repoglance-0.3.0 → repoglance-0.4.0}/LICENSE +0 -0
  42. {repoglance-0.3.0 → repoglance-0.4.0}/RELEASING.md +0 -0
  43. {repoglance-0.3.0 → repoglance-0.4.0}/SECURITY.md +0 -0
  44. {repoglance-0.3.0 → repoglance-0.4.0}/action.yml +0 -0
  45. {repoglance-0.3.0 → repoglance-0.4.0}/assets/badge.svg +0 -0
  46. {repoglance-0.3.0 → repoglance-0.4.0}/assets/demo.tape +0 -0
  47. {repoglance-0.3.0 → repoglance-0.4.0}/docs/index.md +0 -0
  48. {repoglance-0.3.0 → repoglance-0.4.0}/integrations/gitlab-ci.yml +0 -0
  49. {repoglance-0.3.0 → repoglance-0.4.0}/mkdocs.yml +0 -0
  50. {repoglance-0.3.0 → repoglance-0.4.0}/src/repoglance/__main__.py +0 -0
  51. {repoglance-0.3.0 → repoglance-0.4.0}/src/repoglance/badge.py +0 -0
  52. {repoglance-0.3.0 → repoglance-0.4.0}/src/repoglance/complexity.py +0 -0
  53. {repoglance-0.3.0 → repoglance-0.4.0}/src/repoglance/config.py +0 -0
  54. {repoglance-0.3.0 → repoglance-0.4.0}/src/repoglance/languages.py +0 -0
  55. {repoglance-0.3.0 → repoglance-0.4.0}/src/repoglance/metrics.py +0 -0
  56. {repoglance-0.3.0 → repoglance-0.4.0}/tests/test_cli.py +0 -0
  57. {repoglance-0.3.0 → repoglance-0.4.0}/tests/test_complexity.py +0 -0
  58. {repoglance-0.3.0 → repoglance-0.4.0}/tests/test_features.py +0 -0
  59. {repoglance-0.3.0 → repoglance-0.4.0}/tests/test_scanner.py +0 -0
  60. {repoglance-0.3.0 → repoglance-0.4.0}/tests/test_scanner_extra.py +0 -0
  61. {repoglance-0.3.0 → repoglance-0.4.0}/tests/test_v030.py +0 -0
@@ -0,0 +1 @@
1
+ {"schemaVersion": 1, "label": "repoglance", "message": "2.7k loc \u2022 Python", "color": "blue"}
@@ -4,6 +4,27 @@ All notable changes to this project are documented here. The format is based on
4
4
  [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project
5
5
  adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
6
 
7
+ ## [0.4.0] - 2026-08-01
8
+
9
+ ### Added
10
+ - **Duplicate-code detection** (`--duplicates`): sliding line-window hashing
11
+ surfaces copy-paste blocks and a duplication percentage.
12
+ - **Vendored/generated detection**: minified bundles, `_pb2.py`, lock files,
13
+ `node_modules`, and files marked `@generated` are excluded by default;
14
+ `--include-vendored` keeps them.
15
+ - **Ownership** (`--owners`): attributes the top complexity hotspots to authors
16
+ via `git blame`.
17
+ - **Incremental cache** (`--cache <file>`): unchanged files are reused across
18
+ runs by mtime + size, speeding up repeated scans.
19
+ - **Plugin API**: third-party packages can register metrics under the
20
+ `repoglance.metrics` entry-point group; results appear under `plugins`.
21
+ - **Watch mode** (`--watch`): re-render the report whenever files change.
22
+ - Homebrew formula template and a minimal VS Code extension (Problems panel).
23
+
24
+ ### Fixed
25
+ - Git subprocesses now decode as UTF-8, fixing crashes on non-Latin-1 blame
26
+ output on Windows.
27
+
7
28
  ## [0.3.0] - 2026-08-01
8
29
 
9
30
  ### Added
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: repoglance
3
- Version: 0.3.0
3
+ Version: 0.4.0
4
4
  Summary: Instant, gorgeous insight into any code repository — languages, complexity hotspots, TODOs and git activity in one terminal command.
5
5
  Project-URL: Homepage, https://github.com/SRJ-ai/repoglance
6
6
  Project-URL: Repository, https://github.com/SRJ-ai/repoglance
@@ -72,9 +72,9 @@ repoglance run against well-known projects (click to view the full report):
72
72
 
73
73
  | Project | Files | Lines of code | Health |
74
74
  |---|--:|--:|:--:|
75
- | [flask](assets/showcase/flask.svg) | 209 | 25,293 | D (67) |
76
- | [httpie](assets/showcase/httpie.svg) | 236 | 20,114 | D (66) |
77
- | [requests](assets/showcase/requests.svg) | 89 | 13,785 | C (72) |
75
+ | [flask](assets/showcase/flask.svg) | 207 | 25,266 | D (67) |
76
+ | [httpie](assets/showcase/httpie.svg) | 234 | 20,023 | D (66) |
77
+ | [requests](assets/showcase/requests.svg) | 88 | 13,709 | C (70) |
78
78
 
79
79
  <div align="center">
80
80
 
@@ -110,6 +110,10 @@ repoglance --baseline base.json # snapshot now
110
110
  repoglance --compare base.json --fail-on-regression # fail on new complexity
111
111
  repoglance --ci --fail-under 70 --max-complexity 25 # gate a build
112
112
  repoglance --include "src/**" --exclude "**/*_pb2.py" # glob filters
113
+ repoglance --duplicates # detect copy-paste blocks
114
+ repoglance --owners # attribute hotspots to authors (git blame)
115
+ repoglance --cache .rg.cache # incremental cache for fast repeat runs
116
+ repoglance --watch # live re-render on file changes
113
117
  repoglance --no-git --jobs 8
114
118
  ```
115
119
 
@@ -128,10 +132,16 @@ repoglance --json | jq '.languages.Python.code'
128
132
  | **Languages** | Lines of code per language, ranked, with % bars |
129
133
  | **Complexity hotspots** | Real per-function cyclomatic complexity across 15+ languages (C/C++, Java, C#, JS, TS, Go, Rust, Ruby, PHP, Swift, Kotlin, Python…) via [lizard](https://github.com/terryyin/lizard) |
130
134
  | **Maintainability index** | Approximate MI (0–100) from complexity, size and token counts |
135
+ | **Duplicate code** | Copy-paste blocks across files, with a duplication % |
131
136
  | **TODO tracker** | Every `TODO` / `FIXME` / `HACK` / `XXX` / `BUG` with file:line |
132
137
  | **Biggest files & directories** | Where the mass and the worst complexity live |
138
+ | **Ownership** | Which author owns each hotspot (`--owners`, git blame) |
133
139
  | **Git activity** | Top authors, most-churned files, active days, project lifespan |
134
140
 
141
+ Vendored and generated files (minified bundles, `_pb2.py`, `node_modules`, files
142
+ marked `@generated`) are detected and excluded by default — pass
143
+ `--include-vendored` to keep them.
144
+
135
145
  Binary files, `node_modules`, `.venv`, build dirs and friends are skipped
136
146
  automatically.
137
147
 
@@ -41,9 +41,9 @@ repoglance run against well-known projects (click to view the full report):
41
41
 
42
42
  | Project | Files | Lines of code | Health |
43
43
  |---|--:|--:|:--:|
44
- | [flask](assets/showcase/flask.svg) | 209 | 25,293 | D (67) |
45
- | [httpie](assets/showcase/httpie.svg) | 236 | 20,114 | D (66) |
46
- | [requests](assets/showcase/requests.svg) | 89 | 13,785 | C (72) |
44
+ | [flask](assets/showcase/flask.svg) | 207 | 25,266 | D (67) |
45
+ | [httpie](assets/showcase/httpie.svg) | 234 | 20,023 | D (66) |
46
+ | [requests](assets/showcase/requests.svg) | 88 | 13,709 | C (70) |
47
47
 
48
48
  <div align="center">
49
49
 
@@ -79,6 +79,10 @@ repoglance --baseline base.json # snapshot now
79
79
  repoglance --compare base.json --fail-on-regression # fail on new complexity
80
80
  repoglance --ci --fail-under 70 --max-complexity 25 # gate a build
81
81
  repoglance --include "src/**" --exclude "**/*_pb2.py" # glob filters
82
+ repoglance --duplicates # detect copy-paste blocks
83
+ repoglance --owners # attribute hotspots to authors (git blame)
84
+ repoglance --cache .rg.cache # incremental cache for fast repeat runs
85
+ repoglance --watch # live re-render on file changes
82
86
  repoglance --no-git --jobs 8
83
87
  ```
84
88
 
@@ -97,10 +101,16 @@ repoglance --json | jq '.languages.Python.code'
97
101
  | **Languages** | Lines of code per language, ranked, with % bars |
98
102
  | **Complexity hotspots** | Real per-function cyclomatic complexity across 15+ languages (C/C++, Java, C#, JS, TS, Go, Rust, Ruby, PHP, Swift, Kotlin, Python…) via [lizard](https://github.com/terryyin/lizard) |
99
103
  | **Maintainability index** | Approximate MI (0–100) from complexity, size and token counts |
104
+ | **Duplicate code** | Copy-paste blocks across files, with a duplication % |
100
105
  | **TODO tracker** | Every `TODO` / `FIXME` / `HACK` / `XXX` / `BUG` with file:line |
101
106
  | **Biggest files & directories** | Where the mass and the worst complexity live |
107
+ | **Ownership** | Which author owns each hotspot (`--owners`, git blame) |
102
108
  | **Git activity** | Top authors, most-churned files, active days, project lifespan |
103
109
 
110
+ Vendored and generated files (minified bundles, `_pb2.py`, `node_modules`, files
111
+ marked `@generated`) are detected and excluded by default — pass
112
+ `--include-vendored` to keep them.
113
+
104
114
  Binary files, `node_modules`, `.venv`, build dirs and friends are skipped
105
115
  automatically.
106
116