# Global Metrics

path: .metrics.mi.mi_visual_studio
old: 38.396932949748745
new: 27.209404917253792
path: .metrics.mi.mi_original
old: 65.65875534407036
new: 46.52808240850399
path: .metrics.mi.mi_sei
old: 47.969571419402286
new: 29.63878942134661
path: .metrics.nargs.sum
old: 10.0
new: 15.0
path: .metrics.nargs.average
old: 3.3333333333333335
new: 1.3636363636363635
path: .metrics.loc.lloc
old: 8.0
new: 16.0
path: .metrics.loc.blank
old: 3.0
new: 18.0
path: .metrics.loc.cloc
old: 9.0
new: 39.0
path: .metrics.loc.sloc
old: 60.0
new: 142.0
path: .metrics.loc.ploc
old: 48.0
new: 85.0
path: .metrics.cyclomatic.sum
old: 7.0
new: 19.0
path: .metrics.cyclomatic.average
old: 1.4
new: 1.0
path: .metrics.nom.total
old: 3.0
new: 11.0
path: .metrics.nom.functions
old: 3.0
new: 11.0
path: .metrics.cognitive.average
old: 0.3333333333333333
new: 0.0
path: .metrics.cognitive.sum
old: 1.0
new: 0.0
path: .metrics.halstead.N1
old: 134.0
new: 181.0
path: .metrics.halstead.effort
old: 28848.576642364325
new: 43278.89455104075
path: .metrics.halstead.vocabulary
old: 57.0
new: 84.0
path: .metrics.halstead.estimated_program_length
old: 281.1893365615893
new: 473.9886619036196
path: .metrics.halstead.N2
old: 94.0
new: 150.0
path: .metrics.halstead.level
old: 0.04609929078014184
new: 0.04888888888888889
path: .metrics.halstead.length
old: 228.0
new: 331.0
path: .metrics.halstead.purity_ratio
old: 1.2332865638666195
new: 1.4319899151166755
path: .metrics.halstead.difficulty
old: 21.692307692307693
new: 20.454545454545453
path: .metrics.halstead.n2
old: 39.0
new: 66.0
path: .metrics.halstead.volume
old: 1329.898923229561
new: 2115.85706693977
path: .metrics.halstead.time
old: 1602.6987023535737
new: 2404.383030613375
path: .metrics.halstead.bugs
old: 0.31354148111836405
new: 0.41089373370260673
path: .metrics.nexits.average
old: 0.6666666666666666
new: 0.3636363636363637
path: .metrics.nexits.sum
old: 2.0
new: 4.0

# Spaces Data

## Minimal test - lines (28, 80)

