Global Metrics

path: .metrics.halstead.time
old: 518097.99773496366
new: 418.6038557338901

path: .metrics.halstead.bugs
old: 14.768453659695814
new: 0.12811379562100245

path: .metrics.halstead.volume
old: 64875.50306975851
new: 761.0979195161638

path: .metrics.halstead.n2
old: 362.0
new: 30.0

path: .metrics.halstead.difficulty
old: 143.74861878453038
new: 9.9

path: .metrics.halstead.estimated_program_length
old: 3249.917947726632
new: 175.7360428812364

path: .metrics.halstead.N2
old: 3061.0
new: 66.0

path: .metrics.halstead.n1
old: 34.0
new: 9.0

path: .metrics.halstead.vocabulary
old: 396.0
new: 39.0

path: .metrics.halstead.N1
old: 4457.0
new: 78.0

path: .metrics.halstead.level
old: 0.006956588581201837
new: 0.101010101010101

path: .metrics.halstead.purity_ratio
old: 0.4322849092480224
new: 1.2203891866752528

path: .metrics.halstead.effort
old: 9325763.959229346
new: 7534.869403210021

path: .metrics.halstead.length
old: 7518.0
new: 144.0

path: .metrics.loc.sloc
old: 1741.0
new: 141.0

path: .metrics.loc.lloc
old: 645.0
new: 0.0

path: .metrics.loc.blank
old: 85.0
new: 6.0

path: .metrics.loc.cloc
old: 101.0
new: 94.0

path: .metrics.loc.ploc
old: 1555.0
new: 41.0

path: .metrics.nexits.average
old: 0.896551724137931
new: null

path: .metrics.nexits.sum
old: 26.0
new: 0.0

path: .metrics.nargs.sum
old: 244.0
new: 0.0

path: .metrics.nargs.average
old: 8.413793103448276
new: null

path: .metrics.mi.mi_visual_studio
old: 0.0
new: 32.67212120630862

path: .metrics.mi.mi_original
old: -90.30505397364806
new: 55.869327262787735

path: .metrics.mi.mi_sei
old: -151.10149393989118
new: 52.784226130968634

path: .metrics.nom.total
old: 29.0
new: 0.0

path: .metrics.nom.functions
old: 29.0
new: 0.0

path: .metrics.cognitive.sum
old: 366.0
new: 0.0

path: .metrics.cognitive.average
old: 12.620689655172416
new: null

path: .metrics.cyclomatic.average
old: 11.612903225806452
new: 1.0

path: .metrics.cyclomatic.sum
old: 360.0
new: 2.0

Spaces Data

Minimal test - lines (15, 139)

path: .spaces[0].metrics.cyclomatic.sum
old: 359.0
new: 1.0

path: .spaces[0].metrics.cyclomatic.average
old: 11.966666666666669
new: 1.0

path: .spaces[0].metrics.halstead.n1
old: 34.0
new: 9.0

path: .spaces[0].metrics.halstead.n2
old: 357.0
new: 27.0

path: .spaces[0].metrics.halstead.N1
old: 4457.0
new: 77.0

path: .spaces[0].metrics.halstead.estimated_program_length
old: 3200.2552908609
new: 156.91128757139447

path: .spaces[0].metrics.halstead.effort
old: 9410275.51606543
new: 7425.735610404974

path: .spaces[0].metrics.halstead.purity_ratio
old: 0.4260190749282348
new: 1.1288581839668668

path: .spaces[0].metrics.halstead.level
old: 0.006873977086743044
new: 0.0967741935483871

path: .spaces[0].metrics.halstead.volume
old: 64686.01827737284
new: 718.6195752004813

path: .spaces[0].metrics.halstead.vocabulary
old: 391.0
new: 36.0

path: .spaces[0].metrics.halstead.time
old: 522793.0842258572
new: 412.5408672447208

path: .spaces[0].metrics.halstead.bugs
old: 14.857542159120664
new: 0.12687373744573122

