# Global Metrics

path: .metrics.halstead.vocabulary
old: 188.0
new: 123.0
path: .metrics.halstead.volume
old: 21069.74830732893
new: 6595.388780072278
path: .metrics.halstead.n1
old: 31.0
new: 29.0
path: .metrics.halstead.n2
old: 157.0
new: 94.0
path: .metrics.halstead.time
old: 145840.5331350535
new: 18764.894555122897
path: .metrics.halstead.effort
old: 2625129.596430963
new: 337768.1019922122
path: .metrics.halstead.N1
old: 1527.0
new: 618.0
path: .metrics.halstead.bugs
old: 6.34326094541453
new: 1.616681620170474
path: .metrics.halstead.length
old: 2789.0
new: 950.0
path: .metrics.halstead.N2
old: 1262.0
new: 332.0
path: .metrics.halstead.difficulty
old: 124.59235668789808
new: 51.212765957446805
path: .metrics.halstead.level
old: 0.00802617453095445
new: 0.01952638138761945
path: .metrics.halstead.purity_ratio
old: 0.4656993700960841
new: 0.7968555799119974
path: .metrics.halstead.estimated_program_length
old: 1298.8355431979785
new: 757.0128009163975
path: .metrics.cyclomatic.average
old: 1.18
new: 3.466666666666667
path: .metrics.cyclomatic.sum
old: 59.0
new: 52.0
path: .metrics.loc.blank
old: 162.0
new: 24.0
path: .metrics.loc.lloc
old: 212.0
new: 92.0
path: .metrics.loc.sloc
old: 822.0
new: 247.0
path: .metrics.loc.cloc
old: 202.0
new: 44.0
path: .metrics.loc.ploc
old: 458.0
new: 179.0
path: .metrics.nargs.average
old: 2.1020408163265305
new: 1.4545454545454546
path: .metrics.nargs.sum
old: 103.0
new: 16.0
path: .metrics.nexits.average
old: 0.04081632653061224
new: 2.1818181818181817
path: .metrics.nexits.sum
old: 2.0
new: 24.0
path: .metrics.mi.mi_visual_studio
old: 0.0
new: 14.069271153843449
path: .metrics.mi.mi_sei
old: -39.38762170192802
new: -5.284545784647754
path: .metrics.mi.mi_original
old: -3.069280918046545
new: 24.058453673072293
path: .metrics.nom.functions
old: 48.0
new: 11.0
path: .metrics.nom.total
old: 49.0
new: 11.0
path: .metrics.nom.closures
old: 1.0
new: 0.0
path: .metrics.cognitive.sum
old: 8.0
new: 60.0
path: .metrics.cognitive.average
old: 0.16326530612244897
new: 5.454545454545454

# Spaces Data

## Minimal test - lines (233, 243)

path: .spaces[3].metrics.mi.mi_visual_studio
old: 69.10461422706322
new: 59.063539617518
path: .spaces[3].metrics.mi.mi_original
old: 118.16889032827812
new: 100.99865274595578
path: .spaces[3].metrics.mi.mi_sei
old: 94.9844597907548
new: 70.51850275806648
path: .spaces[3].metrics.nargs.sum
old: 3.0
new: 2.0
path: .spaces[3].metrics.nargs.average
old: 3.0
new: 2.0
path: .spaces[3].metrics.cyclomatic.sum
old: 2.0
new: 5.0
path: .spaces[3].metrics.cyclomatic.average
old: 2.0
new: 5.0
path: .spaces[3].metrics.halstead.length
old: 37.0
new: 66.0
path: .spaces[3].metrics.halstead.n2
old: 7.0
new: 12.0
path: .spaces[3].metrics.halstead.volume
old: 157.17331799741265
new: 320.62674567841975
path: .spaces[3].metrics.halstead.level
old: 0.08333333333333333
new: 0.058823529411764705
path: .spaces[3].metrics.halstead.N2
old: 14.0
new: 24.0
path: .spaces[3].metrics.halstead.difficulty
old: 12.0
new: 17.0
path: .spaces[3].metrics.halstead.effort
old: 1886.079815968952
new: 5450.654676533136
path: .spaces[3].metrics.halstead.n1
old: 12.0
new: 17.0
path: .spaces[3].metrics.halstead.purity_ratio
old: 1.6938117422447865
new: 1.7046427016652974
path: .spaces[3].metrics.halstead.bugs
old: 0.05088449361426692
new: 0.10323917472336588
path: .spaces[3].metrics.halstead.time
old: 104.7822119982751
new: 302.8141486962853
path: .spaces[3].metrics.halstead.vocabulary
old: 19.0
new: 29.0
path: .spaces[3].metrics.halstead.N1
old: 23.0
new: 42.0
path: .spaces[3].metrics.halstead.estimated_program_length
old: 62.6710344630571
new: 112.50641830990963
path: .spaces[3].metrics.cognitive.sum
old: 1.0
new: 3.0
path: .spaces[3].metrics.cognitive.average
old: 1.0
new: 3.0
path: .spaces[3].metrics.loc.sloc
old: 5.0
new: 11.0
path: .spaces[3].metrics.loc.blank
old: 0.0
new: 1.0
path: .spaces[3].metrics.loc.ploc
old: 5.0
new: 10.0
path: .spaces[3].metrics.loc.lloc
old: 2.0
new: 3.0
path: .spaces[3].metrics.nexits.sum
old: 0.0
new: 1.0
path: .spaces[3].metrics.nexits.average
old: 0.0
new: 1.0