path: .spaces[0].spaces[1].metrics.halstead.estimated_program_length
old: 17.509775004326936
new: 252.7242144196627
path: .spaces[0].spaces[1].metrics.halstead.level
old: 0.3333333333333333
new: 0.07645875251509054
path: .spaces[0].spaces[1].metrics.halstead.N2
old: 2.0
new: 71.0
path: .spaces[0].spaces[1].metrics.halstead.vocabulary
old: 8.0
new: 52.0
path: .spaces[0].spaces[1].metrics.halstead.bugs
old: 0.0057689982812296325
new: 0.17474983015243534
path: .spaces[0].spaces[1].metrics.halstead.volume
old: 24.0
new: 917.7707946207156
path: .spaces[0].spaces[1].metrics.halstead.n2
old: 2.0
new: 38.0
path: .spaces[0].spaces[1].metrics.halstead.time
old: 4.0
new: 666.8597732843505
path: .spaces[0].spaces[1].metrics.halstead.N1
old: 6.0
new: 90.0
path: .spaces[0].spaces[1].metrics.halstead.difficulty
old: 3.0
new: 13.078947368421051
path: .spaces[0].spaces[1].metrics.halstead.n1
old: 6.0
new: 14.0
path: .spaces[0].spaces[1].metrics.halstead.length
old: 8.0
new: 161.0
path: .spaces[0].spaces[1].metrics.halstead.effort
old: 72.0
new: 12003.47591911831
path: .spaces[0].spaces[1].metrics.halstead.purity_ratio
old: 2.188721875540867
new: 1.569715617513433
path: .spaces[0].spaces[1].metrics.loc.sloc
old: 1.0
new: 53.0
path: .spaces[0].spaces[1].metrics.loc.cloc
old: 0.0
new: 11.0
path: .spaces[0].spaces[1].metrics.loc.blank
old: 0.0
new: 3.0
path: .spaces[0].spaces[1].metrics.loc.lloc
old: 1.0
new: 9.0
path: .spaces[0].spaces[1].metrics.loc.ploc
old: 1.0
new: 39.0
path: .spaces[0].spaces[1].metrics.nexits.sum
old: 1.0
new: 2.0
path: .spaces[0].spaces[1].metrics.nexits.average
old: 1.0
new: 0.4
path: .spaces[0].spaces[1].metrics.nom.functions
old: 1.0
new: 5.0
path: .spaces[0].spaces[1].metrics.nom.total
old: 1.0
new: 5.0
path: .spaces[0].spaces[1].metrics.cyclomatic.sum
old: 1.0
new: 7.0
path: .spaces[0].spaces[1].metrics.nargs.sum
old: 0.0
new: 6.0
path: .spaces[0].spaces[1].metrics.nargs.average
old: 0.0
new: 1.2
path: .spaces[0].spaces[1].metrics.mi.mi_visual_studio
old: 90.2012398141466
new: 40.7000836622594
path: .spaces[0].spaces[1].metrics.mi.mi_original
old: 154.24412008219068
new: 69.59714306246359
path: .spaces[0].spaces[1].metrics.mi.mi_sei
old: 146.92819499625
new: 57.850395712703744

### Code

    class WidgetContentCommandEvent : public WidgetGUIEvent {
     public:
      virtual WidgetContentCommandEvent* AsContentCommandEvent() override {
        return this;
      }

      WidgetContentCommandEvent(bool aIsTrusted, EventMessage aMessage,
                                nsIWidget* aWidget, bool aOnlyEnabledCheck = false)
          : WidgetGUIEvent(aIsTrusted, aMessage, aWidget,
                           eContentCommandEventClass),
            mOnlyEnabledCheck(aOnlyEnabledCheck),
            mSucceeded(false),
            mIsEnabled(false) {}

      virtual WidgetEvent* Duplicate() const override {
        // This event isn't an internal event of any DOM event.
        NS_ASSERTION(!IsAllowedToDispatchDOMEvent(),
                     "WidgetQueryContentEvent needs to support Duplicate()");
        MOZ_CRASH("WidgetQueryContentEvent doesn't support Duplicate()");
        return nullptr;
      }

      // eContentCommandPasteTransferable
      nsCOMPtr mTransferable;  // [in]

      // eContentCommandScroll
      // for mScroll.mUnit
      enum { eCmdScrollUnit_Line, eCmdScrollUnit_Page, eCmdScrollUnit_Whole };

      struct ScrollInfo {
        ScrollInfo()
            : mAmount(0), mUnit(eCmdScrollUnit_Line), mIsHorizontal(false) {}

        int32_t mAmount;     // [in]
        uint8_t mUnit;       // [in]
        bool mIsHorizontal;  // [in]
      } mScroll;

      bool mOnlyEnabledCheck;  // [in]

      bool mSucceeded;  // [out]
      bool mIsEnabled;  // [out]

      void AssignContentCommandEventData(const WidgetContentCommandEvent& aEvent,
                                         bool aCopyTargets) {
        AssignGUIEventData(aEvent, aCopyTargets);

        mScroll = aEvent.mScroll;
        mOnlyEnabledCheck = aEvent.mOnlyEnabledCheck;
        mSucceeded = aEvent.mSucceeded;
        mIsEnabled = aEvent.mIsEnabled;
      }
    };

## Minimal test - lines (17, 140)