path: .spaces[0].metrics.halstead.N2
old: 3055.0
new: 62.0

path: .spaces[0].metrics.halstead.difficulty
old: 145.47619047619048
new: 10.333333333333334

path: .spaces[0].metrics.halstead.length
old: 7512.0
new: 139.0

path: .spaces[0].metrics.loc.sloc
old: 1719.0
new: 125.0

path: .spaces[0].metrics.loc.lloc
old: 645.0
new: 0.0

path: .spaces[0].metrics.loc.cloc
old: 90.0
new: 87.0

path: .spaces[0].metrics.loc.blank
old: 83.0
new: 2.0

path: .spaces[0].metrics.loc.ploc
old: 1546.0
new: 36.0

path: .spaces[0].metrics.mi.mi_visual_studio
old: 0.0
new: 34.12233360082862

path: .spaces[0].metrics.mi.mi_original
old: -89.85382954007886
new: 58.34919045741694

path: .spaces[0].metrics.mi.mi_sei
old: -151.42416680172337
new: 56.656468361632086

path: .spaces[0].metrics.nom.functions
old: 29.0
new: 0.0

path: .spaces[0].metrics.nom.total
old: 29.0
new: 0.0

path: .spaces[0].metrics.nargs.sum
old: 244.0
new: 0.0

path: .spaces[0].metrics.nargs.average
old: 8.413793103448276
new: null

path: .spaces[0].metrics.nexits.average
old: 0.896551724137931
new: null

path: .spaces[0].metrics.nexits.sum
old: 26.0
new: 0.0

path: .spaces[0].metrics.cognitive.average
old: 12.620689655172416
new: null

path: .spaces[0].metrics.cognitive.sum
old: 366.0
new: 0.0

Code

class nsLinebreakConverter {
 public:
  // Note: enum must match char* array in GetLinebreakString
  typedef enum {
    eLinebreakAny,  // any kind of linebreak (i.e. "don't care" source)

    eLinebreakPlatform,  // platform linebreak
    eLinebreakContent,   // Content model linebreak (LF)
    eLinebreakNet,       // Form submission linebreak (CRLF)

    eLinebreakMac,      // CR
    eLinebreakUnix,     // LF
    eLinebreakWindows,  // CRLF

    eLinebreakSpace  // space characters. Only valid as destination type

  } ELinebreakType;

  enum { kIgnoreLen = -1 };

  /* ConvertLineBreaks
   * Convert line breaks in the supplied string, allocating and returning
   * a new buffer. Returns nullptr on failure.
   * @param aSrc: the source string. if aSrcLen == kIgnoreLen this string is
   *              assumed to be null terminated, otherwise it must be at least
   *              aSrcLen long.
   * @param aSrcBreaks: the line breaks in the source. If unknown, pass
   *              eLinebreakAny.  If known, pass the known value, as this may
   *              be more efficient.
   * @param aDestBreaks: the line breaks you want in the output.
   * @param aSrcLen: length of the source. If -1, the source is assumed to be a
   *              null-terminated string.
   * @param aOutLen: used to return character length of returned buffer, if not
   *              null.
   */
  static char* ConvertLineBreaks(const char* aSrc, ELinebreakType aSrcBreaks,
                                 ELinebreakType aDestBreaks,
                                 int32_t aSrcLen = kIgnoreLen,
                                 int32_t* aOutLen = nullptr);