### Code

    inline UnsignedT RewindToPriorUTF8Codepoint(const Char* utf8Chars,
                                                UnsignedT index) {
      static_assert(std::is_same_v ||
                        std::is_same_v ||
                        std::is_same_v,
                    "UTF-8 data must be in 8-bit units");
      static_assert(std::is_unsigned_v, "index type must be unsigned");
      while (index > 0 && (utf8Chars[index] & 0xC0) == 0x80) --index;

      return index;
    }

## Minimal test - lines (28, 54)

path: .spaces[0].metrics.loc.ploc
old: 5.0
new: 26.0
path: .spaces[0].metrics.loc.sloc
old: 5.0
new: 27.0
path: .spaces[0].metrics.loc.lloc
old: 2.0
new: 17.0
path: .spaces[0].metrics.loc.cloc
old: 0.0
new: 1.0
path: .spaces[0].metrics.mi.mi_visual_studio
old: 70.03164615489644
new: 46.86964676874349
path: .spaces[0].metrics.mi.mi_original
old: 119.75411492487292
new: 80.14709597455138
path: .spaces[0].metrics.mi.mi_sei
old: 97.16963559555288
new: 55.93787717836836
path: .spaces[0].metrics.cyclomatic.average
old: 1.0
new: 1.4444444444444444
path: .spaces[0].metrics.cyclomatic.sum
old: 1.0
new: 13.0
path: .spaces[0].metrics.nexits.sum
old: 0.0
new: 12.0
path: .spaces[0].metrics.nexits.average
old: 0.0
new: 1.5
path: .spaces[0].metrics.nom.functions
old: 1.0
new: 8.0
path: .spaces[0].metrics.nom.total
old: 1.0
new: 8.0
path: .spaces[0].metrics.cognitive.average
old: 0.0
new: 0.5
path: .spaces[0].metrics.cognitive.sum
old: 0.0
new: 4.0
path: .spaces[0].metrics.halstead.bugs
old: 0.02599890043577348
new: 0.12793725242113052
path: .spaces[0].metrics.halstead.difficulty
old: 5.6875
new: 9.9375
path: .spaces[0].metrics.halstead.estimated_program_length
old: 43.65148445440323
new: 138.56842503028855
path: .spaces[0].metrics.halstead.level
old: 0.17582417582417584
new: 0.10062893081761008
path: .spaces[0].metrics.halstead.time
old: 38.26853600767927
new: 417.7388880093719
path: .spaces[0].metrics.halstead.purity_ratio
old: 1.408112401754943
new: 0.9237895002019236
path: .spaces[0].metrics.halstead.volume
old: 121.11360846386408
new: 756.659117903768
path: .spaces[0].metrics.halstead.length
old: 31.0
new: 150.0
path: .spaces[0].metrics.halstead.N1
old: 18.0
new: 97.0
path: .spaces[0].metrics.halstead.n2
old: 8.0
new: 24.0
path: .spaces[0].metrics.halstead.effort
old: 688.833648138227
new: 7519.299984168694
path: .spaces[0].metrics.halstead.n1
old: 7.0
new: 9.0
path: .spaces[0].metrics.halstead.vocabulary
old: 15.0
new: 33.0
path: .spaces[0].metrics.halstead.N2
old: 13.0
new: 53.0
path: .spaces[0].metrics.nargs.sum
old: 3.0
new: 8.0
path: .spaces[0].metrics.nargs.average
old: 3.0
new: 1.0