path: .spaces[0].metrics.cognitive.average
old: 0.3333333333333333
new: 0.0
path: .spaces[0].metrics.cognitive.sum
old: 1.0
new: 0.0
path: .spaces[0].metrics.mi.mi_sei
old: 28.089888889386813
new: 32.884059082393364
path: .spaces[0].metrics.mi.mi_visual_studio
old: 41.82386112242261
new: 28.7443141547342
path: .spaces[0].metrics.mi.mi_original
old: 71.51880251934267
new: 49.15277720459548
path: .spaces[0].metrics.nexits.average
old: 0.6666666666666666
new: 0.3636363636363637
path: .spaces[0].metrics.nexits.sum
old: 2.0
new: 4.0
path: .spaces[0].metrics.cyclomatic.sum
old: 6.0
new: 18.0
path: .spaces[0].metrics.cyclomatic.average
old: 1.5
new: 1.0
path: .spaces[0].metrics.nargs.average
old: 3.3333333333333335
new: 1.3636363636363635
path: .spaces[0].metrics.nargs.sum
old: 10.0
new: 15.0
path: .spaces[0].metrics.halstead.purity_ratio
old: 1.146772773058718
new: 1.3255311288965208
path: .spaces[0].metrics.halstead.N1
old: 133.0
new: 181.0
path: .spaces[0].metrics.halstead.difficulty
old: 22.88571428571429
new: 21.45
path: .spaces[0].metrics.halstead.n2
old: 35.0
new: 60.0
path: .spaces[0].metrics.halstead.effort
old: 29101.43631632392
new: 43682.288340648855
path: .spaces[0].metrics.halstead.level
old: 0.04369538077403246
new: 0.046620046620046623
path: .spaces[0].metrics.halstead.volume
old: 1271.59834091303
new: 2036.4703189113688
path: .spaces[0].metrics.halstead.estimated_program_length
old: 254.58355561903545
new: 429.4720857624727
path: .spaces[0].metrics.halstead.bugs
old: 0.31537095617136507
new: 0.4134430217238909
path: .spaces[0].metrics.halstead.vocabulary
old: 53.0
new: 78.0
path: .spaces[0].metrics.halstead.N2
old: 89.0
new: 143.0
path: .spaces[0].metrics.halstead.length
old: 222.0
new: 324.0
path: .spaces[0].metrics.halstead.time
old: 1616.746462017995
new: 2426.793796702714
path: .spaces[0].metrics.loc.lloc
old: 8.0
new: 16.0
path: .spaces[0].metrics.loc.blank
old: 1.0
new: 15.0
path: .spaces[0].metrics.loc.cloc
old: 0.0
new: 33.0
path: .spaces[0].metrics.loc.sloc
old: 43.0
new: 124.0
path: .spaces[0].metrics.loc.ploc
old: 42.0
new: 76.0
path: .spaces[0].metrics.nom.total
old: 3.0
new: 11.0
path: .spaces[0].metrics.nom.functions
old: 3.0
new: 11.0

