# Global Metrics

path: .metrics.cognitive.average
old: 5.6
new: 2.5
path: .metrics.cognitive.sum
old: 28.0
new: 5.0
path: .metrics.loc.sloc
old: 154.0
new: 51.0
path: .metrics.loc.lloc
old: 50.0
new: 14.0
path: .metrics.loc.cloc
old: 13.0
new: 11.0
path: .metrics.loc.blank
old: 33.0
new: 8.0
path: .metrics.loc.ploc
old: 108.0
new: 32.0
path: .metrics.cyclomatic.average
old: 3.857142857142857
new: 2.25
path: .metrics.cyclomatic.sum
old: 27.0
new: 9.0
path: .metrics.nexits.average
old: 2.6
new: 2.0
path: .metrics.nexits.sum
old: 13.0
new: 4.0
path: .metrics.nom.total
old: 5.0
new: 2.0
path: .metrics.nom.functions
old: 5.0
new: 2.0
path: .metrics.nargs.average
old: 0.4
new: 2.0
path: .metrics.nargs.sum
old: 2.0
new: 4.0
path: .metrics.mi.mi_sei
old: 9.258794820725136
new: 60.520883909959515
path: .metrics.mi.mi_visual_studio
old: 24.506345064866665
new: 41.48984060872713
path: .metrics.mi.mi_original
old: 41.90585006092199
new: 70.94762744092338
path: .metrics.halstead.n2
old: 36.0
new: 33.0
path: .metrics.halstead.estimated_program_length
old: 290.15922504123455
new: 209.48455594748285
path: .metrics.halstead.N2
old: 176.0
new: 51.0
path: .metrics.halstead.difficulty
old: 56.22222222222222
new: 9.272727272727272
path: .metrics.halstead.N1
old: 301.0
new: 82.0
path: .metrics.halstead.length
old: 477.0
new: 133.0
path: .metrics.halstead.bugs
old: 0.9732206921262984
new: 0.1193248154640406
path: .metrics.halstead.level
old: 0.017786561264822136
new: 0.10784313725490197
path: .metrics.halstead.n1
old: 23.0
new: 12.0
path: .metrics.halstead.time
old: 8764.48451654366
new: 376.2751469939817
path: .metrics.halstead.purity_ratio
old: 0.6083002621409529
new: 1.5750718492291944
path: .metrics.halstead.vocabulary
old: 59.0
new: 45.0
path: .metrics.halstead.volume
old: 2806.0207345455983
new: 730.4164618118467
path: .metrics.halstead.effort
old: 157760.72129778587
new: 6772.95264589167

# Spaces Data

## Minimal test - lines (11, 51)

path: .spaces[0].metrics.nexits.sum
old: 0.0
new: 4.0
path: .spaces[0].metrics.nexits.average
old: null
new: 2.0
path: .spaces[0].metrics.mi.mi_visual_studio
old: 70.16296580620595
new: 43.732965005243486
path: .spaces[0].metrics.mi.mi_original
old: 119.97867152861218
new: 74.78337015896636
path: .spaces[0].metrics.mi.mi_sei
old: 97.4936022941664
new: 60.93084941614128
path: .spaces[0].metrics.cyclomatic.sum
old: 1.0
new: 8.0
path: .spaces[0].metrics.cyclomatic.average
old: 1.0
new: 2.6666666666666665
path: .spaces[0].metrics.cognitive.sum
old: 0.0
new: 5.0
path: .spaces[0].metrics.cognitive.average
old: null
new: 2.5
path: .spaces[0].metrics.nargs.sum
old: 0.0
new: 4.0
path: .spaces[0].metrics.nargs.average
old: null
new: 2.0
path: .spaces[0].metrics.halstead.length
old: 19.0
new: 132.0
path: .spaces[0].metrics.halstead.level
old: 0.4
new: 0.10666666666666667
path: .spaces[0].metrics.halstead.N2
old: 6.0
new: 50.0
path: .spaces[0].metrics.halstead.N1
old: 13.0
new: 82.0
path: .spaces[0].metrics.halstead.effort
old: 164.32300188527162
new: 6756.046628063656
path: .spaces[0].metrics.halstead.n2
old: 6.0
new: 32.0
path: .spaces[0].metrics.halstead.purity_ratio
old: 1.4273376567770395
new: 1.5380268940049535
path: .spaces[0].metrics.halstead.volume
old: 65.72920075410865
new: 720.6449736601232
path: .spaces[0].metrics.halstead.time
old: 9.129055660292869
new: 375.3359237813142
path: .spaces[0].metrics.halstead.vocabulary
old: 11.0
new: 44.0
path: .spaces[0].metrics.halstead.difficulty
old: 2.5
new: 9.375
path: .spaces[0].metrics.halstead.n1
old: 5.0
new: 12.0
path: .spaces[0].metrics.halstead.bugs
old: 0.01000025295021724
new: 0.11912616772191031
path: .spaces[0].metrics.halstead.estimated_program_length
old: 27.11941547876375
new: 203.01955000865388
path: .spaces[0].metrics.nom.total
old: 0.0
new: 2.0
path: .spaces[0].metrics.nom.functions
old: 0.0
new: 2.0
path: .spaces[0].metrics.loc.ploc
old: 6.0
new: 29.0
path: .spaces[0].metrics.loc.sloc
old: 6.0
new: 41.0
path: .spaces[0].metrics.loc.cloc
old: 0.0
new: 6.0
path: .spaces[0].metrics.loc.lloc
old: 0.0
new: 14.0
path: .spaces[0].metrics.loc.blank
old: 0.0
new: 6.0

### Code

    namespace mozilla {

    static void AssignStdHandle(const char* aPath, const char* aMode, FILE* aStream,
                                DWORD aStdHandle) {
      // Visual Studio's _fileno() returns -2 for the standard
      // streams if they aren't associated with an output stream.
      const int fd = _fileno(aStream);
      if (fd == -2) {
        freopen(aPath, aMode, aStream);
        return;
      }
      if (fd < 0) {
        return;
      }

      const HANDLE handle = reinterpret_cast(_get_osfhandle(fd));
      if (handle == INVALID_HANDLE_VALUE) {
        return;
      }

      const HANDLE oldHandle = GetStdHandle(aStdHandle);
      if (handle == oldHandle) {
        return;
      }

      SetStdHandle(aStdHandle, handle);
    }

    // This code attaches the process to the appropriate console.
    void UseParentConsole() {
      if (AttachConsole(ATTACH_PARENT_PROCESS)) {
        // Redirect the standard streams to the existing console, but
        // only if they haven't been redirected to a valid file.
        AssignStdHandle("CONOUT$", "w", stdout, STD_OUTPUT_HANDLE);
        // There is no CONERR$, so use CONOUT$ for stderr as well.
        AssignStdHandle("CONOUT$", "w", stderr, STD_ERROR_HANDLE);
        AssignStdHandle("CONIN$", "r", stdin, STD_INPUT_HANDLE);
      }
    }

    }  // namespace mozilla