### Code

    class UTF8traits {
     public:
      static bool isASCII(char aChar) { return (aChar & 0x80) == 0x00; }
      static bool isInSeq(char aChar) { return (aChar & 0xC0) == 0x80; }
      static bool is2byte(char aChar) { return (aChar & 0xE0) == 0xC0; }
      static bool is3byte(char aChar) { return (aChar & 0xF0) == 0xE0; }
      static bool is4byte(char aChar) { return (aChar & 0xF8) == 0xF0; }
      static bool is5byte(char aChar) { return (aChar & 0xFC) == 0xF8; }
      static bool is6byte(char aChar) { return (aChar & 0xFE) == 0xFC; }
      // return the number of bytes in a sequence beginning with aChar
      static int bytes(char aChar) {
        if (isASCII(aChar)) {
          return 1;
        }
        if (is2byte(aChar)) {
          return 2;
        }
        if (is3byte(aChar)) {
          return 3;
        }
        if (is4byte(aChar)) {
          return 4;
        }
        MOZ_ASSERT_UNREACHABLE("should not be used for in-sequence characters");
        return 1;
      }
    };

## Minimal test - lines (68, 177)

path: .spaces[1].metrics.cognitive.sum
old: 1.0
new: 45.0
path: .spaces[1].metrics.cognitive.average
old: 1.0
new: 45.0
path: .spaces[1].metrics.nargs.average
old: 2.0
new: 3.0
path: .spaces[1].metrics.nargs.sum
old: 2.0
new: 3.0
path: .spaces[1].metrics.mi.mi_original
old: 105.08040572795063
new: 46.74443166840322
path: .spaces[1].metrics.mi.mi_visual_studio
old: 61.45052966546821
new: 27.335924952282586
path: .spaces[1].metrics.mi.mi_sei
old: 76.1017679651108
new: 8.941488008911845
path: .spaces[1].metrics.loc.blank
old: 1.0
new: 9.0
path: .spaces[1].metrics.loc.lloc
old: 5.0
new: 56.0
path: .spaces[1].metrics.loc.ploc
old: 9.0
new: 97.0
path: .spaces[1].metrics.loc.sloc
old: 10.0
new: 110.0
path: .spaces[1].metrics.loc.cloc
old: 0.0
new: 4.0
path: .spaces[1].metrics.halstead.length
old: 52.0
new: 542.0
path: .spaces[1].metrics.halstead.vocabulary
old: 20.0
new: 68.0
path: .spaces[1].metrics.halstead.level
old: 0.06818181818181819
new: 0.020257826887661146
path: .spaces[1].metrics.halstead.N2
old: 24.0
new: 181.0
path: .spaces[1].metrics.halstead.n1
old: 11.0
new: 24.0
path: .spaces[1].metrics.halstead.N1
old: 28.0
new: 361.0
path: .spaces[1].metrics.halstead.difficulty
old: 14.666666666666666
new: 49.36363636363637
path: .spaces[1].metrics.halstead.effort
old: 3296.190493700762
new: 162870.62172336565
path: .spaces[1].metrics.halstead.n2
old: 9.0
new: 44.0
path: .spaces[1].metrics.halstead.time
old: 183.12169409448677
new: 9048.367873520314
path: .spaces[1].metrics.halstead.purity_ratio
old: 1.28044370803829
new: 0.6462252605855144
path: .spaces[1].metrics.halstead.bugs
old: 0.07382786005219222
new: 0.994124052228488
path: .spaces[1].metrics.halstead.volume
old: 224.74026093414287
new: 3299.4048599576836
path: .spaces[1].metrics.halstead.estimated_program_length
old: 66.58307281799108
new: 350.2540912373488
path: .spaces[1].metrics.nexits.sum
old: 0.0
new: 8.0
path: .spaces[1].metrics.nexits.average
old: 0.0
new: 8.0
path: .spaces[1].metrics.cyclomatic.average
old: 2.0
new: 13.0
path: .spaces[1].metrics.cyclomatic.sum
old: 2.0
new: 26.0