### Code

    namespace mozilla {

    namespace dom {
    class PBrowserParent;
    class PBrowserChild;
    }  // namespace dom

    /******************************************************************************
     * mozilla::WidgetContentCommandEvent
     ******************************************************************************/

    class WidgetContentCommandEvent : public WidgetGUIEvent {
     public:
      virtual WidgetContentCommandEvent* AsContentCommandEvent() override {
        return this;
      }

      WidgetContentCommandEvent(bool aIsTrusted, EventMessage aMessage,
                                nsIWidget* aWidget, bool aOnlyEnabledCheck = false)
          : WidgetGUIEvent(aIsTrusted, aMessage, aWidget,
                           eContentCommandEventClass),
            mOnlyEnabledCheck(aOnlyEnabledCheck),
            mSucceeded(false),
            mIsEnabled(false) {}

      virtual WidgetEvent* Duplicate() const override {
        // This event isn't an internal event of any DOM event.
        NS_ASSERTION(!IsAllowedToDispatchDOMEvent(),
                     "WidgetQueryContentEvent needs to support Duplicate()");
        MOZ_CRASH("WidgetQueryContentEvent doesn't support Duplicate()");
        return nullptr;
      }

      // eContentCommandPasteTransferable
      nsCOMPtr mTransferable;  // [in]

      // eContentCommandScroll
      // for mScroll.mUnit
      enum { eCmdScrollUnit_Line, eCmdScrollUnit_Page, eCmdScrollUnit_Whole };

      struct ScrollInfo {
        ScrollInfo()
            : mAmount(0), mUnit(eCmdScrollUnit_Line), mIsHorizontal(false) {}

        int32_t mAmount;     // [in]
        uint8_t mUnit;       // [in]
        bool mIsHorizontal;  // [in]
      } mScroll;

      bool mOnlyEnabledCheck;  // [in]

      bool mSucceeded;  // [out]
      bool mIsEnabled;  // [out]

      void AssignContentCommandEventData(const WidgetContentCommandEvent& aEvent,
                                         bool aCopyTargets) {
        AssignGUIEventData(aEvent, aCopyTargets);

        mScroll = aEvent.mScroll;
        mOnlyEnabledCheck = aEvent.mOnlyEnabledCheck;
        mSucceeded = aEvent.mSucceeded;
        mIsEnabled = aEvent.mIsEnabled;
      }
    };

    /******************************************************************************
     * mozilla::WidgetCommandEvent
     *
     * This sends a command to chrome.  If you want to request what is performed
     * in focused content, you should use WidgetContentCommandEvent instead.
     *
     * XXX Should be |WidgetChromeCommandEvent|?
     ******************************************************************************/

    class WidgetCommandEvent : public WidgetGUIEvent {
     public:
      virtual WidgetCommandEvent* AsCommandEvent() override { return this; }

     protected:
      WidgetCommandEvent(bool aIsTrusted, nsAtom* aEventType, nsAtom* aCommand,
                         nsIWidget* aWidget)
          : WidgetGUIEvent(aIsTrusted, eUnidentifiedEvent, aWidget,
                           eCommandEventClass),
            mCommand(aCommand) {
        mSpecifiedEventType = aEventType;
      }

     public:
      /**
       * Constructor to initialize an app command.  This is the only case to
       * initialize this class as a command in C++ stack.
       */
      WidgetCommandEvent(bool aIsTrusted, nsAtom* aCommand, nsIWidget* aWidget)
          : WidgetCommandEvent(aIsTrusted, nsGkAtoms::onAppCommand, aCommand,
                               aWidget) {}

      /**
       * Constructor to initialize as internal event of dom::CommandEvent.
       */
      WidgetCommandEvent() : WidgetCommandEvent(false, nullptr, nullptr, nullptr) {}

      virtual WidgetEvent* Duplicate() const override {
        MOZ_ASSERT(mClass == eCommandEventClass,
                   "Duplicate() must be overridden by sub class");
        // Not copying widget, it is a weak reference.
        WidgetCommandEvent* result =
            new WidgetCommandEvent(false, mSpecifiedEventType, mCommand, nullptr);
        result->AssignCommandEventData(*this, true);
        result->mFlags = mFlags;
        return result;
      }

      RefPtr mCommand;

      // XXX Not tested by test_assign_event_data.html
      void AssignCommandEventData(const WidgetCommandEvent& aEvent,
                                  bool aCopyTargets) {
        AssignGUIEventData(aEvent, aCopyTargets);

        // mCommand must have been initialized with the constructor.
      }
    };

    }  // namespace mozilla

## Minimal test - lines (91, 138)

