Quality Score: 80/100
Low RiskThis repo is in good health with CI, tests, and active maintenance.
High complexity -10Multiple anti-patterns -10
Maintainability grade
Static analysisHow maintainable the code looks — from complexity, code issues, test presence, file size, and hotspot load. It grades the shape of the code, not defect risk, and doesn't replace review.
F21/100
A ≥ 85, B ≥ 70, C ≥ 55, D ≥ 40, F < 40
Cyclomatic complexityavg 6970/35 Code issues0 errors, 258 warnings0/20 Testspresent · ~28% of files17/20 Largest file5,069 lines0/15 Hotspot load3 high-risk files4/10 Configuration status
CI/CD Pipeline — configured
Test Coverage — ~28%heuristic
186 test files / 655 source files. This is a file-count ratio, not real line coverage — set up Codecov for authoritative numbers.
Dependency Scanning — no config detected
No Dependabot / Renovate / Snyk / Trivy / CodeQL config found. Enable Dependabot or Renovate.
Live Signals
Real-time data from Codecov, GitHub Actions, GitHub Issues, deps.dev — not estimates.
CI pass rate100%
last 50 runs · median 6m
Stale-issue ratio29%
of 7 recent open issues are 30d+ old with no replies
Maintainer response3h
median first-reply across 13 recent issues · fast
Activity trajectory↑ Rising
last 6mo: 97 commits · prior 6mo: 3
Top hotspots
Files edited often AND hard to reason about. Churn = recent commit frequency, Complexity = branches and nesting, Risk = both combined. These are the highest-leverage targets for refactoring or testing.
All hotspots
Files that change often and are complex tend to accumulate more bugs
AI-suggested anti-patterns
AI · unverifiedPattern-matches from the file structure and dependencies — useful as hypotheses, but not grounded in actual source. For real findings see Code Scanning above.
Platform-Specific Code Scattered Across Codebase
MediumSDL2 calls and platform checks intermixed with game logic; suggests incomplete abstraction between platform layer and core systems
Multiple files in Source/controls/devices and Source/DiabloUI
Input Event Dispatch Via Global or Static State
MediumInput handling may rely on mutable static state or global references, making concurrent input handling brittle and testing difficult
Source/controls/game_controls.cpp, Source/controls/controller.cpp
UI State Management Without Explicit State Machine
LowMenu transitions and dialog state changes appear to use implicit state through function calls rather than explicit state objects, risking navigation bugs
Source/DiabloUI/diabloui.cpp, Source/DiabloUI/mainmenu.cpp
AI-suggested bottlenecks
AI · unverifiedSpeculation from file structure, not profiling data. Validate against real metrics before acting on these.
I/O & CPU-bound Bottleneck
Asset loading and codec decompression likely blocks game loop during level transitions; no evident streaming or async loading
Source/data/file.cpp
Synchronous dispatch Bottleneck
Centralized input dispatch for all input types (keyboard, gamepad, touch) may serialize event handling and limit responsiveness on high-frequency input
Source/controls/game_controls.cpp
Single-threaded rendering Bottleneck
UI rendering and event handling in single pass may cause frame rate drops if menu rendering is complex
Source/DiabloUI/diabloui.cpp
Code metrics
Static analysis on sampled source files (up to 15 files).
Avg Cyclomatic Complexity697
Counts if/for/while/switch/catch/ternary branches
Errors / Warnings0 / 258
Secrets, empty catches, console.log, var usage, long lines