### Code

    class UTF8CharEnumerator {
     public:
      static inline char32_t NextChar(const char** aBuffer, const char* aEnd,
                                      bool* aErr = nullptr) {
        MOZ_ASSERT(aBuffer, "null buffer pointer pointer");
        MOZ_ASSERT(aEnd, "null end pointer");

        const unsigned char* p = reinterpret_cast(*aBuffer);
        const unsigned char* end = reinterpret_cast(aEnd);

        MOZ_ASSERT(p, "null buffer");
        MOZ_ASSERT(p < end, "Bogus range");

        unsigned char first = *p;
        ++p;

        if (MOZ_LIKELY(first < 0x80U)) {
          *aBuffer = reinterpret_cast(p);
          return first;
        }

        // Unsigned underflow is defined behavior
        if (MOZ_UNLIKELY((p == end) || ((first - 0xC2U) >= (0xF5U - 0xC2U)))) {
          *aBuffer = reinterpret_cast(p);
          if (aErr) {
            *aErr = true;
          }
          return 0xFFFDU;
        }

        unsigned char second = *p;

        if (first < 0xE0U) {
          // Two-byte
          if (MOZ_LIKELY((second & 0xC0U) == 0x80U)) {
            ++p;
            *aBuffer = reinterpret_cast(p);
            return ((uint32_t(first) & 0x1FU) << 6) | (uint32_t(second) & 0x3FU);
          }
          *aBuffer = reinterpret_cast(p);
          if (aErr) {
            *aErr = true;
          }
          return 0xFFFDU;
        }

        if (MOZ_LIKELY(first < 0xF0U)) {
          // Three-byte
          unsigned char lower = 0x80U;
          unsigned char upper = 0xBFU;
          if (first == 0xE0U) {
            lower = 0xA0U;
          } else if (first == 0xEDU) {
            upper = 0x9FU;
          }
          if (MOZ_LIKELY(second >= lower && second <= upper)) {
            ++p;
            if (MOZ_LIKELY(p != end)) {
              unsigned char third = *p;
              if (MOZ_LIKELY((third & 0xC0U) == 0x80U)) {
                ++p;
                *aBuffer = reinterpret_cast(p);
                return ((uint32_t(first) & 0xFU) << 12) |
                       ((uint32_t(second) & 0x3FU) << 6) |
                       (uint32_t(third) & 0x3FU);
              }
            }
          }
          *aBuffer = reinterpret_cast(p);
          if (aErr) {
            *aErr = true;
          }
          return 0xFFFDU;
        }

        // Four-byte
        unsigned char lower = 0x80U;
        unsigned char upper = 0xBFU;
        if (first == 0xF0U) {
          lower = 0x90U;
        } else if (first == 0xF4U) {
          upper = 0x8FU;
        }
        if (MOZ_LIKELY(second >= lower && second <= upper)) {
          ++p;
          if (MOZ_LIKELY(p != end)) {
            unsigned char third = *p;
            if (MOZ_LIKELY((third & 0xC0U) == 0x80U)) {
              ++p;
              if (MOZ_LIKELY(p != end)) {
                unsigned char fourth = *p;
                if (MOZ_LIKELY((fourth & 0xC0U) == 0x80U)) {
                  ++p;
                  *aBuffer = reinterpret_cast(p);
                  return ((uint32_t(first) & 0x7U) << 18) |
                         ((uint32_t(second) & 0x3FU) << 12) |
                         ((uint32_t(third) & 0x3FU) << 6) |
                         (uint32_t(fourth) & 0x3FU);
                }
              }
            }
          }
        }
        *aBuffer = reinterpret_cast(p);
        if (aErr) {
          *aErr = true;
        }
        return 0xFFFDU;
      }
    };

## Minimal test - lines (190, 230)