path: .spaces[0].spaces[2].metrics.mi.mi_visual_studio
old: 53.45885236677018
new: 41.907183970679576
path: .spaces[0].spaces[2].metrics.mi.mi_original
old: 91.414637547177
new: 71.66128458986208
path: .spaces[0].spaces[2].metrics.mi.mi_sei
old: 56.48805184017493
new: 60.87911387934833
path: .spaces[0].spaces[2].metrics.nom.functions
old: 1.0
new: 6.0
path: .spaces[0].spaces[2].metrics.nom.total
old: 1.0
new: 6.0
path: .spaces[0].spaces[2].metrics.cognitive.sum
old: 1.0
new: 0.0
path: .spaces[0].spaces[2].metrics.cognitive.average
old: 1.0
new: 0.0
path: .spaces[0].spaces[2].metrics.nargs.sum
old: 5.0
new: 9.0
path: .spaces[0].spaces[2].metrics.nargs.average
old: 5.0
new: 1.5
path: .spaces[0].spaces[2].metrics.nexits.average
old: 0.0
new: 0.3333333333333333
path: .spaces[0].spaces[2].metrics.nexits.sum
old: 0.0
new: 2.0
path: .spaces[0].spaces[2].metrics.loc.cloc
old: 0.0
new: 10.0
path: .spaces[0].spaces[2].metrics.loc.lloc
old: 6.0
new: 7.0
path: .spaces[0].spaces[2].metrics.loc.ploc
old: 18.0
new: 31.0
path: .spaces[0].spaces[2].metrics.loc.blank
old: 0.0
new: 7.0
path: .spaces[0].spaces[2].metrics.loc.sloc
old: 18.0
new: 48.0
path: .spaces[0].spaces[2].metrics.cyclomatic.average
old: 3.0
new: 1.0
path: .spaces[0].spaces[2].metrics.cyclomatic.sum
old: 3.0
new: 7.0
path: .spaces[0].spaces[2].metrics.halstead.time
old: 344.5168426381369
new: 875.6665074975315
path: .spaces[0].spaces[2].metrics.halstead.vocabulary
old: 35.0
new: 45.0
path: .spaces[0].spaces[2].metrics.halstead.estimated_program_length
old: 145.54163478716043
new: 204.88144885869957
path: .spaces[0].spaces[2].metrics.halstead.length
old: 93.0
new: 153.0
path: .spaces[0].spaces[2].metrics.halstead.volume
old: 477.0233205758819
new: 840.2535237384402
path: .spaces[0].spaces[2].metrics.halstead.N2
old: 39.0
new: 68.0
path: .spaces[0].spaces[2].metrics.halstead.difficulty
old: 13.0
new: 18.75862068965517
path: .spaces[0].spaces[2].metrics.halstead.bugs
old: 0.11251248607650503
new: 0.2095493130383483
path: .spaces[0].spaces[2].metrics.halstead.n1
old: 14.0
new: 16.0
path: .spaces[0].spaces[2].metrics.halstead.N1
old: 54.0
new: 85.0
path: .spaces[0].spaces[2].metrics.halstead.n2
old: 21.0
new: 29.0
path: .spaces[0].spaces[2].metrics.halstead.level
old: 0.07692307692307693
new: 0.05330882352941177
path: .spaces[0].spaces[2].metrics.halstead.purity_ratio
old: 1.5649638149157037
new: 1.3390944369849644
path: .spaces[0].spaces[2].metrics.halstead.effort
old: 6201.303167486464
new: 15761.997134955567

### Code

    class WidgetCommandEvent : public WidgetGUIEvent {
     public:
      virtual WidgetCommandEvent* AsCommandEvent() override { return this; }

     protected:
      WidgetCommandEvent(bool aIsTrusted, nsAtom* aEventType, nsAtom* aCommand,
                         nsIWidget* aWidget)
          : WidgetGUIEvent(aIsTrusted, eUnidentifiedEvent, aWidget,
                           eCommandEventClass),
            mCommand(aCommand) {
        mSpecifiedEventType = aEventType;
      }

     public:
      /**
       * Constructor to initialize an app command.  This is the only case to
       * initialize this class as a command in C++ stack.
       */
      WidgetCommandEvent(bool aIsTrusted, nsAtom* aCommand, nsIWidget* aWidget)
          : WidgetCommandEvent(aIsTrusted, nsGkAtoms::onAppCommand, aCommand,
                               aWidget) {}

      /**
       * Constructor to initialize as internal event of dom::CommandEvent.
       */
      WidgetCommandEvent() : WidgetCommandEvent(false, nullptr, nullptr, nullptr) {}

      virtual WidgetEvent* Duplicate() const override {
        MOZ_ASSERT(mClass == eCommandEventClass,
                   "Duplicate() must be overridden by sub class");
        // Not copying widget, it is a weak reference.
        WidgetCommandEvent* result =
            new WidgetCommandEvent(false, mSpecifiedEventType, mCommand, nullptr);
        result->AssignCommandEventData(*this, true);
        result->mFlags = mFlags;
        return result;
      }

      RefPtr mCommand;

      // XXX Not tested by test_assign_event_data.html
      void AssignCommandEventData(const WidgetCommandEvent& aEvent,
                                  bool aCopyTargets) {
        AssignGUIEventData(aEvent, aCopyTargets);

        // mCommand must have been initialized with the constructor.
      }
    };

