Global Metrics
path: .metrics.nexits.sum
old: 4.0
new: 3.0
path: .metrics.nexits.average
old: 0.6666666666666666
new: 1.0
path: .metrics.loc.blank
old: 13.0
new: 10.0
path: .metrics.loc.cloc
old: 7.0
new: 28.0
path: .metrics.loc.lloc
old: 17.0
new: 3.0
path: .metrics.loc.ploc
old: 53.0
new: 31.0
path: .metrics.loc.sloc
old: 73.0
new: 69.0
path: .metrics.cognitive.average
old: 0.6666666666666666
new: 0.3333333333333333
path: .metrics.cognitive.sum
old: 4.0
new: 1.0
path: .metrics.mi.mi_visual_studio
old: 35.100477570267614
new: 39.255872033867334
path: .metrics.mi.mi_original
old: 60.021816645157614
new: 67.12754117791314
path: .metrics.mi.mi_sei
old: 35.394607083953986
new: 63.67351102340699
path: .metrics.cyclomatic.average
old: 1.75
new: 1.1428571428571428
path: .metrics.cyclomatic.sum
old: 14.0
new: 8.0
path: .metrics.nom.functions
old: 6.0
new: 3.0
path: .metrics.nom.total
old: 6.0
new: 3.0
path: .metrics.halstead.length
old: 253.0
new: 121.0
path: .metrics.halstead.N1
old: 144.0
new: 72.0
path: .metrics.halstead.purity_ratio
old: 1.5312299922947303
new: 1.2083736524450803
path: .metrics.halstead.time
old: 2045.3863948394085
new: 499.1789736074081
path: .metrics.halstead.estimated_program_length
old: 387.4011880505667
new: 146.21321194585474
path: .metrics.halstead.volume
old: 1566.0256133966443
new: 620.643245050341
path: .metrics.halstead.vocabulary
old: 73.0
new: 35.0
path: .metrics.halstead.bugs
old: 0.36890170057158994
new: 0.14406703046212668
path: .metrics.halstead.N2
old: 109.0
new: 49.0
path: .metrics.halstead.n1
old: 22.0
new: 13.0
path: .metrics.halstead.effort
old: 36816.95510710935
new: 8985.221524933346
path: .metrics.halstead.difficulty
old: 23.50980392156863
new: 14.477272727272728
path: .metrics.halstead.level
old: 0.042535446205170975
new: 0.06907378335949765
path: .metrics.halstead.n2
old: 51.0
new: 22.0
path: .metrics.nargs.sum
old: 9.0
new: 5.0
path: .metrics.nargs.average
old: 1.5
new: 1.6666666666666667
Spaces Data
Minimal test - lines (17, 67)
path: .spaces[0].metrics.nexits.sum
old: 4.0
new: 3.0
path: .spaces[0].metrics.nexits.average
old: 0.6666666666666666
new: 1.0
path: .spaces[0].metrics.cyclomatic.sum
old: 13.0
new: 7.0
path: .spaces[0].metrics.cyclomatic.average
old: 1.8571428571428572
new: 1.1666666666666667
path: .spaces[0].metrics.loc.ploc
old: 48.0
new: 24.0
path: .spaces[0].metrics.loc.blank
old: 10.0
new: 6.0
path: .spaces[0].metrics.loc.sloc
old: 58.0
new: 51.0
path: .spaces[0].metrics.loc.cloc
old: 0.0
new: 21.0
path: .spaces[0].metrics.loc.lloc
old: 17.0
new: 3.0
path: .spaces[0].metrics.halstead.level
old: 0.04020979020979021
new: 0.07155635062611806
path: .spaces[0].metrics.halstead.vocabulary
old: 68.0
new: 33.0
path: .spaces[0].metrics.halstead.volume
old: 1509.6907846300842
new: 549.8389590100714
path: .spaces[0].metrics.halstead.difficulty
old: 24.869565217391305
new: 13.975
path: .spaces[0].metrics.halstead.N2
old: 104.0
new: 43.0
path: .spaces[0].metrics.halstead.estimated_program_length
old: 352.1913455886431
new: 134.54427823358145
path: .spaces[0].metrics.halstead.length
old: 248.0
new: 109.0
path: .spaces[0].metrics.halstead.purity_ratio
old: 1.4201263935025932
new: 1.2343511764548758
path: .spaces[0].metrics.halstead.n1
old: 22.0
new: 13.0
path: .spaces[0].metrics.halstead.N1
old: 144.0
new: 66.0
path: .spaces[0].metrics.halstead.effort
old: 37545.35342645253
new: 7683.999452165748
path: .spaces[0].metrics.halstead.n2
old: 46.0
new: 20.0
path: .spaces[0].metrics.halstead.time
old: 2085.8529681362515
new: 426.8888584536527
path: .spaces[0].metrics.halstead.bugs
old: 0.3737514416411171
new: 0.12979868584100096
path: .spaces[0].metrics.mi.mi_sei
old: 18.198513548742824
new: 72.07524511650008
path: .spaces[0].metrics.mi.mi_visual_studio
old: 37.52549155018516
new: 42.62244005578735
path: .spaces[0].metrics.mi.mi_original
old: 64.16859055081662
new: 72.88437249539638
path: .spaces[0].metrics.cognitive.sum
old: 4.0
new: 1.0
path: .spaces[0].metrics.cognitive.average
old: 0.6666666666666666
new: 0.3333333333333333
path: .spaces[0].metrics.nargs.average
old: 1.5
new: 1.6666666666666667
path: .spaces[0].metrics.nargs.sum
old: 9.0
new: 5.0
path: .spaces[0].metrics.nom.functions
old: 6.0
new: 3.0
path: .spaces[0].metrics.nom.total
old: 6.0
new: 3.0
Code
namespace mozilla {
// Boolean arrays, fixed size and filled in at compile time, meant to
// record something about each of the (standard) ASCII characters.
// No extended ASCII for now, there has been no use case.
// If you have loops that go through a string character by character
// and test for equality to a certain set of characters before deciding
// on a course of action, chances are building up one of these arrays
// and using it is going to be faster, especially if the set of
// characters is more than one long, and known at compile time.
class ASCIIMask {
public:
// Preset masks for some common character groups
// When testing, you must check if the index is < 128 or use IsMasked()
//
// if (someChar < 128 && MaskCRLF()[someChar]) this is \r or \n
static const ASCIIMaskArray& MaskCRLF();
static const ASCIIMaskArray& Mask0to9();
static const ASCIIMaskArray& MaskCRLFTab();
static const ASCIIMaskArray& MaskWhitespace();
static MOZ_ALWAYS_INLINE bool IsMasked(const ASCIIMaskArray& aMask,
uint32_t aChar) {
return aChar < 128 && aMask[aChar];
}
};
// Outside of the preset ones, use these templates to create more masks.
//
// The example creation will look like this:
//
// constexpr bool TestABC(char c) { return c == 'A' || c == 'B' || c == 'C'; }
// constexpr std::array sABCMask = CreateASCIIMask(TestABC);
// ...
// if (someChar < 128 && sABCMask[someChar]) this is A or B or C
namespace details {
template
constexpr std::array CreateASCIIMask(
F fun, std::index_sequence) {
return {{fun(Indices)...}};
}
} // namespace details
template
constexpr std::array CreateASCIIMask(F fun) {
return details::CreateASCIIMask(fun, std::make_index_sequence<128>{});
}
} // namespace mozilla
Minimal test - lines (27, 43)
path: .spaces[0].spaces[0].metrics.nargs.average
old: 1.0
new: 2.0
path: .spaces[0].spaces[0].metrics.nargs.sum
old: 1.0
new: 2.0
path: .spaces[0].spaces[0].metrics.nexits.average
old: 0.0
new: 1.0
path: .spaces[0].spaces[0].metrics.nexits.sum
old: 0.0
new: 1.0
path: .spaces[0].spaces[0].metrics.cyclomatic.sum
old: 1.0
new: 3.0
path: .spaces[0].spaces[0].metrics.cyclomatic.average
old: 1.0
new: 1.5
path: .spaces[0].spaces[0].metrics.cognitive.average
old: 0.0
new: 1.0
path: .spaces[0].spaces[0].metrics.cognitive.sum
old: 0.0
new: 1.0
path: .spaces[0].spaces[0].metrics.halstead.volume
old: 66.60791492653966
new: 184.4773317567079
path: .spaces[0].spaces[0].metrics.halstead.level
old: 0.2916666666666667
new: 0.106951871657754
path: .spaces[0].spaces[0].metrics.halstead.vocabulary
old: 13.0
new: 21.0
path: .spaces[0].spaces[0].metrics.halstead.estimated_program_length
old: 35.161259458730164
new: 71.27302875388389
path: .spaces[0].spaces[0].metrics.halstead.purity_ratio
old: 1.9534033032627869
new: 1.6969768750924736
path: .spaces[0].spaces[0].metrics.halstead.n1
old: 6.0
new: 11.0
path: .spaces[0].spaces[0].metrics.halstead.n2
old: 7.0
new: 10.0
path: .spaces[0].spaces[0].metrics.halstead.length
old: 18.0
new: 42.0
path: .spaces[0].spaces[0].metrics.halstead.bugs
old: 0.012453882740670712
new: 0.04794189077855202
path: .spaces[0].spaces[0].metrics.halstead.difficulty
old: 3.4285714285714284
new: 9.35
path: .spaces[0].spaces[0].metrics.halstead.effort
old: 228.36999403385028
new: 1724.8630519252192
path: .spaces[0].spaces[0].metrics.halstead.N2
old: 8.0
new: 17.0
path: .spaces[0].spaces[0].metrics.halstead.N1
old: 10.0
new: 25.0
path: .spaces[0].spaces[0].metrics.halstead.time
old: 12.68722189076946
new: 95.82572510695664
path: .spaces[0].spaces[0].metrics.loc.lloc
old: 0.0
new: 1.0
path: .spaces[0].spaces[0].metrics.loc.sloc
old: 1.0
new: 17.0
path: .spaces[0].spaces[0].metrics.loc.ploc
old: 1.0
new: 11.0
path: .spaces[0].spaces[0].metrics.loc.blank
old: 0.0
new: 2.0
path: .spaces[0].spaces[0].metrics.loc.cloc
old: 0.0
new: 4.0
path: .spaces[0].spaces[0].metrics.mi.mi_original
old: 148.9361182512251
new: 97.2808055435992
path: .spaces[0].spaces[0].metrics.mi.mi_visual_studio
old: 87.09714517615504
new: 56.88935996701708
path: .spaces[0].spaces[0].metrics.mi.mi_sei
old: 139.27036707768642
new: 99.0867925278072
Code
class ASCIIMask {
public:
// Preset masks for some common character groups
// When testing, you must check if the index is < 128 or use IsMasked()
//
// if (someChar < 128 && MaskCRLF()[someChar]) this is \r or \n
static const ASCIIMaskArray& MaskCRLF();
static const ASCIIMaskArray& Mask0to9();
static const ASCIIMaskArray& MaskCRLFTab();
static const ASCIIMaskArray& MaskWhitespace();
static MOZ_ALWAYS_INLINE bool IsMasked(const ASCIIMaskArray& aMask,
uint32_t aChar) {
return aChar < 128 && aMask[aChar];
}
};
Minimal test - lines (54, 60)
path: .spaces[0].spaces[1].metrics.loc.sloc
old: 4.0
new: 7.0
path: .spaces[0].spaces[1].metrics.loc.ploc
old: 4.0
new: 7.0
path: .spaces[0].spaces[1].metrics.mi.mi_visual_studio
old: 76.70975417931889
new: 66.05665920663085
path: .spaces[0].spaces[1].metrics.mi.mi_original
old: 131.1736796466353
new: 112.95688724333876
path: .spaces[0].spaces[1].metrics.mi.mi_sei
old: 113.64458498874995
new: 87.46512878701483
path: .spaces[0].spaces[1].metrics.cyclomatic.sum
old: 1.0
new: 2.0
path: .spaces[0].spaces[1].metrics.nargs.average
old: 0.0
new: 2.0
path: .spaces[0].spaces[1].metrics.nargs.sum
old: 0.0
new: 2.0
path: .spaces[0].spaces[1].metrics.nexits.average
old: 0.0
new: 1.0
path: .spaces[0].spaces[1].metrics.nexits.sum
old: 0.0
new: 1.0
path: .spaces[0].spaces[1].metrics.halstead.estimated_program_length
old: 16.36452797660028
new: 57.05865002596162
path: .spaces[0].spaces[1].metrics.halstead.level
old: 0.4
new: 0.13333333333333333
path: .spaces[0].spaces[1].metrics.halstead.time
old: 3.75
new: 62.54887502163467
path: .spaces[0].spaces[1].metrics.halstead.effort
old: 67.5
new: 1125.879750389424
path: .spaces[0].spaces[1].metrics.halstead.purity_ratio
old: 1.81828088628892
new: 1.584962500721156
path: .spaces[0].spaces[1].metrics.halstead.n1
old: 5.0
new: 9.0
path: .spaces[0].spaces[1].metrics.halstead.bugs
old: 0.005526047247960579
new: 0.0360750341363372
path: .spaces[0].spaces[1].metrics.halstead.difficulty
old: 2.5
new: 7.5
path: .spaces[0].spaces[1].metrics.halstead.n2
old: 3.0
new: 9.0
path: .spaces[0].spaces[1].metrics.halstead.vocabulary
old: 8.0
new: 18.0
path: .spaces[0].spaces[1].metrics.halstead.length
old: 9.0
new: 36.0
path: .spaces[0].spaces[1].metrics.halstead.volume
old: 27.0
new: 150.11730005192322
path: .spaces[0].spaces[1].metrics.halstead.N1
old: 6.0
new: 21.0
path: .spaces[0].spaces[1].metrics.halstead.N2
old: 3.0
new: 15.0
Code
namespace details {
template
constexpr std::array CreateASCIIMask(
F fun, std::index_sequence) {
return {{fun(Indices)...}};
}
} // namespace details
Minimal test - lines (63, 65)
path: .spaces[0].spaces[2].metrics.mi.mi_sei
old: 63.32198561178021
new: 110.7222468482286
path: .spaces[0].spaces[2].metrics.mi.mi_original
old: 96.1515594730986
new: 129.14806920389006
path: .spaces[0].spaces[2].metrics.mi.mi_visual_studio
old: 56.22898214801087
new: 75.52518666894156
path: .spaces[0].spaces[2].metrics.halstead.length
old: 66.0
new: 25.0
path: .spaces[0].spaces[2].metrics.halstead.n1
old: 15.0
new: 9.0
path: .spaces[0].spaces[2].metrics.halstead.N2
old: 27.0
new: 9.0
path: .spaces[0].spaces[2].metrics.halstead.difficulty
old: 10.125
new: 6.75
path: .spaces[0].spaces[2].metrics.halstead.vocabulary
old: 35.0
new: 15.0
path: .spaces[0].spaces[2].metrics.halstead.estimated_program_length
old: 145.04192083187502
new: 44.039100017307746
path: .spaces[0].spaces[2].metrics.halstead.level
old: 0.09876543209876544
new: 0.14814814814814814
path: .spaces[0].spaces[2].metrics.halstead.time
old: 190.42463200408187
new: 36.62709933382987
path: .spaces[0].spaces[2].metrics.halstead.volume
old: 338.53267911836775
new: 97.67226489021296
path: .spaces[0].spaces[2].metrics.halstead.bugs
old: 0.07577788830693055
new: 0.025250041691176003
path: .spaces[0].spaces[2].metrics.halstead.N1
old: 39.0
new: 16.0
path: .spaces[0].spaces[2].metrics.halstead.effort
old: 3427.6433760734735
new: 659.2877880089376
path: .spaces[0].spaces[2].metrics.halstead.n2
old: 20.0
new: 6.0
path: .spaces[0].spaces[2].metrics.halstead.purity_ratio
old: 2.1976048610890153
new: 1.76156400069231
path: .spaces[0].spaces[2].metrics.cognitive.average
old: 2.0
new: 0.0
path: .spaces[0].spaces[2].metrics.cognitive.sum
old: 2.0
new: 0.0
path: .spaces[0].spaces[2].metrics.nargs.sum
old: 2.0
new: 1.0
path: .spaces[0].spaces[2].metrics.nargs.average
old: 2.0
new: 1.0
path: .spaces[0].spaces[2].metrics.loc.blank
old: 1.0
new: 0.0
path: .spaces[0].spaces[2].metrics.loc.sloc
old: 15.0
new: 3.0
path: .spaces[0].spaces[2].metrics.loc.lloc
old: 6.0
new: 1.0
path: .spaces[0].spaces[2].metrics.loc.ploc
old: 14.0
new: 3.0
path: .spaces[0].spaces[2].metrics.cyclomatic.sum
old: 3.0
new: 1.0
path: .spaces[0].spaces[2].metrics.cyclomatic.average
old: 3.0
new: 1.0
Code
constexpr std::array CreateASCIIMask(F fun) {
return details::CreateASCIIMask(fun, std::make_index_sequence<128>{});
}