diff --git a/src/metrics/mi.rs b/src/metrics/mi.rs index ee4a91f7f..583c516f2 100644 --- a/src/metrics/mi.rs +++ b/src/metrics/mi.rs @@ -112,3 +112,27 @@ impl Mi for JavaCode {} impl Mi for GoCode {} impl Mi for CssCode {} impl Mi for HtmlCode {} + +#[cfg(test)] +mod tests { + use std::path::PathBuf; + + use super::*; + + #[test] + fn test_mi_formulas() { + check_metrics!( + "def f(): + pass\n", + "foo.py", + PythonParser, + mi, + [], + [ + (mi_original, 151.433_315_883_223_23), + (mi_sei, 142.873_061_717_489_78), + (mi_visual_studio, 88.557_494_668_551_6), + ] + ); + } +} diff --git a/src/spaces.rs b/src/spaces.rs index e797902ae..a90c3bcbd 100644 --- a/src/spaces.rs +++ b/src/spaces.rs @@ -178,6 +178,8 @@ fn compute_halstead_and_mi<'a, T: ParserTrait>(state: &mut State<'a>) { fn finalize<'a, T: ParserTrait>(state_stack: &mut Vec>, diff_level: usize) { for _ in 0..diff_level { if state_stack.len() <= 1 { + let mut last_state = state_stack.last_mut().unwrap(); + compute_halstead_and_mi::(&mut last_state); break; }