## Minimal test - lines (19, 22)

path: .spaces[0].spaces[0].metrics.nargs.average
old: 5.0
new: null
path: .spaces[0].spaces[0].metrics.nargs.sum
old: 5.0
new: 0.0
path: .spaces[0].spaces[0].metrics.nexits.sum
old: 1.0
new: 0.0
path: .spaces[0].spaces[0].metrics.nexits.average
old: 1.0
new: null
path: .spaces[0].spaces[0].metrics.cyclomatic.sum
old: 1.0
new: 3.0
path: .spaces[0].spaces[0].metrics.mi.mi_visual_studio
old: 64.73870079798759
new: 78.45287306850658
path: .spaces[0].spaces[0].metrics.mi.mi_sei
old: 84.11189430458703
new: 118.14851385841868
path: .spaces[0].spaces[0].metrics.mi.mi_original
old: 110.70317836455877
new: 134.15441294714626
path: .spaces[0].spaces[0].metrics.halstead.level
old: 0.09090909090909093
new: 1.0
path: .spaces[0].spaces[0].metrics.halstead.length
old: 56.0
new: 6.0
path: .spaces[0].spaces[0].metrics.halstead.volume
old: 242.0279733136923
new: 13.931568569324174
path: .spaces[0].spaces[0].metrics.halstead.vocabulary
old: 20.0
new: 5.0
path: .spaces[0].spaces[0].metrics.halstead.N2
old: 22.0
new: 3.0
path: .spaces[0].spaces[0].metrics.halstead.effort
old: 2662.3077064506156
new: 13.931568569324174
path: .spaces[0].spaces[0].metrics.halstead.N1
old: 34.0
new: 3.0
path: .spaces[0].spaces[0].metrics.halstead.n1
old: 10.0
new: 2.0
path: .spaces[0].spaces[0].metrics.halstead.bugs
old: 0.06403010954184515
new: 0.0019299471801733172
path: .spaces[0].spaces[0].metrics.halstead.time
old: 147.90598369170087
new: 0.7739760316291208
path: .spaces[0].spaces[0].metrics.halstead.purity_ratio
old: 1.1864028910312008
new: 1.1258145836939113
path: .spaces[0].spaces[0].metrics.halstead.estimated_program_length
old: 66.43856189774725
new: 6.754887502163468
path: .spaces[0].spaces[0].metrics.halstead.n2
old: 10.0
new: 3.0
path: .spaces[0].spaces[0].metrics.halstead.difficulty
old: 11.0
new: 1.0
path: .spaces[0].spaces[0].metrics.loc.ploc
old: 7.0
new: 4.0
path: .spaces[0].spaces[0].metrics.loc.sloc
old: 7.0
new: 4.0
path: .spaces[0].spaces[0].metrics.loc.lloc
old: 1.0
new: 0.0
path: .spaces[0].spaces[0].metrics.nom.total
old: 1.0
new: 0.0
path: .spaces[0].spaces[0].metrics.nom.functions
old: 1.0
new: 0.0
path: .spaces[0].spaces[0].metrics.cognitive.average
old: 0.0
new: null

### Code

    namespace dom {
    class PBrowserParent;
    class PBrowserChild;
    }  // namespace dom