metripy 0.3.2__py3-none-any.whl → 0.3.7__py3-none-any.whl
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.
Potentially problematic release.
This version of metripy might be problematic. Click here for more details.
- metripy/Application/Config/File/ConfigFileReaderInterface.py +1 -1
- metripy/Application/Info.py +29 -4
- metripy/LangAnalyzer/Php/PhpAnalyzer.py +25 -0
- metripy/Report/Html/DependencyPageRenderer.py +2 -2
- metripy/Report/Html/IndexPageRenderer.py +7 -0
- metripy/Report/Html/Reporter.py +34 -7
- metripy/Report/Html/TrendsPageRenderer.py +23 -0
- metripy/templates/html_report/css/styles.css +1386 -0
- metripy/templates/html_report/dependencies.html +412 -0
- metripy/templates/html_report/files.html +1081 -0
- metripy/templates/html_report/git_analysis.html +326 -0
- metripy/templates/html_report/images/logo.svg +31 -0
- metripy/templates/html_report/index.html +375 -0
- metripy/templates/html_report/js/charts.js +313 -0
- metripy/templates/html_report/js/dashboard.js +546 -0
- metripy/templates/html_report/js/git_analysis.js +383 -0
- metripy/templates/html_report/top_offenders.html +268 -0
- metripy/templates/html_report/trends.html +469 -0
- {metripy-0.3.2.dist-info → metripy-0.3.7.dist-info}/METADATA +2 -2
- {metripy-0.3.2.dist-info → metripy-0.3.7.dist-info}/RECORD +24 -13
- {metripy-0.3.2.dist-info → metripy-0.3.7.dist-info}/WHEEL +0 -0
- {metripy-0.3.2.dist-info → metripy-0.3.7.dist-info}/entry_points.txt +0 -0
- {metripy-0.3.2.dist-info → metripy-0.3.7.dist-info}/licenses/LICENSE +0 -0
- {metripy-0.3.2.dist-info → metripy-0.3.7.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,469 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
+
<title>Trends - Code Metrics Dashboard</title>
|
|
7
|
+
<link rel="stylesheet" href="css/styles.css">
|
|
8
|
+
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap" rel="stylesheet">
|
|
9
|
+
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
|
|
10
|
+
<link rel="icon" href="images/logo.svg" sizes="any" type="image/svg+xml">
|
|
11
|
+
</head>
|
|
12
|
+
<body>
|
|
13
|
+
<div class="dashboard">
|
|
14
|
+
<!-- Sidebar -->
|
|
15
|
+
<aside class="sidebar">
|
|
16
|
+
<div class="sidebar-header">
|
|
17
|
+
<div class="logo">
|
|
18
|
+
<img src="images/logo.svg" alt="Metripy Logo" class="logo-icon">
|
|
19
|
+
<h2>Metripy</h2>
|
|
20
|
+
</div>
|
|
21
|
+
</div>
|
|
22
|
+
|
|
23
|
+
<nav class="sidebar-nav">
|
|
24
|
+
<ul>
|
|
25
|
+
<li class="nav-item">
|
|
26
|
+
<a href="index.html" class="nav-link">
|
|
27
|
+
<i class="fas fa-tachometer-alt"></i>
|
|
28
|
+
<span>Overview</span>
|
|
29
|
+
</a>
|
|
30
|
+
</li>
|
|
31
|
+
<li class="nav-item">
|
|
32
|
+
<a href="files.html" class="nav-link">
|
|
33
|
+
<i class="fas fa-file-code"></i>
|
|
34
|
+
<span>Files</span>
|
|
35
|
+
</a>
|
|
36
|
+
</li>
|
|
37
|
+
<li class="nav-item">
|
|
38
|
+
<a href="top_offenders.html" class="nav-link">
|
|
39
|
+
<i class="fa-solid fa-stethoscope"></i>
|
|
40
|
+
<span>Top Offenders</span>
|
|
41
|
+
</a>
|
|
42
|
+
</li>
|
|
43
|
+
<li class="nav-item">
|
|
44
|
+
<a href="git_analysis.html" class="nav-link">
|
|
45
|
+
<i class="fab fa-git-alt"></i>
|
|
46
|
+
<span>Git Analysis</span>
|
|
47
|
+
</a>
|
|
48
|
+
</li>
|
|
49
|
+
<li class="nav-item">
|
|
50
|
+
<a href="dependencies.html" class="nav-link">
|
|
51
|
+
<i class="fas fa-cubes"></i>
|
|
52
|
+
<span>Dependencies</span>
|
|
53
|
+
</a>
|
|
54
|
+
</li>
|
|
55
|
+
<li class="nav-item active">
|
|
56
|
+
<a href="trends.html" class="nav-link">
|
|
57
|
+
<i class="fas fa-chart-line"></i>
|
|
58
|
+
<span>Trends</span>
|
|
59
|
+
</a>
|
|
60
|
+
</li>
|
|
61
|
+
</ul>
|
|
62
|
+
</nav>
|
|
63
|
+
|
|
64
|
+
<div class="sidebar-footer">
|
|
65
|
+
<div class="project-info">
|
|
66
|
+
<h4>Project: {{project_name}}</h4>
|
|
67
|
+
<p>Last updated: {{last_updated}}</p>
|
|
68
|
+
</div>
|
|
69
|
+
</div>
|
|
70
|
+
</aside>
|
|
71
|
+
|
|
72
|
+
<!-- Main Content -->
|
|
73
|
+
<main class="main-content">
|
|
74
|
+
<header class="page-header">
|
|
75
|
+
<div class="header-content">
|
|
76
|
+
<h1>Code Quality Trends</h1>
|
|
77
|
+
<p class="subtitle">Track improvements and regressions over time</p>
|
|
78
|
+
</div>
|
|
79
|
+
</header>
|
|
80
|
+
|
|
81
|
+
{{#IF has_trend_data}}
|
|
82
|
+
|
|
83
|
+
<!-- Health Distribution Over Time -->
|
|
84
|
+
<section class="trends-section">
|
|
85
|
+
<div class="section-header">
|
|
86
|
+
<h2><i class="fas fa-heartbeat"></i> Health Distribution Evolution</h2>
|
|
87
|
+
<p>See how code quality segments have changed</p>
|
|
88
|
+
</div>
|
|
89
|
+
|
|
90
|
+
<div class="health-distribution-grid">
|
|
91
|
+
<!-- Lines of Code Segment -->
|
|
92
|
+
<div class="health-card">
|
|
93
|
+
<div class="health-card-header">
|
|
94
|
+
<h3>Lines of Code</h3>
|
|
95
|
+
<span class="time-label">Previous → Current</span>
|
|
96
|
+
</div>
|
|
97
|
+
<div class="segment-comparison">
|
|
98
|
+
<div class="comparison-row">
|
|
99
|
+
<span class="row-label">Previous</span>
|
|
100
|
+
<div class="segment-bar-horizontal">
|
|
101
|
+
<div class="segment-piece good" style="width: {{trend_data.loc_segments_prev.good_percent}}%" data-count="{{trend_data.loc_segments_prev.good}}"></div>
|
|
102
|
+
<div class="segment-piece okay" style="width: {{trend_data.loc_segments_prev.ok_percent}}%" data-count="{{trend_data.loc_segments_prev.ok}}"></div>
|
|
103
|
+
<div class="segment-piece warning" style="width: {{trend_data.loc_segments_prev.warning_percent}}%" data-count="{{trend_data.loc_segments_prev.warning}}"></div>
|
|
104
|
+
<div class="segment-piece critical" style="width: {{trend_data.loc_segments_prev.critical_percent}}%" data-count="{{trend_data.loc_segments_prev.critical}}"></div>
|
|
105
|
+
</div>
|
|
106
|
+
</div>
|
|
107
|
+
<div class="comparison-row">
|
|
108
|
+
<span class="row-label">Current</span>
|
|
109
|
+
<div class="segment-bar-horizontal">
|
|
110
|
+
<div class="segment-piece good" style="width: {{trend_data.loc_segments_current.good_percent}}%" data-count="{{trend_data.loc_segments_current.good}}"></div>
|
|
111
|
+
<div class="segment-piece okay" style="width: {{trend_data.loc_segments_current.ok_percent}}%" data-count="{{trend_data.loc_segments_current.ok}}"></div>
|
|
112
|
+
<div class="segment-piece warning" style="width: {{trend_data.loc_segments_current.warning_percent}}%" data-count="{{trend_data.loc_segments_current.warning}}"></div>
|
|
113
|
+
<div class="segment-piece critical" style="width: {{trend_data.loc_segments_current.critical_percent}}%" data-count="{{trend_data.loc_segments_current.critical}}"></div>
|
|
114
|
+
</div>
|
|
115
|
+
</div>
|
|
116
|
+
</div>
|
|
117
|
+
<div class="segment-legend">
|
|
118
|
+
<div class="legend-item">
|
|
119
|
+
<span class="legend-dot good"></span>
|
|
120
|
+
<div class="legend-info">
|
|
121
|
+
<span class="legend-label">Small</span>
|
|
122
|
+
<span class="legend-values">{{trend_data.loc_segments_prev.good}} → {{trend_data.loc_segments_current.good}}</span>
|
|
123
|
+
</div>
|
|
124
|
+
</div>
|
|
125
|
+
<div class="legend-item">
|
|
126
|
+
<span class="legend-dot okay"></span>
|
|
127
|
+
<div class="legend-info">
|
|
128
|
+
<span class="legend-label">Medium</span>
|
|
129
|
+
<span class="legend-values">{{trend_data.loc_segments_prev.ok}} → {{trend_data.loc_segments_current.ok}}</span>
|
|
130
|
+
</div>
|
|
131
|
+
</div>
|
|
132
|
+
<div class="legend-item">
|
|
133
|
+
<span class="legend-dot warning"></span>
|
|
134
|
+
<div class="legend-info">
|
|
135
|
+
<span class="legend-label">Large</span>
|
|
136
|
+
<span class="legend-values">{{trend_data.loc_segments_prev.warning}} → {{trend_data.loc_segments_current.warning}}</span>
|
|
137
|
+
</div>
|
|
138
|
+
</div>
|
|
139
|
+
<div class="legend-item">
|
|
140
|
+
<span class="legend-dot critical"></span>
|
|
141
|
+
<div class="legend-info">
|
|
142
|
+
<span class="legend-label">Very Large</span>
|
|
143
|
+
<span class="legend-values">{{trend_data.loc_segments_prev.critical}} → {{trend_data.loc_segments_current.critical}}</span>
|
|
144
|
+
</div>
|
|
145
|
+
</div>
|
|
146
|
+
</div>
|
|
147
|
+
</div>
|
|
148
|
+
|
|
149
|
+
<!-- Complexity Segment -->
|
|
150
|
+
<div class="health-card">
|
|
151
|
+
<div class="health-card-header">
|
|
152
|
+
<h3>Avg. Complexity</h3>
|
|
153
|
+
<span class="time-label">Previous → Current</span>
|
|
154
|
+
</div>
|
|
155
|
+
<div class="segment-comparison">
|
|
156
|
+
<div class="comparison-row">
|
|
157
|
+
<span class="row-label">Previous</span>
|
|
158
|
+
<div class="segment-bar-horizontal">
|
|
159
|
+
<div class="segment-piece good" style="width: {{trend_data.complexity_segments_prev.good_percent}}%" data-count="{{trend_data.complexity_segments_prev.good}}"></div>
|
|
160
|
+
<div class="segment-piece okay" style="width: {{trend_data.complexity_segments_prev.ok_percent}}%" data-count="{{trend_data.complexity_segments_prev.ok}}"></div>
|
|
161
|
+
<div class="segment-piece warning" style="width: {{trend_data.complexity_segments_prev.warning_percent}}%" data-count="{{trend_data.complexity_segments_prev.warning}}"></div>
|
|
162
|
+
<div class="segment-piece critical" style="width: {{trend_data.complexity_segments_prev.critical_percent}}%" data-count="{{trend_data.complexity_segments_prev.critical}}"></div>
|
|
163
|
+
</div>
|
|
164
|
+
</div>
|
|
165
|
+
<div class="comparison-row">
|
|
166
|
+
<span class="row-label">Current</span>
|
|
167
|
+
<div class="segment-bar-horizontal">
|
|
168
|
+
<div class="segment-piece good" style="width: {{trend_data.complexity_segments_current.good_percent}}%" data-count="{{trend_data.complexity_segments_current.good}}"></div>
|
|
169
|
+
<div class="segment-piece okay" style="width: {{trend_data.complexity_segments_current.ok_percent}}%" data-count="{{trend_data.complexity_segments_current.ok}}"></div>
|
|
170
|
+
<div class="segment-piece warning" style="width: {{trend_data.complexity_segments_current.warning_percent}}%" data-count="{{trend_data.complexity_segments_current.warning}}"></div>
|
|
171
|
+
<div class="segment-piece critical" style="width: {{trend_data.complexity_segments_current.critical_percent}}%" data-count="{{trend_data.complexity_segments_current.critical}}"></div>
|
|
172
|
+
</div>
|
|
173
|
+
</div>
|
|
174
|
+
</div>
|
|
175
|
+
<div class="segment-legend">
|
|
176
|
+
<div class="legend-item">
|
|
177
|
+
<span class="legend-dot good"></span>
|
|
178
|
+
<div class="legend-info">
|
|
179
|
+
<span class="legend-label">Simple</span>
|
|
180
|
+
<span class="legend-values">{{trend_data.complexity_segments_prev.good}} → {{trend_data.complexity_segments_current.good}}</span>
|
|
181
|
+
</div>
|
|
182
|
+
</div>
|
|
183
|
+
<div class="legend-item">
|
|
184
|
+
<span class="legend-dot okay"></span>
|
|
185
|
+
<div class="legend-info">
|
|
186
|
+
<span class="legend-label">Moderate</span>
|
|
187
|
+
<span class="legend-values">{{trend_data.complexity_segments_prev.ok}} → {{trend_data.complexity_segments_current.ok}}</span>
|
|
188
|
+
</div>
|
|
189
|
+
</div>
|
|
190
|
+
<div class="legend-item">
|
|
191
|
+
<span class="legend-dot warning"></span>
|
|
192
|
+
<div class="legend-info">
|
|
193
|
+
<span class="legend-label">Complex</span>
|
|
194
|
+
<span class="legend-values">{{trend_data.complexity_segments_prev.warning}} → {{trend_data.complexity_segments_current.warning}}</span>
|
|
195
|
+
</div>
|
|
196
|
+
</div>
|
|
197
|
+
<div class="legend-item">
|
|
198
|
+
<span class="legend-dot critical"></span>
|
|
199
|
+
<div class="legend-info">
|
|
200
|
+
<span class="legend-label">Very Complex</span>
|
|
201
|
+
<span class="legend-values">{{trend_data.complexity_segments_prev.critical}} → {{trend_data.complexity_segments_current.critical}}</span>
|
|
202
|
+
</div>
|
|
203
|
+
</div>
|
|
204
|
+
</div>
|
|
205
|
+
</div>
|
|
206
|
+
|
|
207
|
+
<!-- Maintainability Segment -->
|
|
208
|
+
<div class="health-card">
|
|
209
|
+
<div class="health-card-header">
|
|
210
|
+
<h3>Maintainability</h3>
|
|
211
|
+
<span class="time-label">Previous → Current</span>
|
|
212
|
+
</div>
|
|
213
|
+
<div class="segment-comparison">
|
|
214
|
+
<div class="comparison-row">
|
|
215
|
+
<span class="row-label">Previous</span>
|
|
216
|
+
<div class="segment-bar-horizontal">
|
|
217
|
+
<div class="segment-piece good" style="width: {{trend_data.maintainability_segments_prev.good_percent}}%" data-count="{{trend_data.maintainability_segments_prev.good}}"></div>
|
|
218
|
+
<div class="segment-piece okay" style="width: {{trend_data.maintainability_segments_prev.ok_percent}}%" data-count="{{trend_data.maintainability_segments_prev.ok}}"></div>
|
|
219
|
+
<div class="segment-piece warning" style="width: {{trend_data.maintainability_segments_prev.warning_percent}}%" data-count="{{trend_data.maintainability_segments_prev.warning}}"></div>
|
|
220
|
+
<div class="segment-piece critical" style="width: {{trend_data.maintainability_segments_prev.critical_percent}}%" data-count="{{trend_data.maintainability_segments_prev.critical}}"></div>
|
|
221
|
+
</div>
|
|
222
|
+
</div>
|
|
223
|
+
<div class="comparison-row">
|
|
224
|
+
<span class="row-label">Current</span>
|
|
225
|
+
<div class="segment-bar-horizontal">
|
|
226
|
+
<div class="segment-piece good" style="width: {{trend_data.maintainability_segments_current.good_percent}}%" data-count="{{trend_data.maintainability_segments_current.good}}"></div>
|
|
227
|
+
<div class="segment-piece okay" style="width: {{trend_data.maintainability_segments_current.ok_percent}}%" data-count="{{trend_data.maintainability_segments_current.ok}}"></div>
|
|
228
|
+
<div class="segment-piece warning" style="width: {{trend_data.maintainability_segments_current.warning_percent}}%" data-count="{{trend_data.maintainability_segments_current.warning}}"></div>
|
|
229
|
+
<div class="segment-piece critical" style="width: {{trend_data.maintainability_segments_current.critical_percent}}%" data-count="{{trend_data.maintainability_segments_current.critical}}"></div>
|
|
230
|
+
</div>
|
|
231
|
+
</div>
|
|
232
|
+
</div>
|
|
233
|
+
<div class="segment-legend">
|
|
234
|
+
<div class="legend-item">
|
|
235
|
+
<span class="legend-dot good"></span>
|
|
236
|
+
<div class="legend-info">
|
|
237
|
+
<span class="legend-label">Excellent</span>
|
|
238
|
+
<span class="legend-values">{{trend_data.maintainability_segments_prev.good}} → {{trend_data.maintainability_segments_current.good}}</span>
|
|
239
|
+
</div>
|
|
240
|
+
</div>
|
|
241
|
+
<div class="legend-item">
|
|
242
|
+
<span class="legend-dot okay"></span>
|
|
243
|
+
<div class="legend-info">
|
|
244
|
+
<span class="legend-label">Good</span>
|
|
245
|
+
<span class="legend-values">{{trend_data.maintainability_segments_prev.ok}} → {{trend_data.maintainability_segments_current.ok}}</span>
|
|
246
|
+
</div>
|
|
247
|
+
</div>
|
|
248
|
+
<div class="legend-item">
|
|
249
|
+
<span class="legend-dot warning"></span>
|
|
250
|
+
<div class="legend-info">
|
|
251
|
+
<span class="legend-label">Fair</span>
|
|
252
|
+
<span class="legend-values">{{trend_data.maintainability_segments_prev.warning}} → {{trend_data.maintainability_segments_current.warning}}</span>
|
|
253
|
+
</div>
|
|
254
|
+
</div>
|
|
255
|
+
<div class="legend-item">
|
|
256
|
+
<span class="legend-dot critical"></span>
|
|
257
|
+
<div class="legend-info">
|
|
258
|
+
<span class="legend-label">Poor</span>
|
|
259
|
+
<span class="legend-values">{{trend_data.maintainability_segments_prev.critical}} → {{trend_data.maintainability_segments_current.critical}}</span>
|
|
260
|
+
</div>
|
|
261
|
+
</div>
|
|
262
|
+
</div>
|
|
263
|
+
</div>
|
|
264
|
+
|
|
265
|
+
<!-- Method Size Segment -->
|
|
266
|
+
<div class="health-card">
|
|
267
|
+
<div class="health-card-header">
|
|
268
|
+
<h3>Avg. Method Size</h3>
|
|
269
|
+
<span class="time-label">Previous → Current</span>
|
|
270
|
+
</div>
|
|
271
|
+
<div class="segment-comparison">
|
|
272
|
+
<div class="comparison-row">
|
|
273
|
+
<span class="row-label">Previous</span>
|
|
274
|
+
<div class="segment-bar-horizontal">
|
|
275
|
+
<div class="segment-piece good" style="width: {{trend_data.method_size_segments_prev.good_percent}}%" data-count="{{trend_data.method_size_segments_prev.good}}"></div>
|
|
276
|
+
<div class="segment-piece okay" style="width: {{trend_data.method_size_segments_prev.ok_percent}}%" data-count="{{trend_data.method_size_segments_prev.ok}}"></div>
|
|
277
|
+
<div class="segment-piece warning" style="width: {{trend_data.method_size_segments_prev.warning_percent}}%" data-count="{{trend_data.method_size_segments_prev.warning}}"></div>
|
|
278
|
+
<div class="segment-piece critical" style="width: {{trend_data.method_size_segments_prev.critical_percent}}%" data-count="{{trend_data.method_size_segments_prev.critical}}"></div>
|
|
279
|
+
</div>
|
|
280
|
+
</div>
|
|
281
|
+
<div class="comparison-row">
|
|
282
|
+
<span class="row-label">Current</span>
|
|
283
|
+
<div class="segment-bar-horizontal">
|
|
284
|
+
<div class="segment-piece good" style="width: {{trend_data.method_size_segments_current.good_percent}}%" data-count="{{trend_data.method_size_segments_current.good}}"></div>
|
|
285
|
+
<div class="segment-piece okay" style="width: {{trend_data.method_size_segments_current.ok_percent}}%" data-count="{{trend_data.method_size_segments_current.ok}}"></div>
|
|
286
|
+
<div class="segment-piece warning" style="width: {{trend_data.method_size_segments_current.warning_percent}}%" data-count="{{trend_data.method_size_segments_current.warning}}"></div>
|
|
287
|
+
<div class="segment-piece critical" style="width: {{trend_data.method_size_segments_current.critical_percent}}%" data-count="{{trend_data.method_size_segments_current.critical}}"></div>
|
|
288
|
+
</div>
|
|
289
|
+
</div>
|
|
290
|
+
</div>
|
|
291
|
+
<div class="segment-legend">
|
|
292
|
+
<div class="legend-item">
|
|
293
|
+
<span class="legend-dot good"></span>
|
|
294
|
+
<div class="legend-info">
|
|
295
|
+
<span class="legend-label">Concise</span>
|
|
296
|
+
<span class="legend-values">{{trend_data.method_size_segments_prev.good}} → {{trend_data.method_size_segments_current.good}}</span>
|
|
297
|
+
</div>
|
|
298
|
+
</div>
|
|
299
|
+
<div class="legend-item">
|
|
300
|
+
<span class="legend-dot okay"></span>
|
|
301
|
+
<div class="legend-info">
|
|
302
|
+
<span class="legend-label">Optimal</span>
|
|
303
|
+
<span class="legend-values">{{trend_data.method_size_segments_prev.ok}} → {{trend_data.method_size_segments_current.ok}}</span>
|
|
304
|
+
</div>
|
|
305
|
+
</div>
|
|
306
|
+
<div class="legend-item">
|
|
307
|
+
<span class="legend-dot warning"></span>
|
|
308
|
+
<div class="legend-info">
|
|
309
|
+
<span class="legend-label">Large</span>
|
|
310
|
+
<span class="legend-values">{{trend_data.method_size_segments_prev.warning}} → {{trend_data.method_size_segments_current.warning}}</span>
|
|
311
|
+
</div>
|
|
312
|
+
</div>
|
|
313
|
+
<div class="legend-item">
|
|
314
|
+
<span class="legend-dot critical"></span>
|
|
315
|
+
<div class="legend-info">
|
|
316
|
+
<span class="legend-label">Too Large</span>
|
|
317
|
+
<span class="legend-values">{{trend_data.method_size_segments_prev.critical}} → {{trend_data.method_size_segments_current.critical}}</span>
|
|
318
|
+
</div>
|
|
319
|
+
</div>
|
|
320
|
+
</div>
|
|
321
|
+
</div>
|
|
322
|
+
</div>
|
|
323
|
+
</section>
|
|
324
|
+
|
|
325
|
+
<!-- Top Improved Files -->
|
|
326
|
+
<section class="trends-section">
|
|
327
|
+
<div class="section-header">
|
|
328
|
+
<h2><i class="fas fa-arrow-up"></i> Top Improved Files</h2>
|
|
329
|
+
<p>Files that showed the most improvement</p>
|
|
330
|
+
</div>
|
|
331
|
+
|
|
332
|
+
<div class="improvement-grid">
|
|
333
|
+
<!-- Improved Complexity -->
|
|
334
|
+
<div class="trend-card">
|
|
335
|
+
<div class="trend-card-header improved">
|
|
336
|
+
<i class="fas fa-award"></i>
|
|
337
|
+
<h3>Complexity Reduced</h3>
|
|
338
|
+
</div>
|
|
339
|
+
<div class="trend-list">
|
|
340
|
+
{{#EACH trend_data.top_improved_complexity AS file}}
|
|
341
|
+
<div class="trend-item">
|
|
342
|
+
<div class="trend-item-header">
|
|
343
|
+
<span class="file-name">{{file.name}}</span>
|
|
344
|
+
<span class="trend-delta positive">
|
|
345
|
+
<i class="fas fa-arrow-down"></i>
|
|
346
|
+
<span class="delta-value">{{file.complexity_delta}}</span>
|
|
347
|
+
</span>
|
|
348
|
+
</div>
|
|
349
|
+
<div class="trend-item-details">
|
|
350
|
+
<span class="prev-value">{{file.complexity_prev}}</span>
|
|
351
|
+
<i class="fas fa-arrow-right"></i>
|
|
352
|
+
<span class="curr-value">{{file.complexity_current}}</span>
|
|
353
|
+
</div>
|
|
354
|
+
</div>
|
|
355
|
+
{{/EACH}}
|
|
356
|
+
</div>
|
|
357
|
+
</div>
|
|
358
|
+
|
|
359
|
+
<!-- Improved Maintainability -->
|
|
360
|
+
<div class="trend-card">
|
|
361
|
+
<div class="trend-card-header improved">
|
|
362
|
+
<i class="fas fa-star"></i>
|
|
363
|
+
<h3>Maintainability Improved</h3>
|
|
364
|
+
</div>
|
|
365
|
+
<div class="trend-list">
|
|
366
|
+
{{#EACH trend_data.top_improved_maintainability AS file}}
|
|
367
|
+
<div class="trend-item">
|
|
368
|
+
<div class="trend-item-header">
|
|
369
|
+
<span class="file-name">{{file.name}}</span>
|
|
370
|
+
<span class="trend-delta positive">
|
|
371
|
+
<i class="fas fa-arrow-up"></i>
|
|
372
|
+
<span class="delta-value">{{file.maintainability_delta}}</span>
|
|
373
|
+
</span>
|
|
374
|
+
</div>
|
|
375
|
+
<div class="trend-item-details">
|
|
376
|
+
<span class="prev-value">{{file.maintainability_prev}}</span>
|
|
377
|
+
<i class="fas fa-arrow-right"></i>
|
|
378
|
+
<span class="curr-value">{{file.maintainability_current}}</span>
|
|
379
|
+
</div>
|
|
380
|
+
</div>
|
|
381
|
+
{{/EACH}}
|
|
382
|
+
</div>
|
|
383
|
+
</div>
|
|
384
|
+
</div>
|
|
385
|
+
</section>
|
|
386
|
+
|
|
387
|
+
<!-- Top Worsened Files -->
|
|
388
|
+
<section class="trends-section">
|
|
389
|
+
<div class="section-header">
|
|
390
|
+
<h2><i class="fas fa-arrow-down"></i> Files Needing Attention</h2>
|
|
391
|
+
<p>Files that have regressed and need improvement</p>
|
|
392
|
+
</div>
|
|
393
|
+
|
|
394
|
+
<div class="improvement-grid">
|
|
395
|
+
<!-- Worsened Complexity -->
|
|
396
|
+
<div class="trend-card">
|
|
397
|
+
<div class="trend-card-header worsened">
|
|
398
|
+
<i class="fas fa-exclamation-triangle"></i>
|
|
399
|
+
<h3>Complexity Increased</h3>
|
|
400
|
+
</div>
|
|
401
|
+
<div class="trend-list">
|
|
402
|
+
{{#EACH trend_data.top_worsened_complexity AS file}}
|
|
403
|
+
<div class="trend-item">
|
|
404
|
+
<div class="trend-item-header">
|
|
405
|
+
<span class="file-name">{{file.name}}</span>
|
|
406
|
+
<span class="trend-delta negative">
|
|
407
|
+
<i class="fas fa-arrow-up"></i>
|
|
408
|
+
<span class="delta-value">{{file.complexity_delta}}</span>
|
|
409
|
+
</span>
|
|
410
|
+
</div>
|
|
411
|
+
<div class="trend-item-details">
|
|
412
|
+
<span class="prev-value">{{file.complexity_prev}}</span>
|
|
413
|
+
<i class="fas fa-arrow-right"></i>
|
|
414
|
+
<span class="curr-value">{{file.complexity_current}}</span>
|
|
415
|
+
</div>
|
|
416
|
+
</div>
|
|
417
|
+
{{/EACH}}
|
|
418
|
+
</div>
|
|
419
|
+
</div>
|
|
420
|
+
|
|
421
|
+
<!-- Worsened Maintainability -->
|
|
422
|
+
<div class="trend-card">
|
|
423
|
+
<div class="trend-card-header worsened">
|
|
424
|
+
<i class="fas fa-warning"></i>
|
|
425
|
+
<h3>Maintainability Decreased</h3>
|
|
426
|
+
</div>
|
|
427
|
+
<div class="trend-list">
|
|
428
|
+
{{#EACH trend_data.top_worsened_maintainability AS file}}
|
|
429
|
+
<div class="trend-item">
|
|
430
|
+
<div class="trend-item-header">
|
|
431
|
+
<span class="file-name">{{file.name}}</span>
|
|
432
|
+
<span class="trend-delta negative">
|
|
433
|
+
<i class="fas fa-arrow-down"></i>
|
|
434
|
+
<span class="delta-value">{{file.maintainability_delta}}</span>
|
|
435
|
+
</span>
|
|
436
|
+
</div>
|
|
437
|
+
<div class="trend-item-details">
|
|
438
|
+
<span class="prev-value">{{file.maintainability_prev}}</span>
|
|
439
|
+
<i class="fas fa-arrow-right"></i>
|
|
440
|
+
<span class="curr-value">{{file.maintainability_current}}</span>
|
|
441
|
+
</div>
|
|
442
|
+
</div>
|
|
443
|
+
{{/EACH}}
|
|
444
|
+
</div>
|
|
445
|
+
</div>
|
|
446
|
+
</div>
|
|
447
|
+
</section>
|
|
448
|
+
|
|
449
|
+
<!-- No Trend Data State -->
|
|
450
|
+
{{#ELSE}}
|
|
451
|
+
<div class="empty-state">
|
|
452
|
+
<i class="fas fa-chart-line"></i>
|
|
453
|
+
<h3>No Trend Data Available</h3>
|
|
454
|
+
<p>Run analysis at least twice to see trends and compare changes over time.</p>
|
|
455
|
+
</div>
|
|
456
|
+
{{/IF}}
|
|
457
|
+
|
|
458
|
+
</main>
|
|
459
|
+
</div>
|
|
460
|
+
|
|
461
|
+
<!-- Scripts -->
|
|
462
|
+
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
|
|
463
|
+
<script>
|
|
464
|
+
// Embed data directly from template engine
|
|
465
|
+
window.TREND_DATA = {{trend_data_json}};
|
|
466
|
+
</script>
|
|
467
|
+
</body>
|
|
468
|
+
</html>
|
|
469
|
+
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: metripy
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.7
|
|
4
4
|
Summary: A Python tool to generate multi project, multi language code metric reports
|
|
5
5
|
Author-email: Yannick Zimmermann <yannick.zimmermann@proton.me>
|
|
6
6
|
License: MIT
|
|
@@ -19,7 +19,7 @@ Description-Content-Type: text/markdown
|
|
|
19
19
|
License-File: LICENSE
|
|
20
20
|
Requires-Dist: lizard==1.18.0
|
|
21
21
|
Requires-Dist: GitPython==3.1.45
|
|
22
|
-
Requires-Dist: py-template-engine>=0.
|
|
22
|
+
Requires-Dist: py-template-engine>=0.2.6
|
|
23
23
|
Requires-Dist: radon==6.0.1
|
|
24
24
|
Requires-Dist: requests==2.32.5
|
|
25
25
|
Requires-Dist: packaging==25.0
|
|
@@ -2,7 +2,7 @@ metripy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
|
2
2
|
metripy/metripy.py,sha256=Iiggyf5cMv3xoJyyec6MpqPLb0afYnPyOYY26oiq6ro,266
|
|
3
3
|
metripy/Application/Analyzer.py,sha256=anomekJMKve_lZEl69yeQEFYas_hTltTqEJmujg5VSo,4953
|
|
4
4
|
metripy/Application/Application.py,sha256=XaSLgZurNVv29KVsIF8Kqu9eI4LOvvDZ6CHgdkLoRwQ,2332
|
|
5
|
-
metripy/Application/Info.py,sha256=
|
|
5
|
+
metripy/Application/Info.py,sha256=7xdjqwDRwazenFme2sP5soHZogPeE4EEanBSP19bQL0,1882
|
|
6
6
|
metripy/Application/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
7
7
|
metripy/Application/Config/Config.py,sha256=QX_uTUJEcAaL0Oyug0dlpVgRVEKliDtXgS-3J10OZQA,1503
|
|
8
8
|
metripy/Application/Config/GitConfig.py,sha256=4y676GYv-FH6QyLxh6IQn64gUG9xOQciMgkXH9pJtb4,220
|
|
@@ -10,7 +10,7 @@ metripy/Application/Config/Parser.py,sha256=zK_o7j3XaobSFAYhY4xznGhUTcyYSgQSzde1
|
|
|
10
10
|
metripy/Application/Config/ProjectConfig.py,sha256=qY1TpU93LEiRNilQ3Yt0vQxxx9USt8QimhmTaZJzM-s,3078
|
|
11
11
|
metripy/Application/Config/ReportConfig.py,sha256=Vh3S1n2nyH5YNmt8JrfGRTcmYZuqLMxyFnFF5mmxu_4,259
|
|
12
12
|
metripy/Application/Config/File/ConfigFileReaderFactory.py,sha256=EYPRxfjixjMtCp-O-Tx9xBOWq_gO2_NhyG1iYc52YHI,981
|
|
13
|
-
metripy/Application/Config/File/ConfigFileReaderInterface.py,sha256=
|
|
13
|
+
metripy/Application/Config/File/ConfigFileReaderInterface.py,sha256=e_7caWHo2CCU_2tgqzDcqJSfYhBS_ka-4b5jNxWjZB8,2647
|
|
14
14
|
metripy/Application/Config/File/JsonConfigFileReader.py,sha256=s4f1D7l9Od7gzpMa6-WFyJeY7vjJFTQx3xKC76wSWEs,478
|
|
15
15
|
metripy/Application/Config/File/YamlConfigFileReader.py,sha256=kDgWrf9wbVstgQGZ1a1b3zY5L9Lx61NhoXfypZU0w3s,483
|
|
16
16
|
metripy/Component/Debug/Debugger.py,sha256=LhkHzUGNSEPvIvcjZJJob5Fjg5NQhk7Rs43y1Bkc7hw,423
|
|
@@ -30,7 +30,7 @@ metripy/LangAnalyzer/AbstractLangAnalyzer.py,sha256=YOnpWAKJqm3eyj-FJc2iCUUXAnfh
|
|
|
30
30
|
metripy/LangAnalyzer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
31
31
|
metripy/LangAnalyzer/Generic/HalSteadAnalyzer.py,sha256=z8h3V7mud5NnzQ67I9G3YhTFKHjO6Z-e_ida2d32YZ4,1845
|
|
32
32
|
metripy/LangAnalyzer/Generic/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
33
|
-
metripy/LangAnalyzer/Php/PhpAnalyzer.py,sha256=
|
|
33
|
+
metripy/LangAnalyzer/Php/PhpAnalyzer.py,sha256=lQ0hGqseuZi7OxS1Qm3asjTm-5g6-PY5lLNhGg_0Q2g,8310
|
|
34
34
|
metripy/LangAnalyzer/Php/PhpBasicAstParser.py,sha256=T717e7hM67HBOZ7mvl7Jr4RkCF-Hq-sUMzk__UTheeU,1874
|
|
35
35
|
metripy/LangAnalyzer/Php/PhpBasicLocAnalyzer.py,sha256=2Vt3pbU0BEy2p8em3ZW_qOe9eGigtpZzVoEhe11S2O8,6229
|
|
36
36
|
metripy/LangAnalyzer/Php/PhpHalSteadAnalyzer.py,sha256=XgEo1dXSpIYWBWt9wEQxigpNdLWs-BteX2U2lVLVpl8,1037
|
|
@@ -61,15 +61,15 @@ metripy/Metric/Trend/SegmentedTrendMetric.py,sha256=nyE4iRa44oNwcj2lM6eyFbo_ngID
|
|
|
61
61
|
metripy/Report/ReporterFactory.py,sha256=36_iF0Plqwcx51UPXpWU1LYGLx6_I4SjAJQGg1BDSrQ,1012
|
|
62
62
|
metripy/Report/ReporterInterface.py,sha256=OZEE3SXpTKNOKQBzPytqxqViUFzPhlBUjkBTMlib0qE,543
|
|
63
63
|
metripy/Report/Csv/Reporter.py,sha256=rC52vfJYavB_9yZ3-QA7aRF0Ez34lkiBOpw2mWll2m8,431
|
|
64
|
-
metripy/Report/Html/DependencyPageRenderer.py,sha256=
|
|
64
|
+
metripy/Report/Html/DependencyPageRenderer.py,sha256=88WooqTQeGUe1v_qOm3OUQ06_gVn4NYMCGT8FVd1Xa8,906
|
|
65
65
|
metripy/Report/Html/FilesPageRenderer.py,sha256=NUi8RpDMk_fHQZVFO4memz9t32-l2-6c-GmtlRmSQRI,957
|
|
66
66
|
metripy/Report/Html/GitAnalysisPageRenderer.py,sha256=QEPLdzQS4SRIz-gjQ31zaoGTmColiw2nPVP7lf7Bu1g,2039
|
|
67
|
-
metripy/Report/Html/IndexPageRenderer.py,sha256=
|
|
67
|
+
metripy/Report/Html/IndexPageRenderer.py,sha256=VISU_myuwlfk4IJ0rfAurHrfk-n3s1oH3cXAJg-ZgcM,1838
|
|
68
68
|
metripy/Report/Html/PageRenderer.py,sha256=hWbZ11eO5GEqCwtJTtnstx0Ni0u3OQTHwnYA-qokHKU,1419
|
|
69
69
|
metripy/Report/Html/PageRendererFactory.py,sha256=NnieU-d0rK3n1AmU8duTBVwEkYvllXiKtphwq34NdA8,1710
|
|
70
|
-
metripy/Report/Html/Reporter.py,sha256=
|
|
70
|
+
metripy/Report/Html/Reporter.py,sha256=mrSOgaqI9gjD7lZtzfZXbF62idwKsryEcaKdT4ddZnM,6545
|
|
71
71
|
metripy/Report/Html/TopOffendersPageRenderer.py,sha256=QTxoLuqaeiD7Ulxe0QaLXVEN5kcW6t8d0O96q-MM1U8,3136
|
|
72
|
-
metripy/Report/Html/TrendsPageRenderer.py,sha256=
|
|
72
|
+
metripy/Report/Html/TrendsPageRenderer.py,sha256=ouDqQvMgTx4qW1Qmpl98yjfThsYx7WDIxmaqd8nQdks,5844
|
|
73
73
|
metripy/Report/Json/AbstractJsonReporter.py,sha256=yqpBOO6MAN2HdhwoWOZ7Ler38WbV8DcG5g2oASXe-i8,343
|
|
74
74
|
metripy/Report/Json/GitJsonReporter.py,sha256=kzWXKgoPF1k19bXL8gc728qZT4PlBZdWXXUXG20o0oc,968
|
|
75
75
|
metripy/Report/Json/JsonReporter.py,sha256=teDETahhX0XdvM3TT8U8rqAyQrs_VTMq1aaz7vkD3YQ,607
|
|
@@ -77,9 +77,20 @@ metripy/Tree/ClassNode.py,sha256=gsoVTKF2iC5yxksI23fIvYakfElzF-NA43Lj0wDW9OM,162
|
|
|
77
77
|
metripy/Tree/FunctionNode.py,sha256=EcoAdjeMC9XB7NE6BGJLqDuTO6r-YlwBQfsyl_AupLU,3540
|
|
78
78
|
metripy/Tree/ModuleNode.py,sha256=YHlkAJKWWjy1oAhg7IdrvYnTOxpBYnq_VJS_ykey5_Y,1238
|
|
79
79
|
metripy/Trend/TrendAnalyzer.py,sha256=Rm0VfxjN61O2-FxhIP8CFO6OT4j9JI7f7kRhJ0GLmBM,6926
|
|
80
|
-
metripy
|
|
81
|
-
metripy
|
|
82
|
-
metripy
|
|
83
|
-
metripy
|
|
84
|
-
metripy
|
|
85
|
-
metripy
|
|
80
|
+
metripy/templates/html_report/dependencies.html,sha256=VtYpzQNuQfyMPHkJEA4NuBWh6P8XHHUmXINgZh_YZAo,13890
|
|
81
|
+
metripy/templates/html_report/files.html,sha256=ZBNNac90Oc3gUwNEqsKC7KEFvkI8xXZLOvy1tIgBI_c,36176
|
|
82
|
+
metripy/templates/html_report/git_analysis.html,sha256=9OiDsRzk3-hkcz8pcIRqAOWMpFZdRSWBYcZQwYO9ZlA,15422
|
|
83
|
+
metripy/templates/html_report/index.html,sha256=xTdkOTZE_oKZxQaOUbglMDdl3UM3RJY1eqBrh2gCJS0,18536
|
|
84
|
+
metripy/templates/html_report/top_offenders.html,sha256=DVptk2JhX5Lu4WqB8SgVMfjkV2R94Qd9RqvYLwjA6aI,9643
|
|
85
|
+
metripy/templates/html_report/trends.html,sha256=1YyZJImaEs5XVFQoitd7lOdIEa7AKTdzK8t2SsT8k1c,30110
|
|
86
|
+
metripy/templates/html_report/css/styles.css,sha256=cN3ZFN5SdXw9IFBGvybILcUy9FGEZqGghcr4763ZLtQ,29227
|
|
87
|
+
metripy/templates/html_report/images/logo.svg,sha256=59gZXNLrZdKaefBoZMog8UPyyNj_TuNEZQKrO01fqf0,1071
|
|
88
|
+
metripy/templates/html_report/js/charts.js,sha256=1L3me_UVWBjLVyNyKQ9v19etd0u31jnCvbpyGaX-0Go,10127
|
|
89
|
+
metripy/templates/html_report/js/dashboard.js,sha256=RdV2GTFEm5Cc7oqGPxfsYUCt3lTmOzaZ9sUN60Vl1mE,19965
|
|
90
|
+
metripy/templates/html_report/js/git_analysis.js,sha256=GxtmRyouS55bgKPvdko4-AxywFvx1V7x3HuCjRZczk4,12798
|
|
91
|
+
metripy-0.3.7.dist-info/licenses/LICENSE,sha256=7I-LBXpo2Lveofzf06uDAmq0wPN7zbMwInrQZiQCiwc,1063
|
|
92
|
+
metripy-0.3.7.dist-info/METADATA,sha256=4dABg_5vgZaQyAUpKlfAwn56oLmM8_4cqomnBAy7BNk,4190
|
|
93
|
+
metripy-0.3.7.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
94
|
+
metripy-0.3.7.dist-info/entry_points.txt,sha256=vZI1vreNyXX9XGDUQlOnE2cSBRWNyXOlXXFnEBsVNIA,49
|
|
95
|
+
metripy-0.3.7.dist-info/top_level.txt,sha256=Z-tn-27QGcxzNrsRq7BNPQv2BlXJnMCp8bp2sPdde1Y,8
|
|
96
|
+
metripy-0.3.7.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|