path: .spaces[2].metrics.nexits.sum
old: 1.0
new: 3.0
path: .spaces[2].metrics.nexits.average
old: 1.0
new: 3.0
path: .spaces[2].metrics.cyclomatic.sum
old: 1.0
new: 7.0
path: .spaces[2].metrics.cyclomatic.average
old: 1.0
new: 3.5
path: .spaces[2].metrics.mi.mi_visual_studio
old: 72.85229283872809
new: 43.100169582636184
path: .spaces[2].metrics.mi.mi_original
old: 124.57742075422505
new: 73.70128998630787
path: .spaces[2].metrics.mi.mi_sei
old: 104.12819499625
new: 57.09012107490486
path: .spaces[2].metrics.nargs.average
old: 1.0
new: 3.0
path: .spaces[2].metrics.nargs.sum
old: 1.0
new: 3.0
path: .spaces[2].metrics.cognitive.average
old: 0.0
new: 8.0
path: .spaces[2].metrics.cognitive.sum
old: 0.0
new: 8.0
path: .spaces[2].metrics.loc.lloc
old: 1.0
new: 16.0
path: .spaces[2].metrics.loc.cloc
old: 0.0
new: 5.0
path: .spaces[2].metrics.loc.blank
old: 0.0
new: 4.0
path: .spaces[2].metrics.loc.ploc
old: 4.0
new: 32.0
path: .spaces[2].metrics.loc.sloc
old: 4.0
new: 41.0
path: .spaces[2].metrics.halstead.purity_ratio
old: 2.0693078449769615
new: 1.0761497095538914
path: .spaces[2].metrics.halstead.level
old: 0.12987012987012986
new: 0.043010752688172046
path: .spaces[2].metrics.halstead.bugs
old: 0.027251268165690797
new: 0.2582438459641226
path: .spaces[2].metrics.halstead.volume
old: 96.0
new: 927.4785967179467
path: .spaces[2].metrics.halstead.time
old: 41.06666666666667
new: 1197.993187427348
path: .spaces[2].metrics.halstead.difficulty
old: 7.7
new: 23.25
path: .spaces[2].metrics.halstead.estimated_program_length
old: 49.66338827944708
new: 185.09775004326937
path: .spaces[2].metrics.halstead.N1
old: 17.0
new: 110.0
path: .spaces[2].metrics.halstead.n2
old: 5.0
new: 24.0
path: .spaces[2].metrics.halstead.n1
old: 11.0
new: 18.0
path: .spaces[2].metrics.halstead.N2
old: 7.0
new: 62.0
path: .spaces[2].metrics.halstead.effort
old: 739.2
new: 21563.877373692263
path: .spaces[2].metrics.halstead.length
old: 24.0
new: 172.0
path: .spaces[2].metrics.halstead.vocabulary
old: 16.0
new: 42.0

### Code

    class UTF16CharEnumerator {
     public:
      static inline char32_t NextChar(const char16_t** aBuffer,
                                      const char16_t* aEnd, bool* aErr = nullptr) {
        MOZ_ASSERT(aBuffer, "null buffer pointer pointer");
        MOZ_ASSERT(aEnd, "null end pointer");

        const char16_t* p = *aBuffer;

        MOZ_ASSERT(p, "null buffer");
        MOZ_ASSERT(p < aEnd, "Bogus range");

        char16_t c = *p++;

        // Let's use encoding_rs-style code golf here.
        // Unsigned underflow is defined behavior
        char16_t cMinusSurrogateStart = c - 0xD800U;
        if (MOZ_LIKELY(cMinusSurrogateStart > (0xDFFFU - 0xD800U))) {
          *aBuffer = p;
          return c;
        }
        if (MOZ_LIKELY(cMinusSurrogateStart <= (0xDBFFU - 0xD800U))) {
          // High surrogate
          if (MOZ_LIKELY(p != aEnd)) {
            char16_t second = *p;
            // Unsigned underflow is defined behavior
            if (MOZ_LIKELY((second - 0xDC00U) <= (0xDFFFU - 0xDC00U))) {
              *aBuffer = ++p;
              return (uint32_t(c) << 10) + uint32_t(second) -
                     (((0xD800U << 10) - 0x10000U) + 0xDC00U);
            }
          }
        }
        // Unpaired surrogate
        *aBuffer = p;
        if (aErr) {
          *aErr = true;
        }
        return 0xFFFDU;
      }
    };