  /* ConvertUnicharLineBreaks
   * Convert line breaks in the supplied string, allocating and returning
   * a new buffer. Returns nullptr on failure.
   * @param aSrc: the source string. if aSrcLen == kIgnoreLen this string is
   *              assumed to be null terminated, otherwise it must be at least
   *              aSrcLen long.
   * @param aSrcBreaks: the line breaks in the source. If unknown, pass
   *              eLinebreakAny.  If known, pass the known value, as this may
   *              be more efficient.
   * @param aDestBreaks: the line breaks you want in the output.
   * @param aSrcLen: length of the source, in characters. If -1, the source is
   *              assumed to be a null-terminated string.
   * @param aOutLen: used to return character length of returned buffer, if not
   *              null.
   */
  static char16_t* ConvertUnicharLineBreaks(const char16_t* aSrc,
                                            ELinebreakType aSrcBreaks,
                                            ELinebreakType aDestBreaks,
                                            int32_t aSrcLen = kIgnoreLen,
                                            int32_t* aOutLen = nullptr);

  /* ConvertStringLineBreaks
   * Convert line breaks in the supplied string, changing the string buffer
   * (i.e. in-place conversion)
   * @param ioString: the string to be converted.
   * @param aSrcBreaks: the line breaks in the source. If unknown, pass
   *              eLinebreakAny.  If known, pass the known value, as this may
   *              be more efficient.
   * @param aDestBreaks: the line breaks you want in the output.
   * @param aSrcLen: length of the source, in characters. If -1, the source is
   *              assumed to be a null-terminated string.
   */
  static nsresult ConvertStringLineBreaks(nsString& aIoString,
                                          ELinebreakType aSrcBreaks,
                                          ELinebreakType aDestBreaks);

  /* ConvertLineBreaksInSitu
   * Convert line breaks in place if possible. NOTE: THIS MAY REALLOCATE THE
   * BUFFER, BUT IT WON'T FREE THE OLD BUFFER (because it doesn't know how). So
   * be prepared to keep a copy of the old pointer, and free it if this passes
   * back a new pointer.  ALSO NOTE: DON'T PASS A STATIC STRING POINTER TO THIS
   * FUNCTION.
   *
   * @param ioBuffer: the source buffer. if aSrcLen == kIgnoreLen this string
   *              is assumed to be null terminated, otherwise it must be at
   *              least aSrcLen long.
   * @param aSrcBreaks: the line breaks in the source. If unknown, pass
   *              eLinebreakAny.  If known, pass the known value, as this may
   *              be more efficient.
   * @param aDestBreaks: the line breaks you want in the output.
   * @param aSrcLen: length of the source. If -1, the source is assumed to be a
   *              null-terminated string.
   * @param aOutLen: used to return character length of returned buffer, if not
   *              null.
   */
  static nsresult ConvertLineBreaksInSitu(char** aIoBuffer,
                                          ELinebreakType aSrcBreaks,
                                          ELinebreakType aDestBreaks,
                                          int32_t aSrcLen = kIgnoreLen,
                                          int32_t* aOutLen = nullptr);

  /* ConvertUnicharLineBreaksInSitu
   * Convert line breaks in place if possible. NOTE: THIS MAY REALLOCATE THE
   * BUFFER, BUT IT WON'T FREE THE OLD BUFFER (because it doesn't know how). So
   * be prepared to keep a copy of the old pointer, and free it if this passes
   * back a new pointer.
   *
   * @param ioBuffer: the source buffer. if aSrcLen == kIgnoreLen this string
   *              is assumed to be null terminated, otherwise it must be at
   *              least aSrcLen long.
   * @param aSrcBreaks: the line breaks in the source. If unknown, pass
   *              eLinebreakAny.  If known, pass the known value, as this may
   *              be more efficient.
   * @param aDestBreaks: the line breaks you want in the output.
   * @param aSrcLen: length of the source in characters. If -1, the source is
   *              assumed to be a null-terminated string.
   * @param aOutLen: used to return character length of returned buffer, if not
   *              null.
   */
  static nsresult ConvertUnicharLineBreaksInSitu(char16_t** aIoBuffer,
                                                 ELinebreakType aSrcBreaks,
                                                 ELinebreakType aDestBreaks,
                                                 int32_t aSrcLen = kIgnoreLen,
                                                 int32_t* aOutLen = nullptr);
};