Skip to content

Commit 25349e7

Browse files
Add averages for Nom metrics (#736)
1 parent 736f379 commit 25349e7

File tree

2 files changed

+111
-6
lines changed

2 files changed

+111
-6
lines changed

rust-code-analysis-web/src/web/server.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -650,7 +650,7 @@ mod tests {
650650
"n1": 2.0,
651651
"volume": 4.754_887_502_163_468},
652652
"loc": {"cloc": 1.0, "ploc": 2.0, "lloc": 1.0, "sloc": 4.0, "blank": 1.0},
653-
"nom": {"functions": 1.0, "closures": 0.0, "total": 1.0, "closures_min": 0.0, "closures_max": 0.0, "functions_min": 0.0, "functions_max": 1.0},
653+
"nom": {"functions": 1.0, "closures": 0.0, "functions_average": 0.5, "closures_average": 0.0, "total": 1.0, "average": 0.5, "closures_min": 0.0, "closures_max": 0.0, "functions_min": 0.0, "functions_max": 1.0},
654654
"mi": {"mi_original": 139.974_331_558_152_1,
655655
"mi_sei": 161.414_455_240_662_22,
656656
"mi_visual_studio": 81.856_334_244_533_39}},
@@ -677,7 +677,7 @@ mod tests {
677677
"n1": 2.0,
678678
"volume": 4.754_887_502_163_468},
679679
"loc": {"cloc": 0.0, "ploc": 2.0, "lloc": 1.0, "sloc": 2.0, "blank": 0.0},
680-
"nom": {"functions": 1.0, "closures": 0.0, "total": 1.0, "closures_min": 0.0, "closures_max": 0.0, "functions_min": 1.0, "functions_max": 1.0},
680+
"nom": {"functions": 1.0, "closures": 0.0, "functions_average": 1.0, "closures_average": 0.0, "total": 1.0, "average": 1.0, "closures_min": 0.0, "closures_max": 0.0, "functions_min": 1.0, "functions_max": 1.0},
681681
"mi": {"mi_original": 151.433_315_883_223_23,
682682
"mi_sei": 142.873_061_717_489_78,
683683
"mi_visual_studio": 88.557_494_668_551_6}},
@@ -730,7 +730,7 @@ mod tests {
730730
"n1": 2.0,
731731
"volume": 4.754_887_502_163_468},
732732
"loc": {"cloc": 0.0, "ploc": 2.0, "lloc": 1.0, "sloc": 2.0, "blank": 0.0},
733-
"nom": {"functions": 1.0, "closures": 0.0, "total": 1.0, "closures_min": 0.0, "closures_max": 0.0, "functions_min": 0.0, "functions_max": 1.0},
733+
"nom": {"functions": 1.0, "closures": 0.0, "functions_average": 0.5, "closures_average": 0.0, "total": 1.0, "average": 0.5, "closures_min": 0.0, "closures_max": 0.0, "functions_min": 0.0, "functions_max": 1.0},
734734
"mi": {"mi_original": 151.203_315_883_223_2,
735735
"mi_sei": 142.643_061_717_489_76,
736736
"mi_visual_studio": 88.422_991_744_574_97}},
@@ -779,7 +779,7 @@ mod tests {
779779
"n1": 2.0,
780780
"volume": 4.754_887_502_163_468},
781781
"loc": {"cloc": 0.0, "ploc": 2.0, "lloc": 1.0, "sloc": 2.0, "blank": 0.0},
782-
"nom": {"functions": 1.0, "closures": 0.0, "total": 1.0, "closures_min": 0.0, "closures_max": 0.0, "functions_min": 0.0, "functions_max": 1.0},
782+
"nom": {"functions": 1.0, "closures": 0.0, "functions_average": 0.5, "closures_average": 0.0, "total": 1.0, "average": 0.5, "closures_min": 0.0, "closures_max": 0.0, "functions_min": 0.0, "functions_max": 1.0},
783783
"mi": {"mi_original": 151.203_315_883_223_2,
784784
"mi_sei": 142.643_061_717_489_76,
785785
"mi_visual_studio": 88.422_991_744_574_97}},
@@ -806,7 +806,7 @@ mod tests {
806806
"n1": 2.0,
807807
"volume": 4.754_887_502_163_468},
808808
"loc": {"cloc": 0.0, "ploc": 2.0, "lloc": 1.0, "sloc": 2.0, "blank": 0.0},
809-
"nom": {"functions": 1.0, "closures": 0.0, "total": 1.0, "closures_min": 0.0, "closures_max": 0.0, "functions_min": 1.0, "functions_max": 1.0},
809+
"nom": {"functions": 1.0, "closures": 0.0, "functions_average": 1.0, "closures_average": 0.0, "total": 1.0, "average": 1.0, "closures_min": 0.0, "closures_max": 0.0, "functions_min": 1.0, "functions_max": 1.0},
810810
"mi": {"mi_original": 151.433_315_883_223_23,
811811
"mi_sei": 142.873_061_717_489_78,
812812
"mi_visual_studio": 88.557_494_668_551_6}},

