Global Metrics
path: .metrics.halstead.vocabulary
old: 136.0
new: 82.0
path: .metrics.halstead.length
old: 472.0
new: 326.0
path: .metrics.halstead.n1
old: 13.0
new: 21.0
path: .metrics.halstead.bugs
old: 0.40097205511302497
new: 0.43687564028947873
path: .metrics.halstead.level
old: 0.08018252933507171
new: 0.04368063014679556
path: .metrics.halstead.time
old: 2317.8244332798668
new: 2636.00434250494
path: .metrics.halstead.N2
old: 236.0
new: 133.0
path: .metrics.halstead.estimated_program_length
old: 902.0350004925608
new: 454.01364346969007
path: .metrics.halstead.difficulty
old: 12.471544715447154
new: 22.89344262295082
path: .metrics.halstead.N1
old: 236.0
new: 193.0
path: .metrics.halstead.n2
old: 123.0
new: 61.0
path: .metrics.halstead.purity_ratio
old: 1.911091102738476
new: 1.3926798879438345
path: .metrics.halstead.volume
old: 3345.28246107016
new: 2072.5619535054952
path: .metrics.halstead.effort
old: 41720.8397990376
new: 47448.07816508892
path: .metrics.nargs.average
old: 1.0
new: 1.5714285714285714
path: .metrics.nargs.sum
old: 2.0
new: 11.0
path: .metrics.cyclomatic.sum
old: 14.0
new: 21.0
path: .metrics.cyclomatic.average
old: 1.0
new: 2.1
path: .metrics.mi.mi_sei
old: 25.20499134406134
new: 18.716944038547847
path: .metrics.mi.mi_visual_studio
old: 25.598093182082373
new: 29.25164107054608
path: .metrics.mi.mi_original
old: 43.77273934136086
new: 50.02030623063379
path: .metrics.loc.lloc
old: 1.0
new: 36.0
path: .metrics.loc.cloc
old: 43.0
new: 8.0
path: .metrics.loc.blank
old: 33.0
new: 15.0
path: .metrics.loc.sloc
old: 156.0
new: 112.0
path: .metrics.loc.ploc
old: 80.0
new: 89.0
path: .metrics.cognitive.sum
old: 0.0
new: 10.0
path: .metrics.cognitive.average
old: 0.0
new: 1.4285714285714286
path: .metrics.nexits.sum
old: 1.0
new: 14.0
path: .metrics.nexits.average
old: 0.5
new: 2.0
path: .metrics.nom.total
old: 2.0
new: 7.0
path: .metrics.nom.functions
old: 2.0
new: 7.0
Spaces Data
Minimal test - lines (12, 111)
path: .spaces[0].spaces[0].metrics.nargs.average
old: null
new: 1.5714285714285714
path: .spaces[0].spaces[0].metrics.nargs.sum
old: 0.0
new: 11.0
path: .spaces[0].spaces[0].metrics.cognitive.sum
old: 0.0
new: 10.0
path: .spaces[0].spaces[0].metrics.cognitive.average
old: null
new: 1.4285714285714286
path: .spaces[0].spaces[0].metrics.halstead.n2
old: 1.0
new: 56.0
path: .spaces[0].spaces[0].metrics.halstead.level
old: null
new: 0.041666666666666664
path: .spaces[0].spaces[0].metrics.halstead.time
old: 0.0
new: 2673.8289240298245
path: .spaces[0].spaces[0].metrics.halstead.bugs
old: 0.0
new: 0.4410449224856547
path: .spaces[0].spaces[0].metrics.halstead.N2
old: 1.0
new: 128.0
path: .spaces[0].spaces[0].metrics.halstead.volume
old: 0.0
new: 2005.3716930223684
path: .spaces[0].spaces[0].metrics.halstead.estimated_program_length
old: null
new: 417.45054151357976
path: .spaces[0].spaces[0].metrics.halstead.difficulty
old: 0.0
new: 24.0
path: .spaces[0].spaces[0].metrics.halstead.N1
old: 0.0
new: 192.0
path: .spaces[0].spaces[0].metrics.halstead.length
old: 1.0
new: 320.0
path: .spaces[0].spaces[0].metrics.halstead.n1
old: 0.0
new: 21.0
path: .spaces[0].spaces[0].metrics.halstead.purity_ratio
old: null
new: 1.3045329422299368
path: .spaces[0].spaces[0].metrics.halstead.vocabulary
old: 1.0
new: 77.0
path: .spaces[0].spaces[0].metrics.halstead.effort
old: 0.0
new: 48128.92063253684
path: .spaces[0].spaces[0].metrics.mi.mi_original
old: null
new: 52.48760251780581
path: .spaces[0].spaces[0].metrics.mi.mi_visual_studio
old: null
new: 30.694504396377667
path: .spaces[0].spaces[0].metrics.mi.mi_sei
old: null
new: 15.21331876411216
path: .spaces[0].spaces[0].metrics.loc.lloc
old: 0.0
new: 36.0
path: .spaces[0].spaces[0].metrics.loc.blank
old: 0.0
new: 14.0
path: .spaces[0].spaces[0].metrics.loc.cloc
old: 0.0
new: 3.0
path: .spaces[0].spaces[0].metrics.loc.sloc
old: 1.0
new: 100.0
path: .spaces[0].spaces[0].metrics.loc.ploc
old: 1.0
new: 83.0
path: .spaces[0].spaces[0].metrics.nom.total
old: 0.0
new: 7.0
path: .spaces[0].spaces[0].metrics.nom.functions
old: 0.0
new: 7.0
path: .spaces[0].spaces[0].metrics.cyclomatic.sum
old: 1.0
new: 19.0
path: .spaces[0].spaces[0].metrics.cyclomatic.average
old: 1.0
new: 2.375
path: .spaces[0].spaces[0].metrics.nexits.sum
old: 0.0
new: 14.0
path: .spaces[0].spaces[0].metrics.nexits.average
old: null
new: 2.0
Code
namespace widget {
NS_IMPL_ISUPPORTS(HeadlessClipboard, nsIClipboard)
HeadlessClipboard::HeadlessClipboard()
: mClipboard(MakeUnique()) {}
NS_IMETHODIMP
HeadlessClipboard::SetData(nsITransferable* aTransferable,
nsIClipboardOwner* anOwner,
int32_t aWhichClipboard) {
if (aWhichClipboard != kGlobalClipboard) {
return NS_ERROR_NOT_IMPLEMENTED;
}
// Clear out the clipboard in order to set the new data.
EmptyClipboard(aWhichClipboard);
// Only support plain text for now.
nsCOMPtr clip;
nsresult rv =
aTransferable->GetTransferData(kUnicodeMime, getter_AddRefs(clip));
if (NS_FAILED(rv)) {
return rv;
}
nsCOMPtr wideString = do_QueryInterface(clip);
if (!wideString) {
return NS_ERROR_NOT_IMPLEMENTED;
}
nsAutoString utf16string;
wideString->GetData(utf16string);
mClipboard->SetText(utf16string);
return NS_OK;
}
NS_IMETHODIMP
HeadlessClipboard::GetData(nsITransferable* aTransferable,
int32_t aWhichClipboard) {
if (aWhichClipboard != kGlobalClipboard) {
return NS_ERROR_NOT_IMPLEMENTED;
}
nsresult rv;
nsCOMPtr dataWrapper =
do_CreateInstance(NS_SUPPORTS_STRING_CONTRACTID, &rv);
rv = dataWrapper->SetData(mClipboard->GetText());
if (NS_WARN_IF(NS_FAILED(rv))) {
return rv;
}
nsCOMPtr genericDataWrapper = do_QueryInterface(dataWrapper);
rv = aTransferable->SetTransferData(kUnicodeMime, genericDataWrapper);
if (NS_WARN_IF(NS_FAILED(rv))) {
return rv;
}
return NS_OK;
}
NS_IMETHODIMP
HeadlessClipboard::EmptyClipboard(int32_t aWhichClipboard) {
if (aWhichClipboard != kGlobalClipboard) {
return NS_ERROR_NOT_IMPLEMENTED;
}
mClipboard->Clear();
return NS_OK;
}
NS_IMETHODIMP
HeadlessClipboard::HasDataMatchingFlavors(
const nsTArray& aFlavorList, int32_t aWhichClipboard,
bool* aHasType) {
*aHasType = false;
if (aWhichClipboard != kGlobalClipboard) {
return NS_ERROR_NOT_IMPLEMENTED;
}
// Retrieve the union of all aHasType in aFlavorList
for (auto& flavor : aFlavorList) {
if (flavor.EqualsLiteral(kUnicodeMime) && mClipboard->HasText()) {
*aHasType = true;
break;
}
}
return NS_OK;
}
NS_IMETHODIMP
HeadlessClipboard::SupportsSelectionClipboard(bool* aIsSupported) {
*aIsSupported = false;
return NS_OK;
}
NS_IMETHODIMP
HeadlessClipboard::SupportsFindClipboard(bool* _retval) {
NS_ENSURE_ARG_POINTER(_retval);
*_retval = false;
return NS_OK;
}
} // namespace widget
Minimal test - lines (11, 112)
path: .spaces[0].metrics.nom.total
old: 2.0
new: 7.0
path: .spaces[0].metrics.nom.functions
old: 2.0
new: 7.0
path: .spaces[0].metrics.cognitive.average
old: 0.0
new: 1.4285714285714286
path: .spaces[0].metrics.cognitive.sum
old: 0.0
new: 10.0
path: .spaces[0].metrics.cyclomatic.average
old: 1.0
new: 2.2222222222222223
path: .spaces[0].metrics.cyclomatic.sum
old: 13.0
new: 20.0
path: .spaces[0].metrics.halstead.N1
old: 236.0
new: 193.0
path: .spaces[0].metrics.halstead.difficulty
old: 12.516528925619834
new: 23.76315789473684
path: .spaces[0].metrics.halstead.n1
old: 13.0
new: 21.0
path: .spaces[0].metrics.halstead.length
old: 469.0
new: 322.0
path: .spaces[0].metrics.halstead.level
old: 0.07989435457246616
new: 0.042081949058693245
path: .spaces[0].metrics.halstead.bugs
old: 0.3994256849568112
new: 0.4408330483398576
path: .spaces[0].metrics.halstead.effort
old: 41479.724669642565
new: 48094.24372551844
path: .spaces[0].metrics.halstead.n2
old: 121.0
new: 57.0
path: .spaces[0].metrics.halstead.time
old: 2304.4291483134757
new: 2671.902429195469
path: .spaces[0].metrics.halstead.volume
old: 3313.995830324695
new: 2023.899514473644
path: .spaces[0].metrics.halstead.estimated_program_length
old: 885.2881680460602
new: 424.7133966857442
path: .spaces[0].metrics.halstead.N2
old: 233.0
new: 129.0
path: .spaces[0].metrics.halstead.purity_ratio
old: 1.887608034213348
new: 1.3189857039929944
path: .spaces[0].metrics.halstead.vocabulary
old: 134.0
new: 78.0
path: .spaces[0].metrics.loc.lloc
old: 1.0
new: 36.0
path: .spaces[0].metrics.loc.cloc
old: 38.0
new: 4.0
path: .spaces[0].metrics.loc.blank
old: 30.0
new: 13.0
path: .spaces[0].metrics.loc.sloc
old: 144.0
new: 102.0
path: .spaces[0].metrics.loc.ploc
old: 76.0
new: 85.0
path: .spaces[0].metrics.nargs.average
old: 1.0
new: 1.5714285714285714
path: .spaces[0].metrics.nargs.sum
old: 2.0
new: 11.0
path: .spaces[0].metrics.nexits.sum
old: 1.0
new: 14.0
path: .spaces[0].metrics.nexits.average
old: 0.5
new: 2.0
path: .spaces[0].metrics.mi.mi_original
old: 45.34829285998386
new: 51.888977237481114
path: .spaces[0].metrics.mi.mi_visual_studio
old: 26.51946950876249
new: 30.34443113302989
path: .spaces[0].metrics.mi.mi_sei
old: 26.7685281858245
new: 16.295328421953535
Code
namespace mozilla {
namespace widget {
NS_IMPL_ISUPPORTS(HeadlessClipboard, nsIClipboard)
HeadlessClipboard::HeadlessClipboard()
: mClipboard(MakeUnique()) {}
NS_IMETHODIMP
HeadlessClipboard::SetData(nsITransferable* aTransferable,
nsIClipboardOwner* anOwner,
int32_t aWhichClipboard) {
if (aWhichClipboard != kGlobalClipboard) {
return NS_ERROR_NOT_IMPLEMENTED;
}
// Clear out the clipboard in order to set the new data.
EmptyClipboard(aWhichClipboard);
// Only support plain text for now.
nsCOMPtr clip;
nsresult rv =
aTransferable->GetTransferData(kUnicodeMime, getter_AddRefs(clip));
if (NS_FAILED(rv)) {
return rv;
}
nsCOMPtr wideString = do_QueryInterface(clip);
if (!wideString) {
return NS_ERROR_NOT_IMPLEMENTED;
}
nsAutoString utf16string;
wideString->GetData(utf16string);
mClipboard->SetText(utf16string);
return NS_OK;
}
NS_IMETHODIMP
HeadlessClipboard::GetData(nsITransferable* aTransferable,
int32_t aWhichClipboard) {
if (aWhichClipboard != kGlobalClipboard) {
return NS_ERROR_NOT_IMPLEMENTED;
}
nsresult rv;
nsCOMPtr dataWrapper =
do_CreateInstance(NS_SUPPORTS_STRING_CONTRACTID, &rv);
rv = dataWrapper->SetData(mClipboard->GetText());
if (NS_WARN_IF(NS_FAILED(rv))) {
return rv;
}
nsCOMPtr genericDataWrapper = do_QueryInterface(dataWrapper);
rv = aTransferable->SetTransferData(kUnicodeMime, genericDataWrapper);
if (NS_WARN_IF(NS_FAILED(rv))) {
return rv;
}
return NS_OK;
}
NS_IMETHODIMP
HeadlessClipboard::EmptyClipboard(int32_t aWhichClipboard) {
if (aWhichClipboard != kGlobalClipboard) {
return NS_ERROR_NOT_IMPLEMENTED;
}
mClipboard->Clear();
return NS_OK;
}
NS_IMETHODIMP
HeadlessClipboard::HasDataMatchingFlavors(
const nsTArray& aFlavorList, int32_t aWhichClipboard,
bool* aHasType) {
*aHasType = false;
if (aWhichClipboard != kGlobalClipboard) {
return NS_ERROR_NOT_IMPLEMENTED;
}
// Retrieve the union of all aHasType in aFlavorList
for (auto& flavor : aFlavorList) {
if (flavor.EqualsLiteral(kUnicodeMime) && mClipboard->HasText()) {
*aHasType = true;
break;
}
}
return NS_OK;
}
NS_IMETHODIMP
HeadlessClipboard::SupportsSelectionClipboard(bool* aIsSupported) {
*aIsSupported = false;
return NS_OK;
}
NS_IMETHODIMP
HeadlessClipboard::SupportsFindClipboard(bool* _retval) {
NS_ENSURE_ARG_POINTER(_retval);
*_retval = false;
return NS_OK;
}
} // namespace widget
} // namespace mozilla