src/metrics/nom.rs

Lines changed: 106 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ pub struct Stats {
1717
functions_max: usize,
1818
closures_min: usize,
1919
closures_max: usize,
20+
space_count: usize,
2021
}
2122
impl Default for Stats {
2223
fn default() -> Self {
@@ -29,6 +30,7 @@ impl Default for Stats {
2930
functions_max: 0,
3031
closures_min: usize::MAX,
3132
closures_max: 0,
33+
space_count: 1,
3234
}
3335
}
3436
}
@@ -37,10 +39,13 @@ impl Serialize for Stats {
3739
where
3840
S: Serializer,
3941
{
40-
let mut st = serializer.serialize_struct("nom", 7)?;
42+
let mut st = serializer.serialize_struct("nom", 10)?;
4143
st.serialize_field("functions", &self.functions_sum())?;
4244
st.serialize_field("closures", &self.closures_sum())?;
45+
st.serialize_field("functions_average", &self.functions_average())?;
46+
st.serialize_field("closures_average", &self.closures_average())?;
4347
st.serialize_field("total", &self.total())?;
48+
st.serialize_field("average", &self.average())?;
4449
st.serialize_field("functions_min", &self.functions_min())?;
4550
st.serialize_field("functions_max", &self.functions_max())?;
4651
st.serialize_field("closures_min", &self.closures_min())?;
@@ -55,14 +60,20 @@ impl fmt::Display for Stats {
5560
f,
5661
"functions: {}, \
5762
closures: {}, \
63+
functions_average: {}, \
64+
closures_average: {}, \
5865
total: {} \
66+
average: {} \
5967
functions_min: {} \
6068
functions_max: {} \
6169
closures_min: {} \
6270
closures_max: {}",
6371
self.functions_sum(),
6472
self.closures_sum(),
73+
self.functions_average(),
74+
self.closures_average(),
6575
self.total(),
76+
self.average(),
6677
self.functions_min(),
6778
self.functions_max(),
6879
self.closures_min(),
@@ -80,6 +91,7 @@ impl Stats {
8091
self.closures_max = self.closures_max.max(other.closures_max);
8192
self.functions_sum += other.functions_sum;
8293
self.closures_sum += other.closures_sum;
94+
self.space_count += other.space_count;
8395
}
8496

8597
/// Counts the number of function definitions in a scope
@@ -108,6 +120,24 @@ impl Stats {
108120
self.closures_sum as f64
109121
}
110122

123+
/// Returns the average number of function definitions over all spaces
124+
#[inline(always)]
125+
pub fn functions_average(&self) -> f64 {
126+
self.functions_sum() / self.space_count as f64
127+
}
128+
129+
/// Returns the average number of closures over all spaces
130+
#[inline(always)]
131+
pub fn closures_average(&self) -> f64 {
132+
self.closures_sum() / self.space_count as f64
133+
}
134+
135+
/// Returns the average number of function definitions and closures over all spaces
136+
#[inline(always)]
137+
pub fn average(&self) -> f64 {
138+
self.total() / self.space_count as f64
139+
}
140+
111141
/// Counts the number of function definitions in a scope
112142
#[inline(always)]
113143
pub fn functions_min(&self) -> f64 {
@@ -202,6 +232,11 @@ mod tests {
202232
(functions_min, 0, usize),
203233
(closures_min, 0, usize),
204234
(closures_max, 1, usize),
235+
],
236+
[
237+
(functions_average, 0.75), // number of spaces = 4
238+
(closures_average, 0.25),
239+
(average, 1.0)
205240
]
206241
);
207242
}
@@ -223,6 +258,11 @@ mod tests {
223258
(functions_min, 0, usize),
224259
(closures_min, 0, usize),
225260
(closures_max, 1, usize),
261+
],
262+
[
263+
(functions_average, 0.5), // number of spaces = 4
264+
(closures_average, 0.25),
265+
(average, 0.75)
226266
]
227267
);
228268
}
@@ -246,6 +286,11 @@ mod tests {
246286
(functions_min, 0, usize),
247287
(closures_min, 0, usize),
248288
(closures_max, 0, usize),
289+
],
290+
[
291+
(functions_average, 0.5), // number of spaces = 2
292+
(closures_average, 0.0),
293+
(average, 0.5)
249294
]
250295
);
251296
}
@@ -269,6 +314,11 @@ mod tests {
269314
(functions_min, 0, usize),
270315
(closures_min, 0, usize),
271316
(closures_max, 1, usize),
317+
],
318+
[
319+
(functions_average, 0.5), // number of spaces = 4
320+
(closures_average, 0.25),
321+
(average, 0.75)
272322
]
273323
);
274324
}
@@ -300,6 +350,11 @@ mod tests {
300350
(functions_min, 0, usize),
301351
(closures_min, 0, usize),
302352
(closures_max, 1, usize),
353+
],
354+
[
355+
(functions_average, 0.6), // number of spaces = 5
356+
(closures_average, 0.2),
357+
(average, 0.8)
303358
]
304359
);
305360
}
@@ -321,6 +376,11 @@ mod tests {
321376
(functions_min, 0, usize),
322377
(closures_min, 0, usize),
323378
(closures_max, 0, usize),
379+
],
380+
[
381+
(functions_average, 0.5), // number of spaces = 2
382+
(closures_average, 0.0),
383+
(average, 0.5)
324384
]
325385
);
326386
}
@@ -340,6 +400,11 @@ mod tests {
340400
(functions_min, 0, usize),
341401
(closures_min, 0, usize),
342402
(closures_max, 0, usize),
403+
],
404+
[
405+
(functions_average, 0.5), // number of spaces = 2
406+
(closures_average, 0.0),
407+
(average, 0.5)
343408
]
344409
);
345410
}
@@ -361,6 +426,11 @@ mod tests {
361426
(functions_min, 0, usize),
362427
(closures_min, 0, usize),
363428
(closures_max, 0, usize),
429+
],
430+
[
431+
(functions_average, 0.5), // number of spaces = 2
432+
(closures_average, 0.0),
433+
(average, 0.5)
364434
]
365435
);
366436
}
@@ -382,6 +452,11 @@ mod tests {
382452
(functions_min, 0, usize),
383453
(closures_min, 0, usize),
384454
(closures_max, 0, usize),
455+
],
456+
[
457+
(functions_average, 0.5), // number of spaces = 2
458+
(closures_average, 0.0),
459+
(average, 0.5)
385460
]
386461
);
387462
}
@@ -405,6 +480,11 @@ mod tests {
405480
(functions_min, 0, usize),
406481
(closures_min, 0, usize),
407482
(closures_max, 0, usize),
483+
],
484+
[
485+
(functions_average, 0.5), // number of spaces = 2
486+
(closures_average, 0.0),
487+
(average, 0.5)
408488
]
409489
);
410490
}
@@ -428,6 +508,11 @@ mod tests {
428508
(functions_min, 0, usize),
429509
(closures_min, 0, usize),
430510
(closures_max, 1, usize),
511+
],
512+
[
513+
(functions_average, 0.0), // number of spaces = 3
514+
(closures_average, 0.6666666666666666),
515+
(average, 0.6666666666666666)
431516
]
432517
);
433518
}
@@ -449,6 +534,11 @@ mod tests {
449534
(functions_min, 0, usize),
450535
(closures_min, 0, usize),
451536
(closures_max, 1, usize),
537+
],
538+
[
539+
(functions_average, 0.3333333333333333), // number of spaces = 3
540+
(closures_average, 0.3333333333333333),
541+
(average, 0.6666666666666666)
452542
]
453543
);
454544
}
@@ -468,6 +558,11 @@ mod tests {
468558
(functions_min, 0, usize),
469559
(closures_min, 0, usize),
470560
(closures_max, 0, usize),
561+
],
562+
[
563+
(functions_average, 0.5), // number of spaces = 2
564+
(closures_average, 0.0),
565+
(average, 0.5)
471566
]
472567
);
473568
}
@@ -487,6 +582,11 @@ mod tests {
487582
(functions_min, 0, usize),
488583
(closures_min, 0, usize),
489584
(closures_max, 1, usize),
585+
],
586+
[
587+
(functions_average, 0.0), // number of spaces = 2
588+
(closures_average, 0.5),
589+
(average, 0.5)
490590
]
491591
);
492592
}
@@ -508,6 +608,11 @@ mod tests {
508608
(functions_min, 0, usize),
509609
(closures_min, 0, usize),
510610
(closures_max, 1, usize),
611+
],
612+
[
613+
(functions_average, 0.0), // number of spaces = 2
614+
(closures_average, 0.5),
615+
(average, 0.5)
511616
]
512617
);
513618
}

0 commit comments

Comments
 (0)