Bug 1245649: Turn on no-extra-semi. r=markh
authorDave Townsend <dtownsend@oxymoronical.com>
Wed, 03 Feb 2016 17:27:36 -0800
changeset 329078 cb217f7271c24838782ff4f772af29a7ba9f53e8
parent 329077 06982056b5a5cb566eb836d53283b545a927de29
child 329079 8b6ee0350b2cd5d8b583c3aa7e6844ee070b1c93
push id10463
push userdtownsend@mozilla.com
push dateFri, 05 Feb 2016 03:02:33 +0000
reviewersmarkh
bugs1245649
milestone47.0a1
Bug 1245649: Turn on no-extra-semi. r=markh
browser/base/content/aboutaccounts/aboutaccounts.js
browser/base/content/browser.js
browser/base/content/tabbrowser.xml
browser/components/customizableui/CustomizableUI.jsm
browser/components/customizableui/CustomizableWidgets.jsm
browser/components/customizableui/CustomizeMode.jsm
browser/components/customizableui/test/browser_934951_zoom_in_toolbar.js
browser/components/customizableui/test/browser_989338_saved_placements_not_resaved.js
browser/components/customizableui/test/browser_992747_toggle_noncustomizable_toolbar.js
browser/components/customizableui/test/head.js
browser/components/places/tests/unit/test_browserGlue_urlbar_defaultbehavior_migration.js
browser/components/search/test/browser_426329.js
browser/components/syncedtabs/SyncedTabsDeckComponent.js
browser/components/syncedtabs/SyncedTabsDeckStore.js
browser/components/syncedtabs/SyncedTabsListStore.js
browser/components/syncedtabs/TabListView.js
browser/components/syncedtabs/test/browser/browser_sidebar_syncedtabslist.js
browser/components/uitour/test/browser_UITour_defaultBrowser.js
browser/components/uitour/test/browser_no_tabs.js
browser/experiments/Experiments.jsm
browser/extensions/pocket/bootstrap.js
browser/extensions/pocket/content/main.js
browser/extensions/pocket/content/pktApi.jsm
browser/modules/Social.jsm
browser/modules/test/xpcshell/test_DirectoryLinksProvider.js
browser/modules/webrtcUI.jsm
browser/tools/mozscreenshots/mozscreenshots/extension/Screenshot.jsm
toolkit/.eslintrc
toolkit/components/addoncompat/CompatWarning.jsm
toolkit/components/apppicker/content/appPicker.js
toolkit/components/asyncshutdown/AsyncShutdown.jsm
toolkit/components/asyncshutdown/nsAsyncShutdown.js
toolkit/components/asyncshutdown/tests/xpcshell/test_converters.js
toolkit/components/crashmonitor/nsCrashMonitor.js
toolkit/components/ctypes/tests/unit/test_jsctypes.js
toolkit/components/filewatcher/tests/xpcshell/head.js
toolkit/components/formautofill/test/chrome/loader.js
toolkit/components/formautofill/test/loader_common.js
toolkit/components/microformats/test/static/javascript/chai.js
toolkit/components/microformats/test/static/javascript/mocha.js
toolkit/components/microformats/test/static/javascript/testrunner.js
toolkit/components/microformats/tests/test_Microformats_adr.html
toolkit/components/microformats/tests/test_Microformats_geo.html
toolkit/components/microformats/tests/test_Microformats_hCalendar.html
toolkit/components/microformats/tests/test_Microformats_hCard.html
toolkit/components/places/UnifiedComplete.js
toolkit/components/places/nsPlacesAutoComplete.js
toolkit/components/places/tests/autocomplete/head_autocomplete.js
toolkit/components/places/tests/browser/browser_favicon_privatebrowsing_perwindowpb.js
toolkit/components/places/tests/browser/browser_favicon_setAndFetchFaviconForPage.js
toolkit/components/places/tests/browser/browser_favicon_setAndFetchFaviconForPage_failures.js
toolkit/components/places/tests/browser/browser_visituri_privatebrowsing_perwindowpb.js
toolkit/components/places/tests/browser/head.js
toolkit/components/places/tests/expiration/test_outdated_analyze.js
toolkit/components/places/tests/favicons/test_replaceFaviconData.js
toolkit/components/places/tests/favicons/test_replaceFaviconDataFromDataURL.js
toolkit/components/places/tests/head_common.js
toolkit/components/places/tests/history/test_remove.js
toolkit/components/places/tests/test_bug_461710_perwindowpb.html
toolkit/components/places/tests/unit/test_async_history_api.js
toolkit/components/places/tests/unit/test_download_history.js
toolkit/components/promiseworker/PromiseWorker.jsm
toolkit/components/promiseworker/worker/PromiseWorker.js
toolkit/components/prompts/src/SharedPromptUtils.jsm
toolkit/components/satchel/test/browser/browser_privbrowsing_perwindowpb.js
toolkit/components/satchel/test/unit/test_async_expire.js
toolkit/components/satchel/test/unit/test_notify.js
toolkit/components/search/tests/xpcshell/test_SearchStaticData.js
toolkit/components/social/test/browser/browser_workerAPI.js
toolkit/components/telemetry/TelemetryEnvironment.jsm
toolkit/components/telemetry/TelemetrySession.jsm
toolkit/components/telemetry/TelemetryStorage.jsm
toolkit/components/telemetry/ThirdPartyCookieProbe.jsm
toolkit/components/telemetry/tests/unit/test_TelemetryEnvironment.js
toolkit/components/thumbnails/PageThumbUtils.jsm
toolkit/content/aboutTelemetry.js
toolkit/content/aboutwebrtc/aboutWebrtc.js
toolkit/content/customizeToolbar.js
toolkit/content/widgets/notification.xml
toolkit/content/widgets/resizer.xml
toolkit/crashreporter/test/unit/test_crash_AsyncShutdown.js
toolkit/crashreporter/test/unit/test_crash_terminator.js
toolkit/identity/Sandbox.jsm
toolkit/identity/tests/unit/head_identity.js
toolkit/identity/tests/unit/test_jwcrypto.js
toolkit/modules/Finder.jsm
toolkit/modules/Log.jsm
toolkit/modules/Sntp.jsm
toolkit/modules/Task.jsm
toolkit/modules/tests/browser/browser_Finder.js
toolkit/mozapps/extensions/AddonManager.jsm
toolkit/mozapps/extensions/internal/AddonRepository_SQLiteMigrator.jsm
toolkit/mozapps/extensions/internal/XPIProvider.jsm
toolkit/mozapps/extensions/internal/XPIProviderUtils.js
toolkit/mozapps/extensions/test/browser/browser_searching.js
toolkit/mozapps/extensions/test/xpcshell/test_DeferredSave.js
toolkit/mozapps/extensions/test/xpcshell/test_bug659772.js
toolkit/mozapps/extensions/test/xpcshell/test_gmpProvider.js
toolkit/mozapps/extensions/test/xpcshell/test_no_addons.js
toolkit/mozapps/extensions/test/xpcshell/test_provider_markSafe.js
toolkit/mozapps/extensions/test/xpcshell/test_provider_shutdown.js
toolkit/mozapps/extensions/test/xpcshell/test_provider_unsafe_access_shutdown.js
toolkit/mozapps/extensions/test/xpcshell/test_provider_unsafe_access_startup.js
--- a/browser/base/content/aboutaccounts/aboutaccounts.js
+++ b/browser/base/content/aboutaccounts/aboutaccounts.js
@@ -22,21 +22,21 @@ const ACTION_URL_PARAM = "action";
 
 const OBSERVER_TOPICS = [
   fxAccountsCommon.ONVERIFIED_NOTIFICATION,
   fxAccountsCommon.ONLOGOUT_NOTIFICATION,
 ];
 
 function log(msg) {
   //dump("FXA: " + msg + "\n");
-};
+}
 
 function error(msg) {
   console.log("Firefox Account Error: " + msg + "\n");
-};
+}
 
 function getPreviousAccountNameHash() {
   try {
     return Services.prefs.getComplexValue(PREF_LAST_FXA_USER, Ci.nsISupportsString).data;
   } catch (_) {
     return "";
   }
 }
--- a/browser/base/content/browser.js
+++ b/browser/base/content/browser.js
@@ -3024,17 +3024,17 @@ function populateMirrorTabMenu(popup) {
   let services = CastingApps.getServicesForMirroring();
   services.forEach(service => {
     let item = doc.createElement("menuitem");
     item.setAttribute("label", service.friendlyName);
     item._service = service;
     item.addEventListener("command", mirrorMenuItemClicked);
     popup.appendChild(item);
   });
-};
+}
 
 function getWebNavigation()
 {
   return gBrowser.webNavigation;
 }
 
 function BrowserReloadWithFlags(reloadFlags) {
   let url = gBrowser.currentURI.spec;
@@ -5496,17 +5496,17 @@ function handleDroppedLink(event, url, n
     if (data.url &&
         lastLocationChange == gBrowser.selectedBrowser.lastLocationChange)
       loadURI(data.url, null, data.postData, false);
   });
 
   // Keep the event from being handled by the dragDrop listeners
   // built-in to gecko if they happen to be above us.
   event.preventDefault();
-};
+}
 
 function BrowserSetForcedCharacterSet(aCharset)
 {
   if (aCharset) {
     gBrowser.selectedBrowser.characterSet = aCharset;
     // Save the forced character-set
     if (!PrivateBrowsingUtils.isWindowPrivate(window))
       PlacesUtils.setCharsetForURI(getWebNavigation().currentURI, aCharset);
@@ -7184,24 +7184,24 @@ var gIdentityHandler = {
   }
 };
 
 function getNotificationBox(aWindow) {
   var foundBrowser = gBrowser.getBrowserForDocument(aWindow.document);
   if (foundBrowser)
     return gBrowser.getNotificationBox(foundBrowser)
   return null;
-};
+}
 
 function getTabModalPromptBox(aWindow) {
   var foundBrowser = gBrowser.getBrowserForDocument(aWindow.document);
   if (foundBrowser)
     return gBrowser.getTabModalPromptBox(foundBrowser);
   return null;
-};
+}
 
 /* DEPRECATED */
 function getBrowser() {
   return gBrowser;
 }
 function getNavToolbox() {
   return gNavToolbox;
 }
--- a/browser/base/content/tabbrowser.xml
+++ b/browser/base/content/tabbrowser.xml
@@ -5375,17 +5375,17 @@
           }
 
           // For telemetry, the first frame interval is not useful since it may represent an interval
           // to a relatively old frame (prior to recording start). So we'll ignore it for the average.
           if (frameCount > 1) {
             let averageInterval = 0;
             for (let i = 1; i < frameCount; i++) {
               averageInterval += intervals[i];
-            };
+            }
             averageInterval = averageInterval / (frameCount - 1);
 
             Services.telemetry.getHistogramById("FX_TAB_ANIM_ANY_FRAME_INTERVAL_MS").add(averageInterval);
 
             if (aTab._recordingTabOpenPlain) {
               delete aTab._recordingTabOpenPlain;
               // While we do have a telemetry probe NEWTAB_PAGE_ENABLED to monitor newtab preview, it'll be
               // easier to overview the data without slicing by it. Hence the additional histograms with _PREVIEW.
--- a/browser/components/customizableui/CustomizableUI.jsm
+++ b/browser/components/customizableui/CustomizableUI.jsm
@@ -4157,17 +4157,17 @@ OverflowableToolbar.prototype = {
 
         this._list.insertBefore(child, this._list.firstChild);
         if (!this._toolbar.hasAttribute("overflowing")) {
           CustomizableUI.addListener(this);
         }
         this._toolbar.setAttribute("overflowing", "true");
       }
       child = prevChild;
-    };
+    }
 
     let win = this._target.ownerDocument.defaultView;
     win.UpdateUrlbarSearchSplitterState();
   },
 
   _onResize: function(aEvent) {
     if (!this._lazyResizeHandler) {
       this._lazyResizeHandler = new DeferredTask(this._onLazyResize.bind(this),
--- a/browser/components/customizableui/CustomizableWidgets.jsm
+++ b/browser/components/customizableui/CustomizableWidgets.jsm
@@ -723,17 +723,17 @@ const CustomizableWidgets = [
         // tabbrowser. This breaks the zoom toolkit code (see bug 897410). Don't let that happen:
         let zoomFactor = 100;
         try {
           zoomFactor = Math.round(window.ZoomManager.zoom * 100);
         } catch (e) {}
         zoomResetButton.setAttribute("label", CustomizableUI.getLocalizedProperty(
           buttons[1], "label", [updateDisplay ? zoomFactor : 100]
         ));
-      };
+      }
 
       // Register ourselves with the service so we know when the zoom prefs change.
       Services.obs.addObserver(updateZoomResetButton, "browser-fullZoom:zoomChange", false);
       Services.obs.addObserver(updateZoomResetButton, "browser-fullZoom:zoomReset", false);
       Services.obs.addObserver(updateZoomResetButton, "browser-fullZoom:location-change", false);
 
       if (inPanel) {
         let panel = aDocument.getElementById(kPanelId);
--- a/browser/components/customizableui/CustomizeMode.jsm
+++ b/browser/components/customizableui/CustomizeMode.jsm
@@ -77,17 +77,17 @@ function CustomizeMode(aWindow) {
     let lwthemeButton = this.document.getElementById("customization-lwtheme-button");
     lwthemeButton.setAttribute("hidden", "true");
   }
   if (AppConstants.CAN_DRAW_IN_TITLEBAR) {
     this._updateTitlebarButton();
     Services.prefs.addObserver(kDrawInTitlebarPref, this, false);
   }
   this.window.addEventListener("unload", this);
-};
+}
 
 CustomizeMode.prototype = {
   _changed: false,
   _transitioning: false,
   window: null,
   document: null,
   // areas is used to cache the customizable areas when in customization mode.
   areas: null,
--- a/browser/components/customizableui/test/browser_934951_zoom_in_toolbar.js
+++ b/browser/components/customizableui/test/browser_934951_zoom_in_toolbar.js
@@ -58,17 +58,17 @@ add_task(function*() {
 });
 
 function promiseObserverNotification(aObserver) {
   let deferred = Promise.defer();
   function notificationCallback(e) {
     Services.obs.removeObserver(notificationCallback, aObserver, false);
     clearTimeout(timeoutId);
     deferred.resolve();
-  };
+  }
   let timeoutId = setTimeout(() => {
     Services.obs.removeObserver(notificationCallback, aObserver, false);
     deferred.reject("Notification '" + aObserver + "' did not happen within 20 seconds.");
   }, kTimeoutInMS);
   Services.obs.addObserver(notificationCallback, aObserver, false);
   return deferred.promise;
 }
 
@@ -78,12 +78,12 @@ function promiseTabSelect() {
   let timeoutId = setTimeout(() => {
     container.removeEventListener("TabSelect", callback);
     deferred.reject("TabSelect did not happen within 20 seconds");
   }, kTimeoutInMS);
   function callback(e) {
     container.removeEventListener("TabSelect", callback);
     clearTimeout(timeoutId);
     executeSoon(deferred.resolve);
-  };
+  }
   container.addEventListener("TabSelect", callback);
   return deferred.promise;
 }
--- a/browser/components/customizableui/test/browser_989338_saved_placements_not_resaved.js
+++ b/browser/components/customizableui/test/browser_989338_saved_placements_not_resaved.js
@@ -33,17 +33,17 @@ function test() {
   ok(!backstagePass.gPlacements.has(AREAID), "Placements map shouldn't have been affected");
 
   let savedNavbar = Array.isArray(newSavedState.placements[CustomizableUI.AREA_NAVBAR]);
   ok(savedNavbar, "Should have saved nav-bar contents");
   if (savedNavbar) {
     placementArraysEqual(CustomizableUI.AREA_NAVBAR, newSavedState.placements[CustomizableUI.AREA_NAVBAR],
                          CustomizableUI.getWidgetIdsInArea(CustomizableUI.AREA_NAVBAR));
   }
-};
+}
 
 registerCleanupFunction(function() {
   let backstagePass = Cu.import("resource:///modules/CustomizableUI.jsm", {});
   if (!hadSavedState) {
     backstagePass.gSavedState = null;
   } else {
     let savedPlacements = backstagePass.gSavedState.placements;
     delete savedPlacements[AREAID];
--- a/browser/components/customizableui/test/browser_992747_toggle_noncustomizable_toolbar.js
+++ b/browser/components/customizableui/test/browser_992747_toggle_noncustomizable_toolbar.js
@@ -17,10 +17,10 @@ function test() {
   is(tb.getAttribute("collapsed"), "true", "Toolbar should be collapsed");
   try {
     CustomizableUI.setToolbarVisibility(TOOLBARID, true);
   } catch (ex) {
     ok(false, "Should not throw exceptions trying to set toolbar visibility.");
   }
   is(tb.getAttribute("collapsed"), "false", "Toolbar should be uncollapsed");
   tb.remove();
-};
+}
 
--- a/browser/components/customizableui/test/head.js
+++ b/browser/components/customizableui/test/head.js
@@ -284,17 +284,17 @@ function promisePanelElementShown(win, a
   let deferred = Promise.defer();
   let timeoutId = win.setTimeout(() => {
     deferred.reject("Panel did not show within 20 seconds.");
   }, 20000);
   function onPanelOpen(e) {
     aPanel.removeEventListener("popupshown", onPanelOpen);
     win.clearTimeout(timeoutId);
     deferred.resolve();
-  };
+  }
   aPanel.addEventListener("popupshown", onPanelOpen);
   return deferred.promise;
 }
 
 function promisePanelHidden(win) {
   let panelEl = win.PanelUI.panel;
   return promisePanelElementHidden(win, panelEl);
 }
@@ -327,32 +327,32 @@ function subviewShown(aSubview) {
   let win = aSubview.ownerDocument.defaultView;
   let timeoutId = win.setTimeout(() => {
     deferred.reject("Subview (" + aSubview.id + ") did not show within 20 seconds.");
   }, 20000);
   function onViewShowing(e) {
     aSubview.removeEventListener("ViewShowing", onViewShowing);
     win.clearTimeout(timeoutId);
     deferred.resolve();
-  };
+  }
   aSubview.addEventListener("ViewShowing", onViewShowing);
   return deferred.promise;
 }
 
 function subviewHidden(aSubview) {
   let deferred = Promise.defer();
   let win = aSubview.ownerDocument.defaultView;
   let timeoutId = win.setTimeout(() => {
     deferred.reject("Subview (" + aSubview.id + ") did not hide within 20 seconds.");
   }, 20000);
   function onViewHiding(e) {
     aSubview.removeEventListener("ViewHiding", onViewHiding);
     win.clearTimeout(timeoutId);
     deferred.resolve();
-  };
+  }
   aSubview.addEventListener("ViewHiding", onViewHiding);
   return deferred.promise;
 }
 
 function waitForCondition(aConditionFn, aMaxTries=50, aCheckInterval=100) {
   function tryNow() {
     tries++;
     if (aConditionFn()) {
@@ -500,17 +500,17 @@ function popupHidden(aPopup) {
 function promisePopupEvent(aPopup, aEventSuffix) {
   let deferred = Promise.defer();
   let win = aPopup.ownerDocument.defaultView;
   let eventType = "popup" + aEventSuffix;
 
   function onPopupEvent(e) {
     aPopup.removeEventListener(eventType, onPopupEvent);
     deferred.resolve();
-  };
+  }
 
   aPopup.addEventListener(eventType, onPopupEvent);
   return deferred.promise;
 }
 
 // This is a simpler version of the context menu check that
 // exists in contextmenu_common.js.
 function checkContextMenu(aContextMenu, aExpectedEntries, aWindow=window) {
--- a/browser/components/places/tests/unit/test_browserGlue_urlbar_defaultbehavior_migration.js
+++ b/browser/components/places/tests/unit/test_browserGlue_urlbar_defaultbehavior_migration.js
@@ -9,38 +9,38 @@ const DEFAULT_BEHAVIOR_PREF = "browser.u
 const AUTOCOMPLETE_PREF = "browser.urlbar.autocomplete.enabled";
 
 var gBrowserGlue = Cc["@mozilla.org/browser/browserglue;1"]
                      .getService(Ci.nsIObserver);
 var gGetBoolPref = Services.prefs.getBoolPref;
 
 function run_test() {
   run_next_test();
-};
+}
 
 do_register_cleanup(cleanup);
 
 function cleanup() {
   let prefix = "browser.urlbar.suggest.";
   for (let type of ["history", "bookmark", "openpage", "history.onlyTyped"]) {
     Services.prefs.clearUserPref(prefix + type);
   }
   Services.prefs.clearUserPref("browser.migration.version");
   Services.prefs.clearUserPref(AUTOCOMPLETE_PREF);
-};
+}
 
 function setupBehaviorAndMigrate(aDefaultBehavior, aAutocompleteEnabled = true) {
   cleanup();
   // Migrate browser.urlbar.default.behavior preference.
   Services.prefs.setIntPref("browser.migration.version", UI_VERSION - 1);
   Services.prefs.setIntPref(DEFAULT_BEHAVIOR_PREF, aDefaultBehavior);
   Services.prefs.setBoolPref(AUTOCOMPLETE_PREF, aAutocompleteEnabled);
   // Simulate a migration.
   gBrowserGlue.observe(null, TOPIC_BROWSERGLUE_TEST, TOPICDATA_BROWSERGLUE_TEST);
-};
+}
 
 add_task(function*() {
   do_print("Migrate default.behavior = 0");
   setupBehaviorAndMigrate(0);
 
   Assert.ok(gGetBoolPref("browser.urlbar.suggest.history"),
     "History preference should be true.");
   Assert.ok(gGetBoolPref("browser.urlbar.suggest.bookmark"),
--- a/browser/components/search/test/browser_426329.js
+++ b/browser/components/search/test/browser_426329.js
@@ -81,34 +81,34 @@ function promiseSetEngine() {
                              "anonid", "search-go-button");
           ok(searchButton, "got search-go-button");
           searchBar.value = "test";
 
           Services.obs.removeObserver(observer, "browser-search-engine-modified");
           resolve();
           break;
       }
-    };
+    }
 
     Services.obs.addObserver(observer, "browser-search-engine-modified", false);
     ss.addEngine("http://mochi.test:8888/browser/browser/components/search/test/426329.xml",
                  null, "data:image/x-icon,%00", false);
   });
 }
 
 function promiseRemoveEngine() {
   return new Promise(resolve => {
     var ss = Services.search;
 
     function observer(aSub, aTopic, aData) {
       if (aData == "engine-removed") {
         Services.obs.removeObserver(observer, "browser-search-engine-modified");
         resolve();
       }
-    };
+    }
 
     Services.obs.addObserver(observer, "browser-search-engine-modified", false);
     var engine = ss.getEngineByName("Bug 426329");
     ss.removeEngine(engine);
   });
 }
 
 
--- a/browser/components/syncedtabs/SyncedTabsDeckComponent.js
+++ b/browser/components/syncedtabs/SyncedTabsDeckComponent.js
@@ -46,17 +46,17 @@ function SyncedTabsDeckComponent({
   this._deckStore = deckStore || new SyncedTabsDeckStore();
   this._syncedTabsListStore = listStore || new SyncedTabsListStore(SyncedTabs);
   this.tabListComponent = listComponent || new TabListComponent({
     window: this._window,
     store: this._syncedTabsListStore,
     View: TabListView,
     SyncedTabs: SyncedTabs
   });
-};
+}
 
 SyncedTabsDeckComponent.prototype = {
   PANELS: {
     TABS_CONTAINER: "tabs-container",
     TABS_FETCHING: "tabs-fetching",
     NOT_AUTHED_INFO: "notAuthedInfo",
     SINGLE_DEVICE_INFO: "singleDeviceInfo",
     TABS_DISABLED: "tabs-disabled",
--- a/browser/components/syncedtabs/SyncedTabsDeckStore.js
+++ b/browser/components/syncedtabs/SyncedTabsDeckStore.js
@@ -19,17 +19,17 @@ this.EXPORTED_SYMBOLS = [
  * one is selected. The view listens for change events on the store, which are
  * triggered whenever the state changes. If it's a small change, the state
  * will have `isUpdatable` set to true so the view can skip rerendering the whole
  * DOM.
  */
 function SyncedTabsDeckStore() {
   EventEmitter.call(this);
   this._panels = [];
-};
+}
 
 Object.assign(SyncedTabsDeckStore.prototype, EventEmitter.prototype, {
   _change(isUpdatable = false) {
     let panels = this._panels.map(panel => {
       return {id: panel, selected: panel === this._selectedPanel};
     });
     this.emit("change", {panels, isUpdatable: isUpdatable});
   },
--- a/browser/components/syncedtabs/SyncedTabsListStore.js
+++ b/browser/components/syncedtabs/SyncedTabsListStore.js
@@ -22,17 +22,17 @@ this.EXPORTED_SYMBOLS = [
 function SyncedTabsListStore(SyncedTabs) {
   EventEmitter.call(this);
   this._SyncedTabs = SyncedTabs;
   this.data = [];
   this._closedClients = {};
   this._selectedRow = [-1, -1];
   this.filter = "";
   this.inputFocused = false;
-};
+}
 
 Object.assign(SyncedTabsListStore.prototype, EventEmitter.prototype, {
   // This internal method triggers the "change" event that views
   // listen for. It denormalizes the state so that it's easier for
   // the view to deal with. updateType hints to the view what
   // actually needs to be rerendered or just updated, and can be
   // empty (to (re)render everything), "searchbox" (to rerender just the tab list),
   // or "all" (to skip rendering and just update all attributes of existing nodes).
--- a/browser/components/syncedtabs/TabListView.js
+++ b/browser/components/syncedtabs/TabListView.js
@@ -38,17 +38,17 @@ function TabListView(window, props) {
   this._tabsContainerTemplate = this._doc.getElementById("tabs-container-template");
   this._clientTemplate = this._doc.getElementById("client-template");
   this._emptyClientTemplate = this._doc.getElementById("empty-client-template");
   this._tabTemplate = this._doc.getElementById("tab-template");
 
   this.container = this._doc.createElement("div");
 
   this._setupContextMenu();
-};
+}
 
 TabListView.prototype = {
   render(state) {
     // Don't rerender anything; just update attributes, e.g. selection
     if (state.canUpdateAll) {
       this._update(state);
       return;
     }
--- a/browser/components/syncedtabs/test/browser/browser_sidebar_syncedtabslist.js
+++ b/browser/components/syncedtabs/test/browser/browser_sidebar_syncedtabslist.js
@@ -253,10 +253,10 @@ function checkItem(node, item) {
     // client items
     Assert.equal(node.querySelector(".item-title").textContent, item.name,
       "Node's title element's text should match client name");
     Assert.ok(node.classList.contains("client"),
       "Node should have .client class");
     Assert.equal(node.dataset.id, item.id,
       "Node's ID should match item ID");
   }
-};
+}
 
--- a/browser/components/uitour/test/browser_UITour_defaultBrowser.js
+++ b/browser/components/uitour/test/browser_UITour_defaultBrowser.js
@@ -4,17 +4,17 @@ var gTestTab;
 var gContentAPI;
 var gContentWindow;
 var setDefaultBrowserCalled = false;
 
 Cc["@mozilla.org/moz/jssubscript-loader;1"]
   .getService(Ci.mozIJSSubScriptLoader)
   .loadSubScript("chrome://mochikit/content/tests/SimpleTest/MockObjects.js", this);
 
-function MockShellService() {};
+function MockShellService() {}
 MockShellService.prototype = {
   QueryInterface: XPCOMUtils.generateQI([Ci.nsIShellService]),
   isDefaultBrowser: function(aStartupCheck, aForAllTypes) { return false; },
   setDefaultBrowser: function(aClaimAllTypes, aForAllUsers) {
     setDefaultBrowserCalled = true;
   },
   shouldCheckDefaultBrowser: false,
   canSetDesktopBackground: false,
--- a/browser/components/uitour/test/browser_no_tabs.js
+++ b/browser/components/uitour/test/browser_no_tabs.js
@@ -39,17 +39,17 @@ function createHiddenBrowser(aURL) {
  *        The browser to dismiss.
  */
 function destroyHiddenBrowser(aFrame, aBrowser) {
   // Dispose of the hidden browser.
   aBrowser.remove();
 
   // Take care of the frame holding our invisible browser.
   aFrame.destroy();
-};
+}
 
 /**
  * Test that UITour works when called when no tabs are available (e.g., when using windowless
  * browsers).
  */
 add_task(function* test_windowless_UITour(){
   // Get the URL for the test page.
   let pageURL = getRootDirectory(gTestPath) + "uitour.html";
--- a/browser/experiments/Experiments.jsm
+++ b/browser/experiments/Experiments.jsm
@@ -1515,17 +1515,17 @@ Experiments.ExperimentEntry.prototype = 
       }
     }
 
     for (let key of this.SERIALIZE_KEYS) {
       if (!(key in data) && !this.DATE_KEYS.has(key)) {
         this._log.error("initFromCacheData() - missing required key " + key);
         return false;
       }
-    };
+    }
 
     if (!this._isManifestDataValid(data._manifestData)) {
       return false;
     }
 
     // Dates are restored separately from epoch ms, everything else is just
     // copied in.
 
--- a/browser/extensions/pocket/bootstrap.js
+++ b/browser/extensions/pocket/bootstrap.js
@@ -199,17 +199,17 @@ function CreatePocketWidget(reason) {
                   createInstance(Ci.nsISupportsString);
         str.data = JSON.stringify(provider.manifest);
         Services.prefs.setComplexValue(pref, Ci.nsISupportsString, str);
         SocialService.uninstallProvider(origin, () => {});
       }
     }
   });
 
-};
+}
 
 // PocketContextMenu
 // When the context menu is opened check if we need to build and enable pocket UI.
 var PocketContextMenu = {
   init: function() {
     Services.obs.addObserver(this, "on-build-contextmenu", false);
   },
   shutdown: function() {
@@ -221,17 +221,17 @@ var PocketContextMenu = {
       for (let id in ["context-pocket", "context-savelinktopocket"]) {
         let element = document.getElementById(id);
         if (element)
           element.remove();
       }
     }
   },
   observe: function(aSubject, aTopic, aData) {
-    let subject = aSubject.wrappedJSObject;;
+    let subject = aSubject.wrappedJSObject;
     let document = subject.menu.ownerDocument;
     let window = document.defaultView;
     let pocketEnabled = CustomizableUI.getPlacementOfWidget("pocket-button");
 
     let showSaveCurrentPageToPocket = !(subject.onTextInput || subject.onLink ||
                                         subject.isContentSelected || subject.onImage ||
                                         subject.onCanvas || subject.onVideo || subject.onAudio);
     let targetUrl = subject.onLink ? subject.linkUrl : subject.pageUrl;
--- a/browser/extensions/pocket/content/main.js
+++ b/browser/extensions/pocket/content/main.js
@@ -626,17 +626,17 @@ var pktUIMessaging = (function() {
     }
 
 
     /**
      * Send a message to the panel's iframe
      */
     function sendMessageToPanel(panelId, messageId, payload) {
 
-        if (!isPanelIdValid(panelId)) { return; };
+        if (!isPanelIdValid(panelId)) { return; }
 
         var panelFrame = pktUI.getPanelFrame();
         if (!isPocketPanelFrameValid(panelFrame)) { return; }
 
         var doc = panelFrame.contentWindow.document;
         var documentElement = doc.documentElement;
 
         // Send message to panel
--- a/browser/extensions/pocket/content/pktApi.jsm
+++ b/browser/extensions/pocket/content/pktApi.jsm
@@ -339,17 +339,17 @@ var pktApi = (function() {
             access_token: accessToken,
             url: url,
             since: since ? since : 0
         };
 
         var title = options.title;
         if (title !== "undefined") {
             sendData.title = title;
-        };
+        }
 
         return apiRequest({
             path: "/firefox/save",
             data: sendData,
             success: function(data) {
 
                 // Update premium status, tags and since
                 var tags = data.tags;
--- a/browser/modules/Social.jsm
+++ b/browser/modules/Social.jsm
@@ -276,17 +276,17 @@ function CreateSocialStatusWidget(aId, a
       node.setAttribute("constrain-size", "true");
 
       if (PrivateBrowsingUtils.isWindowPrivate(aDocument.defaultView))
         node.setAttribute("disabled", "true");
 
       return node;
     }
   });
-};
+}
 
 function CreateSocialMarkWidget(aId, aProvider) {
   if (!aProvider.markURL)
     return;
   let widget = CustomizableUI.getWidget(aId);
   // The widget is only null if we've created then destroyed the widget.
   // Once we've actually called createWidget the provider will be set to
   // PROVIDER_API.
@@ -311,17 +311,17 @@ function CreateSocialMarkWidget(aId, aPr
       let menuLabel = window.gNavigatorBundle.getFormattedString("social.markpageMenu.label", [aProvider.name]);
       node.setAttribute("label", menuLabel);
       node.setAttribute("tooltiptext", menuLabel);
       node.setAttribute("observes", "Social:PageShareOrMark");
 
       return node;
     }
   });
-};
+}
 
 
 function sizeSocialPanelToContent(panel, iframe, requestedSize) {
   let doc = iframe.contentDocument;
   if (!doc || !doc.body) {
     return;
   }
   // We need an element to use for sizing our panel.  See if the body defines
--- a/browser/modules/test/xpcshell/test_DirectoryLinksProvider.js
+++ b/browser/modules/test/xpcshell/test_DirectoryLinksProvider.js
@@ -1542,17 +1542,17 @@ add_task(function* test_DirectoryLinksPr
     this.promise = new Promise(resolve => {
       this.onDeleteURI = (directoryLinksProvider, link) => {
         resolve();
       };
       this.onClearHistory = (directoryLinksProvider) => {
         resolve();
       };
     });
-  };
+  }
 
   let testObserver = new UrlDeletionTester();
   DirectoryLinksProvider.addObserver(testObserver);
 
   PlacesUtils.bhistory.removePage(NetUtil.newURI(landingUrl));
   yield testObserver.promise;
   DirectoryLinksProvider.removeObserver(testObserver);
   // views must be 2 and click should not exist
@@ -1660,17 +1660,17 @@ add_task(function* test_inadjecentSites(
     let badSiteB64 = [];
     sites.forEach(site => {
       badSiteB64.push(DirectoryLinksProvider._generateHash(site));
     });
     let theList = {"domains": badSiteB64};
     let dataURI = 'data:application/json,' + JSON.stringify(theList);
     DirectoryLinksProvider._inadjacentSitesUrl = dataURI;
     return DirectoryLinksProvider._loadInadjacentSites();
-  };
+  }
 
   // setup gLinks loader
   let gLinks = NewTabUtils.links;
   gLinks.addProvider(DirectoryLinksProvider);
 
   function updateNewTabCache() {
     gLinks.populateCache();
     return new Promise(resolve => {
--- a/browser/modules/webrtcUI.jsm
+++ b/browser/modules/webrtcUI.jsm
@@ -115,17 +115,17 @@ this.webrtcUI = {
       return {uri: state.documentURI, tab: tab, browser: browser, types: types};
     });
   },
 
   swapBrowserForNotification: function(aOldBrowser, aNewBrowser) {
     for (let stream of this._streams) {
       if (stream.browser == aOldBrowser)
         stream.browser = aNewBrowser;
-    };
+    }
   },
 
   showSharingDoorhanger: function(aActiveStream, aType) {
     let browserWindow = aActiveStream.browser.ownerDocument.defaultView;
     if (aActiveStream.tab) {
       browserWindow.gBrowser.selectedTab = aActiveStream.tab;
     } else {
       aActiveStream.browser.focus();
@@ -246,17 +246,17 @@ function denyRequest(aBrowser, aRequest)
 
 function getHost(uri, href) {
   let host;
   try {
     if (!uri) {
       uri = Services.io.newURI(href, null, null);
     }
     host = uri.host;
-  } catch (ex) {};
+  } catch (ex) {}
   if (!host) {
     if (uri && uri.scheme.toLowerCase() == "about") {
       // Special case-ing Loop/ Hello gUM requests.
       if (uri.specIgnoringRef == "about:loopconversation") {
         const kBundleURI = "chrome://browser/locale/loop/loop.properties";
         let bundle = Services.strings.createBundle(kBundleURI);
         host = bundle.GetStringFromName("clientShortname2");
       } else {
--- a/browser/tools/mozscreenshots/mozscreenshots/extension/Screenshot.jsm
+++ b/browser/tools/mozscreenshots/mozscreenshots/extension/Screenshot.jsm
@@ -168,13 +168,13 @@ let Screenshot = {
               setTimeout(resolve, 1000);
             } catch (ex) {
               reject(ex);
             }
             break;
           default:
             reject(topic);
             break;
-        };
+        }
       },
     };
   },
 };
--- a/toolkit/.eslintrc
+++ b/toolkit/.eslintrc
@@ -78,17 +78,17 @@
 
     // No assiging to exception variable
     // "no-ex-assign": 2,
 
     // No using !! where casting to boolean is already happening
     // "no-extra-boolean-cast": 2,
 
     // No double semicolon
-    // "no-extra-semi": 2,
+    "no-extra-semi": 2,
 
     // No overwriting defined functions
     // "no-func-assign": 2,
 
     // No invalid regular expresions
     // "no-invalid-regexp": 2,
 
     // No odd whitespace characters
--- a/toolkit/components/addoncompat/CompatWarning.jsm
+++ b/toolkit/components/addoncompat/CompatWarning.jsm
@@ -28,17 +28,17 @@ var CompatWarning = {
   // fires. However, we want the warning to show a stack for the
   // registration site.
   delayedWarning: function(msg, addon, warning) {
     function isShimLayer(filename) {
       return filename.indexOf("CompatWarning.jsm") != -1 ||
         filename.indexOf("RemoteAddonsParent.jsm") != -1 ||
         filename.indexOf("RemoteAddonsChild.jsm") != -1 ||
         filename.indexOf("multiprocessShims.js") != -1;
-    };
+    }
 
     let stack = Components.stack;
     while (stack && isShimLayer(stack.filename))
       stack = stack.caller;
 
     let alreadyWarned = false;
 
     return function() {
--- a/toolkit/components/apppicker/content/appPicker.js
+++ b/toolkit/components/apppicker/content/appPicker.js
@@ -1,15 +1,15 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 Components.utils.import("resource://gre/modules/AppConstants.jsm");
 
-function AppPicker() {};
+function AppPicker() {}
 
 AppPicker.prototype =
 {
     // Class members
     _incomingParams:null,
 
     /**
     * Init the dialog and populate the application list
--- a/toolkit/components/asyncshutdown/AsyncShutdown.jsm
+++ b/toolkit/components/asyncshutdown/AsyncShutdown.jsm
@@ -461,17 +461,17 @@ function getPhase(topic) {
       if (accepted) {
         return () => spinner.observe();
       }
       return undefined;
     }
   });
   gPhases.set(topic, phase);
   return phase;
-};
+}
 
 /**
  * Utility class used to spin the event loop until all blockers for a
  * Phase are satisfied.
  *
  * @param {string} topic The xpcom notification for that phase.
  */
 function Spinner(topic) {
--- a/toolkit/components/asyncshutdown/nsAsyncShutdown.js
+++ b/toolkit/components/asyncshutdown/nsAsyncShutdown.js
@@ -197,17 +197,17 @@ nsAsyncShutdownClient.prototype = {
  * @param {object} moduleBarrier an instance if
  * `AsyncShutdown.Barrier`. This instance will serve as back-end for
  * all methods.
  * @constructor
  */
 function nsAsyncShutdownBarrier(moduleBarrier) {
   this._client = new nsAsyncShutdownClient(moduleBarrier.client);
   this._moduleBarrier = moduleBarrier;
-};
+}
 nsAsyncShutdownBarrier.prototype = {
   get state() {
     return PropertyBagConverter.fromValue(this._moduleBarrier.state);
   },
   get client() {
     return this._client;
   },
   wait: function(onReady) {
--- a/toolkit/components/asyncshutdown/tests/xpcshell/test_converters.js
+++ b/toolkit/components/asyncshutdown/tests/xpcshell/test_converters.js
@@ -19,17 +19,17 @@ function normalize(obj) {
   if (Array.isArray(obj)) {
     return obj.map(normalize);
   }
   let result = {};
   for (let k of Object.keys(obj).sort()) {
     result[k] = normalize(obj[k]);
   }
   return result;
-};
+}
 
 function test_conversions() {
   const SAMPLES = [
     // Simple values
     1,
     true,
     "string",
     null,
--- a/toolkit/components/crashmonitor/nsCrashMonitor.js
+++ b/toolkit/components/crashmonitor/nsCrashMonitor.js
@@ -4,17 +4,17 @@
 
 Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
 Components.utils.import("resource://gre/modules/Services.jsm");
 
 var Scope = {}
 Components.utils.import("resource://gre/modules/CrashMonitor.jsm", Scope);
 var MonitorAPI = Scope.CrashMonitor;
 
-function CrashMonitor() {};
+function CrashMonitor() {}
 
 CrashMonitor.prototype = {
 
   classID: Components.ID("{d9d75e86-8f17-4c57-993e-f738f0d86d42}"),
   contractID: "@mozilla.org/toolkit/crashmonitor;1",
 
   QueryInterface: XPCOMUtils.generateQI([Components.interfaces.nsIObserver]),
 
--- a/toolkit/components/ctypes/tests/unit/test_jsctypes.js
+++ b/toolkit/components/ctypes/tests/unit/test_jsctypes.js
@@ -2625,17 +2625,17 @@ function run_single_closure_tests(librar
   var fn_64_t = ctypes.FunctionType(ctypes.default_abi, ctypes.uint64_t, [ctypes.bool]).ptr;
   var bignum1 = ctypes.UInt64.join(0xDEADBEEF, 0xBADF00D);
   var bignum2 = ctypes.UInt64.join(0xDEFEC8ED, 0xD15EA5E);
   function closure_fn_64(fail)
   {
     if (fail)
       throw "Just following orders, sir!";
     return bignum1;
-  };
+  }
   var closure64 = fn_64_t(closure_fn_64, null, bignum2);
   do_check_eq(ctypes.UInt64.compare(closure64(false), bignum1), 0);
   do_check_eq(ctypes.UInt64.compare(closure64(true), bignum2), 0);
 
   // Test a callback that returns void (see bug 682504).
   var fn_v_t = ctypes.FunctionType(ctypes.default_abi, ctypes.void_t, []).ptr;
   fn_v_t(function() {})(); // Don't crash
 
--- a/toolkit/components/filewatcher/tests/xpcshell/head.js
+++ b/toolkit/components/filewatcher/tests/xpcshell/head.js
@@ -9,17 +9,17 @@ var {classes: Cc, interfaces: Ci, result
 Cu.import("resource://gre/modules/osfile.jsm", this);
 Cu.import("resource://gre/modules/Promise.jsm", this);
 
 function makeWatcher() {
   let watcher =
     Cc['@mozilla.org/toolkit/filewatcher/native-file-watcher;1']
       .getService(Ci.nsINativeFileWatcherService);
   return watcher;
-};
+}
 
 function promiseAddPath(watcher, resource, onChange=null, onError=null) {
   return new Promise(resolve =>
     watcher.addPath(resource, onChange, onError, resolve)
   );
 }
 
 function promiseRemovePath(watcher, resource, onChange=null, onError=null) {
--- a/toolkit/components/formautofill/test/chrome/loader.js
+++ b/toolkit/components/formautofill/test/chrome/loader.js
@@ -56,22 +56,22 @@ var gTestTasks = [];
 
 // Define task registration functions, see description in "loader_common.js".
 function add_task(taskFn) {
   gTestTasks.push([taskFn, "content", taskFn.name]);
 }
 function add_task_in_parent_process(taskFn, taskIdOverride) {
   let taskId = taskIdOverride || getTaskId(Components.stack.caller);
   gTestTasks.push([taskFn, "parent", taskId]);
-};
+}
 function add_task_in_both_processes(taskFn) {
   // We need to define a task ID based on our direct caller.
   add_task_in_parent_process(taskFn, getTaskId(Components.stack.caller));
   add_task(taskFn);
-};
+}
 var add_task_in_child_process = add_task;
 
 window.addEventListener("load", function onLoad() {
   window.removeEventListener("load", onLoad);
 
   Task.spawn(function* () {
     try {
       for (let [taskFn, taskType, taskId] of gTestTasks) {
--- a/toolkit/components/formautofill/test/loader_common.js
+++ b/toolkit/components/formautofill/test/loader_common.js
@@ -83,17 +83,17 @@ function* terminationTaskFn() {
   for (let taskFn of gTerminationTasks) {
     try {
       yield Task.spawn(taskFn);
     } catch (ex) {
       Output.print(ex);
       Assert.ok(false);
     }
   }
-};
+}
 
 function add_termination_task(taskFn) {
   gTerminationTasks.push(taskFn);
 }
 
 /**
  * Returns a unique identifier used for synchronizing the given test task
  * between the parent and child processes.
--- a/toolkit/components/microformats/test/static/javascript/chai.js
+++ b/toolkit/components/microformats/test/static/javascript/chai.js
@@ -1031,17 +1031,17 @@ module.exports = function (chai, _) {
   function assertInstanceOf (constructor, msg) {
     if (msg) flag(this, 'message', msg);
     var name = _.getName(constructor);
     this.assert(
         flag(this, 'object') instanceof constructor
       , 'expected #{this} to be an instance of ' + name
       , 'expected #{this} to not be an instance of ' + name
     );
-  };
+  }
 
   Assertion.addMethod('instanceof', assertInstanceOf);
   Assertion.addMethod('instanceOf', assertInstanceOf);
 
   /**
    * ### .property(name, [value])
    *
    * Asserts that the target has a property `name`, optionally asserting that
@@ -1608,17 +1608,17 @@ module.exports = function (chai, _) {
         thrown === true
       , 'expected #{this} to throw ' + expectedThrown + actuallyGot
       , 'expected #{this} to not throw ' + expectedThrown + actuallyGot
       , (desiredError instanceof Error ? desiredError.toString() : desiredError)
       , (thrownError instanceof Error ? thrownError.toString() : thrownError)
     );
 
     flag(this, 'object', thrownError);
-  };
+  }
 
   Assertion.addMethod('throw', assertThrows);
   Assertion.addMethod('throws', assertThrows);
   Assertion.addMethod('Throw', assertThrows);
 
   /**
    * ### .respondTo(method)
    *
@@ -3308,17 +3308,17 @@ module.exports = function (chai, util) {
     should.not.exist = function (val, msg) {
       new Assertion(val, msg).to.not.exist;
     }
 
     should['throw'] = should['Throw'];
     should.not['throw'] = should.not['Throw'];
 
     return should;
-  };
+  }
 
   chai.should = loadShould;
   chai.Should = loadShould;
 };
 
 },{}],8:[function(require,module,exports){
 /*!
  * Chai - addChainingMethod utility
@@ -4715,17 +4715,17 @@ function exclude () {
       , res = {};
 
     for (; i < args.length; i++) {
       excludeProps(res, args[i]);
     }
 
     return res;
   };
-};
+}
 
 /*!
  * Primary Exports
  */
 
 module.exports = AssertionError;
 
 /**
--- a/toolkit/components/microformats/test/static/javascript/mocha.js
+++ b/toolkit/components/microformats/test/static/javascript/mocha.js
@@ -1,9 +1,9 @@
-;(function(){
+(function(){
 
 // CommonJS require()
 
 function require(p){
     var path = require.resolve(p)
       , mod = require.modules[path];
     if (!mod) throw new Error('failed to require "' + p + '"');
     if (!mod.exports) {
@@ -459,17 +459,17 @@ function isArray(obj) {
 }
 
 /**
  * Event emitter constructor.
  *
  * @api public
  */
 
-function EventEmitter(){};
+function EventEmitter(){}
 
 /**
  * Adds a listener.
  *
  * @api public
  */
 
 EventEmitter.prototype.on = function (name, fn) {
@@ -497,17 +497,17 @@ EventEmitter.prototype.addListener = Eve
  */
 
 EventEmitter.prototype.once = function (name, fn) {
   var self = this;
 
   function on () {
     self.removeListener(name, on);
     fn.apply(this, arguments);
-  };
+  }
 
   on.listener = fn;
   this.on(name, on);
 
   return this;
 };
 
 /**
@@ -905,17 +905,17 @@ function Hook(title, fn) {
   Runnable.call(this, title, fn);
   this.type = 'hook';
 }
 
 /**
  * Inherit from `Runnable.prototype`.
  */
 
-function F(){};
+function F(){}
 F.prototype = Runnable.prototype;
 Hook.prototype = new F;
 Hook.prototype.constructor = Hook;
 
 
 /**
  * Get or set the test `err`.
  *
@@ -2577,17 +2577,17 @@ function Dot(runner) {
     self.epilogue();
   });
 }
 
 /**
  * Inherit from `Base.prototype`.
  */
 
-function F(){};
+function F(){}
 F.prototype = Base.prototype;
 Dot.prototype = new F;
 Dot.prototype.constructor = Dot;
 
 
 }); // module: reporters/dot.js
 
 require.register("reporters/html-cov.js", function(module, exports, require){
@@ -3365,17 +3365,17 @@ function Landing(runner) {
     self.epilogue();
   });
 }
 
 /**
  * Inherit from `Base.prototype`.
  */
 
-function F(){};
+function F(){}
 F.prototype = Base.prototype;
 Landing.prototype = new F;
 Landing.prototype.constructor = Landing;
 
 
 }); // module: reporters/landing.js
 
 require.register("reporters/list.js", function(module, exports, require){
@@ -3436,17 +3436,17 @@ function List(runner) {
 
   runner.on('end', self.epilogue.bind(self));
 }
 
 /**
  * Inherit from `Base.prototype`.
  */
 
-function F(){};
+function F(){}
 F.prototype = Base.prototype;
 List.prototype = new F;
 List.prototype.constructor = List;
 
 
 }); // module: reporters/list.js
 
 require.register("reporters/markdown.js", function(module, exports, require){
@@ -3585,17 +3585,17 @@ function Min(runner) {
 
   runner.on('end', this.epilogue.bind(this));
 }
 
 /**
  * Inherit from `Base.prototype`.
  */
 
-function F(){};
+function F(){}
 F.prototype = Base.prototype;
 Min.prototype = new F;
 Min.prototype.constructor = Min;
 
 
 }); // module: reporters/min.js
 
 require.register("reporters/nyan.js", function(module, exports, require){
@@ -3853,17 +3853,17 @@ NyanCat.prototype.rainbowify = function(
 function write(string) {
   process.stdout.write(string);
 }
 
 /**
  * Inherit from `Base.prototype`.
  */
 
-function F(){};
+function F(){}
 F.prototype = Base.prototype;
 NyanCat.prototype = new F;
 NyanCat.prototype.constructor = NyanCat;
 
 
 }); // module: reporters/nyan.js
 
 require.register("reporters/progress.js", function(module, exports, require){
@@ -3953,17 +3953,17 @@ function Progress(runner, options) {
     self.epilogue();
   });
 }
 
 /**
  * Inherit from `Base.prototype`.
  */
 
-function F(){};
+function F(){}
 F.prototype = Base.prototype;
 Progress.prototype = new F;
 Progress.prototype.constructor = Progress;
 
 
 }); // module: reporters/progress.js
 
 require.register("reporters/spec.js", function(module, exports, require){
@@ -4043,17 +4043,17 @@ function Spec(runner) {
 
   runner.on('end', self.epilogue.bind(self));
 }
 
 /**
  * Inherit from `Base.prototype`.
  */
 
-function F(){};
+function F(){}
 F.prototype = Base.prototype;
 Spec.prototype = new F;
 Spec.prototype.constructor = Spec;
 
 
 }); // module: reporters/spec.js
 
 require.register("reporters/tap.js", function(module, exports, require){
@@ -4218,17 +4218,17 @@ XUnit.prototype.done = function(failures
         fn(failures);
     }
 };
 
 /**
  * Inherit from `Base.prototype`.
  */
 
-function F(){};
+function F(){}
 F.prototype = Base.prototype;
 XUnit.prototype = new F;
 XUnit.prototype.constructor = XUnit;
 
 
 /**
  * Write out the given line
  */
@@ -4341,17 +4341,17 @@ function Runnable(title, fn) {
   this.timedOut = false;
   this._trace = new Error('done() called multiple times')
 }
 
 /**
  * Inherit from `EventEmitter.prototype`.
  */
 
-function F(){};
+function F(){}
 F.prototype = EventEmitter.prototype;
 Runnable.prototype = new F;
 Runnable.prototype.constructor = Runnable;
 
 
 /**
  * Set & get timeout `ms`.
  *
@@ -4659,17 +4659,17 @@ function Runner(suite, delay) {
  */
 
 Runner.immediately = global.setImmediate || process.nextTick;
 
 /**
  * Inherit from `EventEmitter.prototype`.
  */
 
-function F(){};
+function F(){}
 F.prototype = EventEmitter.prototype;
 Runner.prototype = new F;
 Runner.prototype.constructor = Runner;
 
 
 /**
  * Run tests with full titles matching `re`. Updates runner.total
  * with number of tests matched.
@@ -5368,17 +5368,17 @@ function Suite(title, parentContext) {
   this._bail = false;
   this.delayed = false;
 }
 
 /**
  * Inherit from `EventEmitter.prototype`.
  */
 
-function F(){};
+function F(){}
 F.prototype = EventEmitter.prototype;
 Suite.prototype = new F;
 Suite.prototype.constructor = Suite;
 
 
 /**
  * Return a clone of this `Suite`.
  *
@@ -5690,17 +5690,17 @@ function Test(title, fn) {
   this.pending = !fn;
   this.type = 'test';
 }
 
 /**
  * Inherit from `Runnable.prototype`.
  */
 
-function F(){};
+function F(){}
 F.prototype = Runnable.prototype;
 Test.prototype = new F;
 Test.prototype.constructor = Test;
 
 
 }); // module: test.js
 
 require.register("utils.js", function(module, exports, require){
--- a/toolkit/components/microformats/test/static/javascript/testrunner.js
+++ b/toolkit/components/microformats/test/static/javascript/testrunner.js
@@ -154,26 +154,26 @@ function htmlUnescape(value){
 // Does the node have a class
 function hasClass(node, className) {
     if (node.className) {
         return node.className.match(
             new RegExp('(\\s|^)' + className + '(\\s|$)'));
     } else {
         return false;
     }
-};
+}
 
 
 // Add a class to an node
 function addClass(node, className) {
     if (!hasClass(node, className)) {
         node.className += " " + className;
     }
-};
+}
 
 
 // Removes a class from an node
 function removeClass(node, className) {
     if (hasClass(node, className)) {
         var reg = new RegExp('(\\s|^)' + className + '(\\s|$)');
         node.className = node.className.replace(reg, ' ');
     }
-};
+}
--- a/toolkit/components/microformats/tests/test_Microformats_adr.html
+++ b/toolkit/components/microformats/tests/test_Microformats_adr.html
@@ -17,17 +17,17 @@
 
 test_Microformats();
 test_adr();
 
 function test_Microformats() {
   var Microformats = SpecialPowers.Cu.import("resource://gre/modules/Microformats.js").Microformats;
 
   ok(Microformats, "Check global access to Microformats");
-};
+}
 
 function test_adr() {
   var adr = SpecialPowers.Cu.import("resource://gre/modules/Microformats.js").adr;
 
   var address;
 
   address = new adr(document.getElementById("01-extended-address"));
 
--- a/toolkit/components/microformats/tests/test_Microformats_geo.html
+++ b/toolkit/components/microformats/tests/test_Microformats_geo.html
@@ -81,17 +81,17 @@
 
 test_Microformats();
 test_geo();
 
 function test_Microformats() {
   var Microformats = SpecialPowers.Cu.import("resource://gre/modules/Microformats.js").Microformats;
 
   ok(Microformats, "Check global access to Microformats");
-};
+}
 
 function test_geo() {
   var geo = SpecialPowers.Cu.import("resource://gre/modules/Microformats.js").geo;
 
   var Geo;
 
   Geo = new geo(document.getElementById("01-geo-basic"));
 
--- a/toolkit/components/microformats/tests/test_Microformats_hCalendar.html
+++ b/toolkit/components/microformats/tests/test_Microformats_hCalendar.html
@@ -185,17 +185,17 @@
 
 test_Microformats();
 test_hCard();
 
 function test_Microformats() {
   var Microformats = SpecialPowers.Cu.import("resource://gre/modules/Microformats.js").Microformats;
 
   ok(Microformats, "Check global access to Microformats");
-};
+}
 
 function test_hCard() {
   var hCalendar = SpecialPowers.Cu.import("resource://gre/modules/Microformats.js").hCalendar;
 
   var hcalendar;
 
   hcalendar = new hCalendar(document.getElementById("01-component-vevent-dtstart-date"));
 
--- a/toolkit/components/microformats/tests/test_Microformats_hCard.html
+++ b/toolkit/components/microformats/tests/test_Microformats_hCard.html
@@ -561,17 +561,17 @@
 
 test_Microformats();
 test_hCard();
 
 function test_Microformats() {
   var Microformats = SpecialPowers.Cu.import("resource://gre/modules/Microformats.js").Microformats;
 
   ok(Microformats, "Check global access to Microformats");
-};
+}
 
 function test_hCard() {
   var hCard = SpecialPowers.Cu.import("resource://gre/modules/Microformats.js").hCard;
 
   var hcard;
 
   hcard = new hCard(document.getElementById("01-tantek-basic"));
 
--- a/toolkit/components/places/UnifiedComplete.js
+++ b/toolkit/components/places/UnifiedComplete.js
@@ -1330,17 +1330,17 @@ Search.prototype = {
     };
 
     try {
       let favicon = yield PlacesUtils.promiseFaviconLinkUrl(uri);
       if (favicon)
         match.icon = favicon.spec;
     } catch (e) {
       // It's possible we don't have a favicon for this - and that's ok.
-    };
+    }
 
     this._addMatch(match);
     return true;
   },
 
   _onResultRow: function (row) {
     if (this._localMatchesCount == 0) {
       TelemetryStopwatch.finish(TELEMETRY_1ST_RESULT, this);
--- a/toolkit/components/places/nsPlacesAutoComplete.js
+++ b/toolkit/components/places/nsPlacesAutoComplete.js
@@ -988,17 +988,17 @@ nsPlacesAutoComplete.prototype = {
           restrict("url");
           break;
         case this._restrictTypedToken:
           restrict("typed");
           break;
         default:
           // We do not want to remove the token if we did not match.
           continue;
-      };
+      }
 
       aTokens.splice(i, 1);
     }
 
     // Set the right JavaScript behavior based on our preference.  Note that the
     // preference is whether or not we should filter JavaScript, and the
     // behavior is if we should search it or not.
     if (!this._filterJavaScript) {
--- a/toolkit/components/places/tests/autocomplete/head_autocomplete.js
+++ b/toolkit/components/places/tests/autocomplete/head_autocomplete.js
@@ -265,17 +265,17 @@ function run_test() {
   // Do an extra function if necessary
   if (func)
     func();
 
   Task.spawn(function* () {
     // Iterate over all tasks and execute them
     for (let [, [fn, args]] in Iterator(gNextTestSetupTasks)) {
       yield fn.apply(this, args);
-    };
+    }
 
     // Clean up to allow tests to register more functions.
     gNextTestSetupTasks = [];
 
     // At this point frecency could still be updating due to latest pages
     // updates.  This is not a problem in real life, but autocomplete tests
     // should return reliable resultsets, thus we have to wait.
     yield PlacesTestUtils.promiseAsyncUpdates();
--- a/toolkit/components/places/tests/browser/browser_favicon_privatebrowsing_perwindowpb.js
+++ b/toolkit/components/places/tests/browser/browser_favicon_privatebrowsing_perwindowpb.js
@@ -15,17 +15,17 @@ function test() {
     });
   });
 
   function testOnWindow(aIsPrivate, aCallback) {
     whenNewWindowLoaded({private: aIsPrivate}, function(aWin) {
       windowsToClose.push(aWin);
       executeSoon(() => aCallback(aWin));
     });
-  };
+  }
 
   function waitForTabLoad(aWin, aCallback) {
     aWin.gBrowser.selectedBrowser.addEventListener("load", function onLoad() {
       aWin.gBrowser.selectedBrowser.removeEventListener("load", onLoad, true);
       aCallback();
     }, true);
     aWin.gBrowser.selectedBrowser.loadURI(pageURI);
   }
--- a/toolkit/components/places/tests/browser/browser_favicon_setAndFetchFaviconForPage.js
+++ b/toolkit/components/places/tests/browser/browser_favicon_setAndFetchFaviconForPage.js
@@ -15,17 +15,17 @@ function test() {
   let pageURI;
   let favIconData;
 
   function testOnWindow(aOptions, aCallback) {
     whenNewWindowLoaded(aOptions, function(aWin) {
       windowsToClose.push(aWin);
       executeSoon(() => aCallback(aWin));
     });
-  };
+  }
 
   // This function is called after calling finish() on the test.
   registerCleanupFunction(function() {
     windowsToClose.forEach(function(aWin) {
       aWin.close();
     });
   });
 
--- a/toolkit/components/places/tests/browser/browser_favicon_setAndFetchFaviconForPage_failures.js
+++ b/toolkit/components/places/tests/browser/browser_favicon_setAndFetchFaviconForPage_failures.js
@@ -24,17 +24,17 @@ function test() {
   let favIconsResultCount = 0;
   let pageURI;
 
   function testOnWindow(aOptions, aCallback) {
     whenNewWindowLoaded(aOptions, function(aWin) {
       windowsToClose.push(aWin);
       executeSoon(() => aCallback(aWin));
     });
-  };
+  }
 
   // This function is called after calling finish() on the test.
   registerCleanupFunction(function() {
     windowsToClose.forEach(function(aWin) {
       aWin.close();
     });
   });
 
--- a/toolkit/components/places/tests/browser/browser_visituri_privatebrowsing_perwindowpb.js
+++ b/toolkit/components/places/tests/browser/browser_visituri_privatebrowsing_perwindowpb.js
@@ -46,17 +46,17 @@ function test() {
   function testOnWindow(aOptions, aCallback) {
     whenNewWindowLoaded(aOptions, function(aWin) {
       windowsToClose.push(aWin);
       // execute should only be called when need, like when you are opening
       // web pages on the test. If calling executeSoon() is not necesary, then
       // call whenNewWindowLoaded() instead of testOnWindow() on your test.
       executeSoon(() => aCallback(aWin));
     });
-  };
+  }
 
    // This function is called after calling finish() on the test.
   registerCleanupFunction(function() {
     windowsToClose.forEach(function(aWin) {
       aWin.close();
     });
   });
 
--- a/toolkit/components/places/tests/browser/head.js
+++ b/toolkit/components/places/tests/browser/head.js
@@ -310,10 +310,10 @@ function waitForCondition(condition, nex
     if (conditionPassed) {
       moveOn();
     }
     tries++;
   }, 200);
   function moveOn() {
     clearInterval(interval);
     nextTest();
-  };
+  }
 }
--- a/toolkit/components/places/tests/expiration/test_outdated_analyze.js
+++ b/toolkit/components/places/tests/expiration/test_outdated_analyze.js
@@ -33,17 +33,17 @@ function run_test() {
   // Add a bunch of pages (at laast IMPORT_PAGES_THRESHOLD pages).
   let places = [];
   for (let i = 0; i < 100; i++) {
     places.push({
       uri: NetUtil.newURI(TEST_URL + i),
       title: "Title" + i,
       visits: [new VisitInfo]
     });
-  };
+  }
   gHistory.updatePlaces(places);
 
   // Set interval to a small value to expire on it.
   setInterval(1); // 1s
 
   Services.obs.addObserver(function observeExpiration(aSubject, aTopic, aData) {
     Services.obs.removeObserver(observeExpiration,
                                 PlacesUtils.TOPIC_EXPIRATION_FINISHED);
--- a/toolkit/components/places/tests/favicons/test_replaceFaviconData.js
+++ b/toolkit/components/places/tests/favicons/test_replaceFaviconData.js
@@ -52,17 +52,17 @@ function checkCallbackSucceeded(callback
   do_check_eq(callbackMimetype, sourceMimetype);
   do_check_true(compareArrays(callbackData, sourceData));
 }
 
 function run_test() {
   // check that the favicon loaded correctly
   do_check_eq(originalFavicon.data.length, 286);
   run_next_test();
-};
+}
 
 add_task(function* test_replaceFaviconData_validHistoryURI() {
   do_print("test replaceFaviconData for valid history uri");
 
   let pageURI = uri("http://test1.bar/");
   yield PlacesTestUtils.addVisits(pageURI);
 
   let favicon = createFavicon("favicon1.png");
--- a/toolkit/components/places/tests/favicons/test_replaceFaviconDataFromDataURL.js
+++ b/toolkit/components/places/tests/favicons/test_replaceFaviconDataFromDataURL.js
@@ -55,17 +55,17 @@ function checkCallbackSucceeded(callback
   do_check_eq(callbackMimetype, sourceMimetype);
   do_check_true(compareArrays(callbackData, sourceData));
 }
 
 function run_test() {
   // check that the favicon loaded correctly
   do_check_eq(originalFavicon.data.length, 286);
   run_next_test();
-};
+}
 
 add_task(function* test_replaceFaviconDataFromDataURL_validHistoryURI() {
   do_print("test replaceFaviconDataFromDataURL for valid history uri");
 
   let pageURI = uri("http://test1.bar/");
   yield PlacesTestUtils.addVisits(pageURI);
 
   let favicon = createFavicon("favicon1.png");
--- a/toolkit/components/places/tests/head_common.js
+++ b/toolkit/components/places/tests/head_common.js
@@ -113,17 +113,17 @@ function DBConn(aForceNewConnection) {
     file.append("places.sqlite");
     let dbConn = gDBConn = Services.storage.openDatabase(file);
 
     // Be sure to cleanly close this connection.
     promiseTopicObserved("profile-before-change").then(() => dbConn.asyncClose());
   }
 
   return gDBConn.connectionReady ? gDBConn : null;
-};
+}
 
 /**
  * Reads data from the provided inputstream.
  *
  * @return an array of bytes.
  */
 function readInputStreamData(aStream) {
   let bistream = Cc["@mozilla.org/binaryinputstream;1"].
--- a/toolkit/components/places/tests/history/test_remove.js
+++ b/toolkit/components/places/tests/history/test_remove.js
@@ -139,17 +139,17 @@ add_task(function* test_remove_single() 
 // Test removing a list of pages
 add_task(function* test_remove_many() {
   const SIZE = 10;
 
   yield PlacesTestUtils.clearHistory();
   yield PlacesUtils.bookmarks.eraseEverything();
 
   do_print("Adding a witness page");
-  let WITNESS_URI = NetUtil.newURI("http://mozilla.com/test_browserhistory/test_remove/" + Math.random());;
+  let WITNESS_URI = NetUtil.newURI("http://mozilla.com/test_browserhistory/test_remove/" + Math.random());
   yield PlacesTestUtils.addVisits(WITNESS_URI);
   Assert.ok(page_in_database(WITNESS_URI), "Witness page added");
 
   do_print("Generating samples");
   let pages = [];
   for (let i = 0; i < SIZE; ++i) {
     let uri = NetUtil.newURI("http://mozilla.com/test_browserhistory/test_remove?sample=" + i + "&salt=" + Math.random());
     let title = "Visit " + i + ", " + Math.random();
--- a/toolkit/components/places/tests/test_bug_461710_perwindowpb.html
+++ b/toolkit/components/places/tests/test_bug_461710_perwindowpb.html
@@ -180,17 +180,17 @@ function testOnWindow(aIsPrivate, callba
   var mainWindow = window.QueryInterface(Ci.nsIInterfaceRequestor)
                          .getInterface(Ci.nsIWebNavigation)
                          .QueryInterface(Ci.nsIDocShellTreeItem)
                          .rootTreeItem
                          .QueryInterface(Ci.nsIInterfaceRequestor)
                          .getInterface(Ci.nsIDOMWindow);
   var win = mainWindow.OpenBrowserWindow({private: aIsPrivate});
   whenDelayedStartupFinished(win, function() { callback(win); });
-};
+}
 
 const URI_VISITED_RESOLUTION_TOPIC = "visited-status-resolution";
 var observer = {
   uri: null,
   resolved: true,
   observe: function (aSubject, aTopic, aData) {
 
     if (this.uri.equals(SpecialPowers.wrap(aSubject).QueryInterface(Ci.nsIURI))) {
--- a/toolkit/components/places/tests/unit/test_async_history_api.js
+++ b/toolkit/components/places/tests/unit/test_async_history_api.js
@@ -1000,17 +1000,17 @@ add_task(function* test_title_change_not
             place.visits = [new VisitInfo()];
             PlacesUtils.asyncHistory.updatePlaces(place);
             break;
           case 2:
             PlacesUtils.history.removeObserver(silentObserver);
             PlacesUtils.history.removeObserver(observer);
             resolve();
             break;
-        };
+        }
       });
 
       PlacesUtils.history.addObserver(observer, false);
       PlacesUtils.asyncHistory.updatePlaces(aPlace);
     });
   }
 
   yield promiseTitleChangedObserver(place);
--- a/toolkit/components/places/tests/unit/test_download_history.js
+++ b/toolkit/components/places/tests/unit/test_download_history.js
@@ -220,17 +220,17 @@ add_test(function test_dh_details()
   function checkFinished()
   {
     if (titleSet && destinationFileUriSet && destinationFileNameSet) {
       PlacesUtils.annotations.removeObserver(annoObserver);
       PlacesUtils.history.removeObserver(historyObserver);
 
       PlacesTestUtils.clearHistory().then(run_next_test);
     }
-  };
+  }
 
   let annoObserver = {
     onPageAnnotationSet: function AO_onPageAnnotationSet(aPage, aName)
     {
       if (aPage.equals(SOURCE_URI)) {
         let value = PlacesUtils.annotations.getPageAnnotation(aPage, aName);
         switch (aName)
         {
--- a/toolkit/components/promiseworker/PromiseWorker.jsm
+++ b/toolkit/components/promiseworker/PromiseWorker.jsm
@@ -32,17 +32,17 @@ XPCOMUtils.defineLazyModuleGetter(this, 
 /**
  * An implementation of queues (FIFO).
  *
  * The current implementation uses one array, runs in O(n ^ 2), and is optimized
  * for the case in which queues are generally short.
  */
 function Queue() {
   this._array = [];
-};
+}
 Queue.prototype = {
   pop: function pop() {
     return this._array.shift();
   },
   push: function push(x) {
     return this._array.push(x);
   },
   isEmpty: function isEmpty() {
@@ -367,17 +367,17 @@ this.BasePromiseWorker.prototype = {
 
 /**
  * An error that has been serialized by the worker.
  *
  * @constructor
  */
 function WorkerError(data) {
   this.data = data;
-};
+}
 
 /**
  * A constructor used to send data to the worker thread while
  * with special treatment (e.g. transmitting data instead of
  * copying it).
  *
  * @param {object=} data The data to send to the caller thread.
  * @param {object=} meta Additional instructions, as an object
--- a/toolkit/components/promiseworker/worker/PromiseWorker.js
+++ b/toolkit/components/promiseworker/worker/PromiseWorker.js
@@ -53,17 +53,17 @@ const EXCEPTION_NAMES = {
  * - {Array} transfers An array of objects that should be transferred
  *   instead of being copied.
  *
  * @constructor
  */
 function Meta(data, meta) {
   this.data = data;
   this.meta = meta;
-};
+}
 exports.Meta = Meta;
 
 /**
  * Base class for a worker.
  *
  * Derived classes are expected to provide the following methods:
  * {
  *   dispatch: function(method, args) {
@@ -83,17 +83,17 @@ exports.Meta = Meta;
  * By default, the AbstractWorker is not connected to a message port,
  * hence will not receive anything.
  *
  * To connect it, use `onmessage`, as follows:
  *   self.addEventListener("message", msg => myWorkerInstance.handleMessage(msg));
  */
 function AbstractWorker(agent) {
   this._agent = agent;
-};
+}
 AbstractWorker.prototype = {
   // Default logger: discard all messages
   log: function() {
   },
 
   /**
    * Handle a message.
    */
--- a/toolkit/components/prompts/src/SharedPromptUtils.jsm
+++ b/toolkit/components/prompts/src/SharedPromptUtils.jsm
@@ -61,17 +61,17 @@ this.PromptUtils = {
  *                       is to be disabled.
  * @param focusTarget    The window used to watch focus/blur events.
  */
 this.EnableDelayHelper = function({enableDialog, disableDialog, focusTarget}) {
     this.enableDialog = makeSafe(enableDialog);
     this.disableDialog = makeSafe(disableDialog);
     this.focusTarget = focusTarget;
 
-    this.disableDialog();;
+    this.disableDialog();
 
     this.focusTarget.addEventListener("blur", this, false);
     this.focusTarget.addEventListener("focus", this, false);
     this.focusTarget.document.addEventListener("unload", this, false);
 
     this.startOnFocusDelay();
 };
 
--- a/toolkit/components/satchel/test/browser/browser_privbrowsing_perwindowpb.js
+++ b/toolkit/components/satchel/test/browser/browser_privbrowsing_perwindowpb.js
@@ -54,17 +54,17 @@ function test() {
     aWindow.gBrowser.selectedBrowser.loadURI(testURI);
   }
 
   function testOnWindow(aOptions, aCallback) {
     whenNewWindowLoaded(aOptions, function(aWin) {
       windowsToClose.push(aWin);
       executeSoon(() => aCallback(aWin));
     });
-  };
+  }
 
   registerCleanupFunction(function() {
     windowsToClose.forEach(function(aWin) {
       aWin.close();
     });
   });
 
 
--- a/toolkit/components/satchel/test/unit/test_async_expire.js
+++ b/toolkit/components/satchel/test/unit/test_async_expire.js
@@ -160,9 +160,9 @@ function* tests()
 
   yield countEntries("bar", "29days", checkNotExists);
   yield countEntries("9DaysOld", "foo", checkExists);
   yield countEntries("name-B", "value-B", checkExists);
   yield countEntries("name-C", "value-C", checkExists);
   yield countEntries(null, null, function(num) { do_check_eq(3, num); next_test(); });
 
   test_finished();
-};
+}
--- a/toolkit/components/satchel/test/unit/test_notify.js
+++ b/toolkit/components/satchel/test/unit/test_notify.js
@@ -152,9 +152,9 @@ do_check_eq(expectedNotification, null);
 
 os.removeObserver(TestObserver, "satchel-storage-changed", false);
 
 do_test_finished();
 
 } catch (e) {
     throw "FAILED in test #" + testnum + " -- " + testdesc + ": " + e;
 }
-};
+}
--- a/toolkit/components/search/tests/xpcshell/test_SearchStaticData.js
+++ b/toolkit/components/search/tests/xpcshell/test_SearchStaticData.js
@@ -16,12 +16,12 @@ function run_test() {
                                 .indexOf("www.google.com") != -1);
   do_check_true(SearchStaticData.getAlternateDomains("www.google.com")
                                 .every(d => d.startsWith("www.google.")));
   do_check_true(SearchStaticData.getAlternateDomains("google.com").length == 0);
 
   // Test that methods from SearchStaticData module can be overwritten,
   // needed for hotfixing.
   let backup = SearchStaticData.getAlternateDomains;
-  SearchStaticData.getAlternateDomains = () => ["www.bing.fr"];;
+  SearchStaticData.getAlternateDomains = () => ["www.bing.fr"];
   do_check_matches(SearchStaticData.getAlternateDomains("www.bing.com"), ["www.bing.fr"]);
   SearchStaticData.getAlternateDomains = backup;
 }
--- a/toolkit/components/social/test/browser/browser_workerAPI.js
+++ b/toolkit/components/social/test/browser/browser_workerAPI.js
@@ -202,17 +202,17 @@ var tests = {
         port.close();
         next(); // all out of tests!
         return;
       }
       openLocation = openWhere = null;
       [toURL, expectedLocation, expectedWhere] = testArgs.shift();
       data.actionArgs.toURL = toURL;
       port.postMessage({topic: 'test-notification-create', data: data});
-    };
+    }
 
     port.onmessage = function(evt) {
       if (evt.data.topic == "did-notification-create") {
         is(openLocation, expectedLocation, "url actually opened was " + openLocation);
         is(openWhere, expectedWhere, "the url was opened in a " + expectedWhere);
         nextTest();
       }
     }
--- a/toolkit/components/telemetry/TelemetryEnvironment.jsm
+++ b/toolkit/components/telemetry/TelemetryEnvironment.jsm
@@ -889,17 +889,17 @@ EnvironmentCache.prototype = {
 
   _removeObservers: function () {
     // Remove the search engine change and service observers.
     Services.obs.removeObserver(this, SEARCH_ENGINE_MODIFIED_TOPIC);
     Services.obs.removeObserver(this, SEARCH_SERVICE_TOPIC);
     Services.obs.removeObserver(this, COMPOSITOR_CREATED_TOPIC);
     try {
       Services.obs.removeObserver(this, DISTRIBUTION_CUSTOMIZATION_COMPLETE_TOPIC);
-    } catch(ex) {};
+    } catch(ex) {}
   },
 
   observe: function (aSubject, aTopic, aData) {
     this._log.trace("observe - aTopic: " + aTopic + ", aData: " + aData);
     switch (aTopic) {
       case SEARCH_ENGINE_MODIFIED_TOPIC:
         if (aData != "engine-current") {
           return;
--- a/toolkit/components/telemetry/TelemetrySession.jsm
+++ b/toolkit/components/telemetry/TelemetrySession.jsm
@@ -828,17 +828,17 @@ var Impl = {
    * Returns an object:
    * { range: [min, max], bucket_count: <number of buckets>,
    *   histogram_type: <histogram_type>, sum: <sum>,
    *   sum_squares_lo: <sum_squares_lo>,
    *   sum_squares_hi: <sum_squares_hi>,
    *   values: { bucket1: count1, bucket2: count2, ... } }
    */
   packHistogram: function packHistogram(hgram) {
-    let r = hgram.ranges;;
+    let r = hgram.ranges;
     let c = hgram.counts;
     let retgram = {
       range: [r[1], r[r.length - 1]],
       bucket_count: r.length,
       histogram_type: hgram.histogram_type,
       values: {},
       sum: hgram.sum
     };
@@ -1058,17 +1058,17 @@ var Impl = {
         // aren't available on all platforms.  But if the attribute simply
         // isn't present, that indicates the distinguished amounts have changed
         // and this file hasn't been updated appropriately.
         let amount = mgr[amountName];
         NS_ASSERT(amount !== undefined,
                   "telemetry accessed an unknown distinguished amount");
         boundHandleMemoryReport(id, units, amount);
       } catch (e) {
-      };
+      }
     }
     let b = (id, n) => h(id, Ci.nsIMemoryReporter.UNITS_BYTES, n);
     let c = (id, n) => h(id, Ci.nsIMemoryReporter.UNITS_COUNT, n);
     let cc= (id, n) => h(id, Ci.nsIMemoryReporter.UNITS_COUNT_CUMULATIVE, n);
     let p = (id, n) => h(id, Ci.nsIMemoryReporter.UNITS_PERCENTAGE, n);
 
     b("MEMORY_VSIZE", "vsize");
     b("MEMORY_VSIZE_MAX_CONTIGUOUS", "vsizeMaxContiguous");
--- a/toolkit/components/telemetry/TelemetryStorage.jsm
+++ b/toolkit/components/telemetry/TelemetryStorage.jsm
@@ -1337,17 +1337,17 @@ var TelemetryStorageImpl = {
         Telemetry.getHistogramById("TELEMETRY_PENDING_LOAD_FAILURE_READ").add();
       } else if (e instanceof PingParseError) {
         Telemetry.getHistogramById("TELEMETRY_PENDING_LOAD_FAILURE_PARSE").add();
       }
       // Remove the ping from the cache, so we don't try to load it again.
       this._pendingPings.delete(id);
       // Then propagate the rejection.
       throw e;
-    };
+    }
 
     return ping;
   }),
 
   removePendingPing: function(id) {
     let info = this._pendingPings.get(id);
     if (!info) {
       this._log.trace("removePendingPing - unknown id " + id);
--- a/toolkit/components/telemetry/ThirdPartyCookieProbe.jsm
+++ b/toolkit/components/telemetry/ThirdPartyCookieProbe.jsm
@@ -183,9 +183,9 @@ RejectStats.prototype = {
   }
 };
 
 /**
  * Normalize a host to its eTLD + 1.
  */
 function normalizeHost(host) {
   return Services.eTLD.getBaseDomainFromHost(host);
-};
+}
--- a/toolkit/components/telemetry/tests/unit/test_TelemetryEnvironment.js
+++ b/toolkit/components/telemetry/tests/unit/test_TelemetryEnvironment.js
@@ -208,17 +208,17 @@ function createMockAddonProvider(aName) 
     },
 
     shutdown() {
       return Promise.resolve();
     },
   };
 
   return mockProvider;
-};
+}
 
 /**
  * Used to spoof the Persona Id.
  */
 function spoofTheme(aId, aName, aDesc) {
   return {
     id: aId,
     name: aName,
--- a/toolkit/components/thumbnails/PageThumbUtils.jsm
+++ b/toolkit/components/thumbnails/PageThumbUtils.jsm
@@ -86,17 +86,17 @@ this.PageThumbUtils = {
        */
       let prefWidth = Services.prefs.getIntPref("toolkit.pageThumbs.minWidth");
       let prefHeight = Services.prefs.getIntPref("toolkit.pageThumbs.minHeight");
       let divisor = Services.prefs.getIntPref("toolkit.pageThumbs.screenSizeDivisor");
 
       prefWidth *= scale;
       prefHeight *= scale;
 
-      this._thumbnailWidth = Math.max(Math.round(screenWidth.value / divisor), prefWidth);;
+      this._thumbnailWidth = Math.max(Math.round(screenWidth.value / divisor), prefWidth);
       this._thumbnailHeight = Math.max(Math.round(screenHeight.value / divisor), prefHeight);
     }
 
     return [this._thumbnailWidth, this._thumbnailHeight];
   },
 
   /***
    * Given a browser window, return the size of the content
--- a/toolkit/content/aboutTelemetry.js
+++ b/toolkit/content/aboutTelemetry.js
@@ -1412,17 +1412,17 @@ function RenderObject(aObject) {
   if (keys.length == 0) {
     return "{}";
   }
   output = "{\"" + keys[0] + "\":\u00A0" + JSON.stringify(aObject[keys[0]]);
   for (let i = 1; i < keys.length; i++) {
     output += ", \"" + keys[i] + "\":\u00A0" + JSON.stringify(aObject[keys[i]]);
   }
   return output + "}";
-};
+}
 
 var KeyValueTable = {
   /**
    * Returns a 2-column table with keys and values
    * @param aMeasurements Each key in this JS object is rendered as a row in
    *                      the table with its corresponding value
    * @param aKeysLabel    Column header for the keys column
    * @param aValuesLabel  Column header for the values column
--- a/toolkit/content/aboutwebrtc/aboutWebrtc.js
+++ b/toolkit/content/aboutwebrtc/aboutWebrtc.js
@@ -178,24 +178,24 @@ SavePage.prototype.onClick = function() 
     let fout = FileUtils.openAtomicFileOutputStream(
       FilePicker.file, FileUtils.MODE_WRONLY | FileUtils.MODE_CREATE);
 
     let nodes = content.querySelectorAll(".no-print");
     let noPrintList = [];
     for (let node of nodes) {
       noPrintList.push(node);
       node.style.setProperty("display", "none");
-    };
+    }
 
     fout.write(content.outerHTML, content.outerHTML.length);
     FileUtils.closeAtomicFileOutputStream(fout);
 
     for (let node of noPrintList) {
       node.style.removeProperty("display");
-    };
+    }
 
     this._message = formatString("save_page_msg", [FilePicker.file.path], 1);
     this.update();
   }
 };
 
 function DebugMode() {
   Control.call(this);
@@ -360,17 +360,17 @@ var AboutWebRTC = {
       return connections;
     }
 
     let reports = [...this._reports];
     reports.sort((a, b) => b.timestamp - a.timestamp);
     for (let report of reports) {
       let peerConnection = new PeerConnection(report);
       connections.appendChild(peerConnection.render());
-    };
+    }
 
     return connections;
   },
 
   renderConnectionLog: function() {
     let content = document.createElement("div");
     content.className = "log";
 
@@ -399,17 +399,17 @@ var AboutWebRTC = {
     });
     sectionCtrl.appendChild(foldEffect.render());
     content.appendChild(sectionCtrl);
 
     for (let line of this._log) {
       elem = document.createElement("p");
       elem.textContent = line;
       div.appendChild(elem);
-    };
+    }
 
     content.appendChild(div);
     return content;
   }
 };
 
 function PeerConnection(report) {
   this._report = report;
@@ -515,42 +515,42 @@ RTPStats.prototype = {
 
     heading.textContent = getString("rtp_stats_heading");
     div.appendChild(heading);
 
     this.generateRTPStats();
 
     for (let statSet of this._stats) {
       div.appendChild(this.renderRTPStatSet(statSet));
-    };
+    }
 
     return div;
   },
 
   generateRTPStats: function() {
     let remoteRtpStats = {};
     let rtpStats = [].concat((this._report.inboundRTPStreamStats  || []),
                              (this._report.outboundRTPStreamStats || []));
 
     // Generate an id-to-streamStat index for each streamStat that is marked
     // as a remote. This will be used next to link the remote to its local side.
     for (let stats of rtpStats) {
       if (stats.isRemote) {
         remoteRtpStats[stats.id] = stats;
       }
-    };
+    }
 
     // If a streamStat has a remoteId attribute, create a remoteRtpStats
     // attribute that references the remote streamStat entry directly.
     // That is, the index generated above is merged into the returned list.
     for (let stats of rtpStats) {
       if (stats.remoteId) {
         stats.remoteRtpStats = remoteRtpStats[stats.remoteId];
       }
-    };
+    }
 
     this._stats = rtpStats;
   },
 
   renderAvStats: function(stats) {
     let statsString = "";
 
     if (stats.mozAvSyncDelay) {
@@ -661,17 +661,17 @@ ICEStats.prototype = {
       tbody.push([
         stat.localcandidate || "",
         stat.remotecandidate || "",
         stat.state || "",
         stat.priority || "",
         stat.nominated || "",
         stat.selected || ""
       ]);
-    };
+    }
 
     let statsTable = new SimpleTable(
       [getString("local_candidate"), getString("remote_candidate"), getString("ice_state"),
        getString("priority"), getString("nominated"), getString("selected")],
       tbody);
 
     let div = document.createElement("div");
     let heading = document.createElement("h4");
@@ -713,26 +713,26 @@ ICEStats.prototype = {
         matched[local.id] = true;
 
         if (remote) {
           stat.remotecandidate = this.candidateToString(remote);
           matched[remote.id] = true;
         }
         stats.push(stat);
       }
-    };
+    }
 
     for (let c of candidates.values()) {
       if (matched[c.id])
         continue;
 
       stat = {};
       stat[c.type] = this.candidateToString(c);
       stats.push(stat);
-    };
+    }
 
     return stats.sort((a, b) => (b.priority || 0) - (a.priority || 0));
   },
 
   candidateToString: function(c) {
     if (!c) {
       return "*";
     }
@@ -755,45 +755,45 @@ function SimpleTable(heading, data) {
 SimpleTable.prototype = {
   renderRow: function(list) {
     let row = document.createElement("tr");
 
     for (let elem of list) {
       let cell = document.createElement("td");
       cell.textContent = elem;
       row.appendChild(cell);
-    };
+    }
 
     return row;
   },
 
   render: function() {
     let table = document.createElement("table");
 
     if (this._heading) {
       table.appendChild(this.renderRow(this._heading));
     }
 
     for (let row of this._data) {
       table.appendChild(this.renderRow(row));
-    };
+    }
 
     return table;
   }
 };
 
 function FoldEffect(targetElem, options = {}) {
   if (targetElem) {
     this._showMsg = "\u25BC " + (options.showMsg || getString("fold_show_msg"));
     this._showHint = options.showHint || getString("fold_show_hint");
     this._hideMsg = "\u25B2 " + (options.hideMsg || getString("fold_hide_msg"));
     this._hideHint = options.hideHint || getString("fold_hide_hint");
     this._target = targetElem;
   }
-};
+}
 
 FoldEffect.prototype = {
   render: function() {
     this._target.classList.add("fold-target");
 
     let ctrl = document.createElement("div");
     this._trigger = ctrl;
     ctrl.className = "fold-trigger";
@@ -826,16 +826,16 @@ FoldEffect.prototype = {
   }
 };
 
 FoldEffect._sections = [];
 
 FoldEffect.expandAll = function() {
   for (let section of this._sections) {
     section.open();
-  };
+  }
 };
 
 FoldEffect.collapseAll = function() {
   for (let section of this._sections) {
     section.close();
-  };
+  }
 };
--- a/toolkit/content/customizeToolbar.js
+++ b/toolkit/content/customizeToolbar.js
@@ -771,17 +771,17 @@ function onToolbarDrop(aEvent)
         draggedItemId != "spring" &&
         draggedItemId != "spacer")
       gPaletteBox.removeChild(draggedPaletteWrapper);
   }
 
   gCurrentDragOverItem = null;
 
   toolboxChanged();
-};
+}
 
 function onPaletteDragOver(aEvent)
 {
   if (isUnwantedDragEvent(aEvent)) {
     return;
   }
   var documentId = gToolboxDocument.documentElement.id;
   if (aEvent.dataTransfer.types.contains("text/toolbarwrapper-id/" + documentId.toLowerCase()))
--- a/toolkit/content/widgets/notification.xml
+++ b/toolkit/content/widgets/notification.xml
@@ -351,17 +351,17 @@
                 bgcolor = prefService.getCharPref("browser.display.background_color");
 
                 var win = content.contentWindow;
                 var context = canvas.getContext("2d");
                 context.globalAlpha = 0.5;
                 context.drawWindow(win, win.scrollX, win.scrollY,
                                    width, height, bgcolor);
               }
-              catch(ex) { };
+              catch(ex) { }
             }
             else if (canvas) {
               canvas.parentNode.removeChild(canvas);
               this._blockingCanvas = null;
               let content = this.firstChild;
               if (content)
                 content.collapsed = false;
             }
--- a/toolkit/content/widgets/resizer.xml
+++ b/toolkit/content/widgets/resizer.xml
@@ -17,17 +17,17 @@
         // don't do this for viewport resizers; causes a crash related to
         // bugs 563665 and 581536 otherwise
         if (this.parentNode == this.ownerDocument.documentElement)
           return;
 
         // if the direction is rtl, set the rtl attribute so that the
         // stylesheet can use this to make the cursor appear properly
         var cs = window.getComputedStyle(this, "");
-        if (cs.writingMode === undefined || cs.writingMode == "horizontal-tb") {;
+        if (cs.writingMode === undefined || cs.writingMode == "horizontal-tb") {
           if (cs.direction == "rtl") {
             this.setAttribute("rtl", "true");
           }
         } else {
           if (cs.writingMode == "vertical-rl") {
             this.setAttribute("rtl", "true");
           }
         }
--- a/toolkit/crashreporter/test/unit/test_crash_AsyncShutdown.js
+++ b/toolkit/crashreporter/test/unit/test_crash_AsyncShutdown.js
@@ -45,17 +45,17 @@ function setup_osfile_crash_noerror() {
   Services.prefs.setIntPref("toolkit.asyncshutdown.crash_timeout", 1);
   Services.prefs.setBoolPref("toolkit.osfile.native", false);
 
   OS.File.profileBeforeChange.addBlocker("Adding a blocker that will never be resolved", () => Promise.defer().promise);
   OS.File.getCurrentDirectory();
 
   Services.obs.notifyObservers(null, "profile-before-change", null);
   dump("Waiting for crash\n");
-};
+}
 
 function after_osfile_crash_noerror(mdump, extra) {
   do_print("after OS.File crash: " + extra.AsyncShutdownTimeout);
   let info = JSON.parse(extra.AsyncShutdownTimeout);
   let state = info.conditions[0].state;
   do_print("Keys: " + Object.keys(state).join(", "));
   do_check_eq(info.phase, "profile-before-change");
   do_check_true(state.launched);
@@ -76,17 +76,17 @@ function setup_osfile_crash_exn() {
   Services.prefs.setIntPref("toolkit.asyncshutdown.crash_timeout", 1);
   Services.prefs.setBoolPref("toolkit.osfile.native", false);
 
   OS.File.profileBeforeChange.addBlocker("Adding a blocker that will never be resolved", () => Promise.defer().promise);
   OS.File.read("I do not exist");
 
   Services.obs.notifyObservers(null, "profile-before-change", null);
   dump("Waiting for crash\n");
-};
+}
 
 function after_osfile_crash_exn(mdump, extra) {
   do_print("after OS.File crash: " + extra.AsyncShutdownTimeout);
   let info = JSON.parse(extra.AsyncShutdownTimeout);
   let state = info.conditions[0].state;
   do_print("Keys: " + Object.keys(state).join(", "));
   do_check_eq(info.phase, "profile-before-change");
   do_check_false(state.shutdown);
--- a/toolkit/crashreporter/test/unit/test_crash_terminator.js
+++ b/toolkit/crashreporter/test/unit/test_crash_terminator.js
@@ -22,17 +22,17 @@ function setup_crash() {
   // Pick an arbitrary notification
   terminator.observe(null, "xpcom-will-shutdown", null);
   terminator.observe(null, "profile-before-change", null);
 
   dump("Waiting (actively) for the crash\n");
   while(true) {
     Services.tm.currentThread.processNextEvent(true);
   }
-};
+}
 
 
 function after_crash(mdump, extra) {
   do_print("Crash signature: " + JSON.stringify(extra, null, "\t"));
   Assert.equal(extra.ShutdownProgress, "profile-before-change");
 }
 
 function run_test() {
--- a/toolkit/identity/Sandbox.jsm
+++ b/toolkit/identity/Sandbox.jsm
@@ -119,17 +119,17 @@ this.Sandbox.prototype = {
       if (event.target != self._frame.contentDocument) {
         return;
       }
       self._frame.removeEventListener(
         "DOMWindowCreated", _makeSandboxContentLoaded, true
       );
 
       aCallback(self);
-    };
+    }
 
     this._frame.addEventListener("DOMWindowCreated",
                                  _makeSandboxContentLoaded,
                                  true);
 
     // Load the iframe.
     let webNav = this._frame.contentWindow
                             .QueryInterface(Ci.nsIInterfaceRequestor)
--- a/toolkit/identity/tests/unit/head_identity.js
+++ b/toolkit/identity/tests/unit/head_identity.js
@@ -160,17 +160,17 @@ function makeObserver(aObserveTopic, aOb
 // when ready, invoke callback with the identity
 function setup_test_identity(identity, cert, cb) {
   // set up the store so that we're supposed to be logged in
   let store = get_idstore();
 
   function keyGenerated(err, kpo) {
     store.addIdentity(identity, kpo, cert);
     cb();
-  };
+  }
 
   jwcrypto.generateKeyPair("DS160", keyGenerated);
 }
 
 // takes a list of functions and returns a function that
 // when called the first time, calls the first func,
 // then the next time the second, etc.
 function call_sequentially() {
--- a/toolkit/identity/tests/unit/test_jwcrypto.js
+++ b/toolkit/identity/tests/unit/test_jwcrypto.js
@@ -84,17 +84,17 @@ function test_rsa() {
     let sig = kpo.sign("This is a message to sign");
 
     do_check_neq(sig, null);
     do_check_eq(typeof sig, "string");
     do_check_true(sig.length > 1);
 */
     do_test_finished();
     run_next_test();
-  };
+  }
 
   jwcrypto.generateKeyPair("RS256", checkRSA);
 }
 
 function test_dsa() {
   do_test_pending();
   function checkDSA(err, kpo) {
     do_check_neq(kpo, undefined);
@@ -115,17 +115,17 @@ function test_dsa() {
     let sig = kpo.sign("This is a message to sign");
 
     do_check_neq(sig, null);
     do_check_eq(typeof sig, "string");
     do_check_true(sig.length > 1);
 */
     do_test_finished();
     run_next_test();
-  };
+  }
 
   jwcrypto.generateKeyPair("DS160", checkDSA);
 }
 
 function test_get_assertion_with_offset() {
   do_test_pending();
 
 
@@ -256,17 +256,17 @@ function extractComponents(signedObject)
     do_check_true(!!payload[field]);
   }
 
   return {header: header,
           payload: payload,
           headerSegment: headerSegment,
           payloadSegment: payloadSegment,
           cryptoSegment: cryptoSegment};
-};
+}
 
 var TESTS = [
   test_sanity,
   test_generate,
   test_get_assertion,
   test_get_assertion_with_offset,
   test_assertion_lifetime,
   test_audience_encoding_bug972582,
--- a/toolkit/modules/Finder.jsm
+++ b/toolkit/modules/Finder.jsm
@@ -376,17 +376,17 @@ Finder.prototype = {
             range.endContainer == foundRange.endContainer &&
             range.endOffset == foundRange.endOffset);
         }
       }
       if (aStats.total == aMatchLimit) {
         aStats.total = -1;
         break;
       }
-    };
+    }
 
     return aStats;
   },
 
   /**
    * Basic wrapper around nsIFind that provides a generator yielding
    * a range each time an occurence of `aWord` string is found.
    *
--- a/toolkit/modules/Log.jsm
+++ b/toolkit/modules/Log.jsm
@@ -629,17 +629,17 @@ StructuredFormatter.prototype = {
 }
 
 /**
  * Test an object to see if it is a Mozilla JS Error.
  */
 function isError(aObj) {
   return (aObj && typeof(aObj) == 'object' && "name" in aObj && "message" in aObj &&
           "fileName" in aObj && "lineNumber" in aObj && "stack" in aObj);
-};
+}
 
 /*
  * Parameter Formatters
  * These massage an object used as a parameter for a LogMessage into
  * a string representation of the object.
  */
 
 function ParameterFormatter() {
--- a/toolkit/modules/Sntp.jsm
+++ b/toolkit/modules/Sntp.jsm
@@ -164,17 +164,17 @@ Sntp.prototype = {
       let data = new DataView(buffer);
       data.setUint8(0, NTP_MODE_CLIENT | (NTP_VERSION << 3));
       data.setUint32(TRANSMIT_TIME_OFFSET, s, false);
       data.setUint32(TRANSMIT_TIME_OFFSET + 4, f, false);
 
       return String.fromCharCode.apply(null, new Uint8Array(buffer));
     }
 
-    function SNTPListener() {};
+    function SNTPListener() {}
     SNTPListener.prototype = {
       onStartRequest: function onStartRequest(request, context) {
       },
 
       onStopRequest: function onStopRequest(request, context, status) {
         if (!Components.isSuccessCode(status)) {
           debug ("Connection failed");
           this._requesting = false;
--- a/toolkit/modules/Task.jsm
+++ b/toolkit/modules/Task.jsm
@@ -119,17 +119,17 @@ var gMaintainStack = false;
  * @return Iterator<string>
  */
 function* linesOf(string) {
   let reLine = /([^\r\n])+/g;
   let match;
   while ((match = reLine.exec(string))) {
     yield [match[0], match.index];
   }
-};
+}
 
 /**
  * Detect whether a value is a generator.
  *
  * @param aValue
  *        The value to identify.
  * @return A boolean indicating whether the value is a generator.
  */
--- a/toolkit/modules/tests/browser/browser_Finder.js
+++ b/toolkit/modules/tests/browser/browser_Finder.js
@@ -17,17 +17,17 @@ add_task(function* () {
     }
   };
   finder.addResultListener(listener);
 
   function waitForFind() {
     return new Promise(resolve => {
       listener.onFindResult = resolve;
     })
-  };
+  }
 
   let promiseFind = waitForFind();
   finder.highlight(true, "content");
   let findResult = yield promiseFind;
   is(findResult.result, Ci.nsITypeAheadFind.FIND_FOUND, "should find string");
 
   promiseFind = waitForFind();
   finder.highlight(true, "Bla");
--- a/toolkit/mozapps/extensions/AddonManager.jsm
+++ b/toolkit/mozapps/extensions/AddonManager.jsm
@@ -976,17 +976,17 @@ var AddonManagerInternal = {
               AddonManagerPrivate.recordException("AMI", "provider " + url, "no startup()");
             }
             logger.debug("Loaded provider scope for " + url + ": " + Object.keys(scope).toSource());
           }
           catch (e) {
             AddonManagerPrivate.recordException("AMI", "provider " + url + " load failed", e);
             logger.error("Exception loading default provider \"" + url + "\"", e);
           }
-        };
+        }
       }
 
       // Load any providers registered in the category manager
       let catman = Cc["@mozilla.org/categorymanager;1"].
                    getService(Ci.nsICategoryManager);
       let entries = catman.enumerateCategory(CATEGORY_PROVIDER_MODULE);
       while (entries.hasMoreElements()) {
         let entry = entries.getNext().QueryInterface(Ci.nsISupportsCString).data;
--- a/toolkit/mozapps/extensions/internal/AddonRepository_SQLiteMigrator.jsm
+++ b/toolkit/mozapps/extensions/internal/AddonRepository_SQLiteMigrator.jsm
@@ -392,17 +392,17 @@ this.AddonRepository_SQLiteMigrator = {
     // This is intentionally not an AddonSearchResult object in order
     // to allow AddonDatabase._parseAddon to parse it, same as if it
     // was read from the JSON database.
 
     let addon = { icons: {} };
 
     for (let prop of PROP_SINGLE) {
       addon[prop] = aRow.getResultByName(prop)
-    };
+    }
 
     return addon;
   },
 
   /**
    * Make a developer from an asynchronous row
    *
    * @param  aRow
--- a/toolkit/mozapps/extensions/internal/XPIProvider.jsm
+++ b/toolkit/mozapps/extensions/internal/XPIProvider.jsm
@@ -4102,17 +4102,17 @@ this.XPIProvider = {
             logger.debug("updateAddonRepositoryData got info for " + addon.id);
             addon._repositoryAddon = aRepoAddon;
             addon.compatibilityOverrides = aRepoAddon.compatibilityOverrides;
             this.updateAddonDisabledState(addon);
           }
 
           notifyComplete();
         });
-      };
+      }
     });
   },
 
   /**
    * When the previously selected theme is removed this method will be called
    * to enable the default theme.
    */
   enableDefaultTheme: function() {
--- a/toolkit/mozapps/extensions/internal/XPIProviderUtils.js
+++ b/toolkit/mozapps/extensions/internal/XPIProviderUtils.js
@@ -348,17 +348,17 @@ function DBAddonInternal(aLoaded) {
       for (let install of XPIProvider.installs) {
         if (install.state == AddonManager.STATE_INSTALLED &&
             !(install.addon.inDatabase) &&
             install.addon.id == this.id &&
             install.installLocation == this._installLocation) {
           delete this.pendingUpgrade;
           return this.pendingUpgrade = install.addon;
         }
-      };
+      }
       return null;
     });
 }
 
 DBAddonInternal.prototype = Object.create(AddonInternal.prototype);
 Object.assign(DBAddonInternal.prototype, {
   applyCompatibilityUpdate: function(aUpdate, aSyncCompatibility) {
     let wasCompatible = this.isCompatible;
@@ -656,17 +656,17 @@ this.XPIDatabase = {
         // the preference are updated.
       }
       // If we got here, we probably have good data
       // Make AddonInternal instances from the loaded data and save them
       let addonDB = new Map();
       for (let loadedAddon of inputAddons.addons) {
         let newAddon = new DBAddonInternal(loadedAddon);
         addonDB.set(newAddon._key, newAddon);
-      };
+      }
       parseTimer.done();
       this.addonDB = addonDB;
       logger.debug("Successfully read XPI database");
       this.initialized = true;
     }
     catch(e) {
       // If we catch and log a SyntaxError from the JSON
       // parser, the xpcshell test harness fails the test for us: bug 870828
--- a/toolkit/mozapps/extensions/test/browser/browser_searching.js
+++ b/toolkit/mozapps/extensions/test/browser/browser_searching.js
@@ -264,17 +264,17 @@ function get_expected_results(aSortBy, a
  *         Boolean representing if local results are being shown
  */
 function check_results(aQuery, aSortBy, aReverseOrder, aShowLocal) {
 
   var xpinstall_enabled = true;
   try {
     xpinstall_enabled = Services.prefs.getBoolPref(PREF_XPI_ENABLED);
   }
-  catch (e) {};
+  catch (e) {}
 
   // When XPI Instalation is disabled, those buttons are hidden and unused
   if (xpinstall_enabled) {
     var localFilterSelected = gManagerWindow.document.getElementById("search-filter-local").selected;
     var remoteFilterSelected = gManagerWindow.document.getElementById("search-filter-remote").selected;
     is(localFilterSelected, aShowLocal, "Local filter should be selected if showing local items");
     is(remoteFilterSelected, !aShowLocal, "Remote filter should be selected if showing remote items");
   }
--- a/toolkit/mozapps/extensions/test/xpcshell/test_DeferredSave.js
+++ b/toolkit/mozapps/extensions/test/xpcshell/test_DeferredSave.js
@@ -62,17 +62,17 @@ function DeferredSaveTester(aDataProvide
       do_print("writeAtomic: " + aFile + " data: '" + aData + "', " + aOptions.toSource());
       tester.writtenData = aData;
       tester.waDeferred = Promise.defer();
       tester.writeHandler(tester);
       return tester.waDeferred.promise;
     };
 
   return tester;
-};
+}
 
 /**
  * Install a mock nsITimer factory that triggers on the next spin of
  * the event loop after it is scheduled
  */
 function setQuickMockTimer() {
   let quickTimer = {
     initWithCallback: function(aFunction, aDelay, aType) {
--- a/toolkit/mozapps/extensions/test/xpcshell/test_bug659772.js
+++ b/toolkit/mozapps/extensions/test/xpcshell/test_bug659772.js
@@ -330,11 +330,11 @@ function run_test_2() {
         a3.uninstall();
         a4.uninstall();
         restartManager();
 
         shutdownManager();
 
         do_test_finished();
       }));
-    };
+    }
   });
 }
--- a/toolkit/mozapps/extensions/test/xpcshell/test_gmpProvider.js
+++ b/toolkit/mozapps/extensions/test/xpcshell/test_gmpProvider.js
@@ -225,17 +225,17 @@ add_task(function* test_autoUpdatePrefPe
 
 function createMockPluginFilesIfNeeded(aFile, aPluginId) {
   function createFile(aFileName) {
     let f = aFile.clone();
     f.append(aFileName);
     if (!f.exists()) {
       f.create(Ci.nsIFile.NORMAL_FILE_TYPE, FileUtils.PERMS_FILE);
     }
-  };
+  }
 
   let id = aPluginId.substring(4);
   let libName = AppConstants.DLL_PREFIX + id + AppConstants.DLL_SUFFIX;
 
   createFile(libName);
   createFile(id + ".info");
   if (aPluginId == "gmp-eme-adobe")
     createFile(id + ".voucher");
--- a/toolkit/mozapps/extensions/test/xpcshell/test_no_addons.js
+++ b/toolkit/mozapps/extensions/test/xpcshell/test_no_addons.js
@@ -67,17 +67,17 @@ function* trigger_db_load() {
   let addonDefer = Promise.defer();
   AddonManager.getAddonsByTypes(['extension'], addonDefer.resolve);
   let addonList = yield addonDefer.promise;
 
   do_check_eq(addonList.length, 0);
   check_empty_state();
 
   yield true;
-};
+}
 add_task(trigger_db_load);
 
 // Now restart the manager and check again
 add_task(function* restart_and_recheck() {
   restartManager();
   check_empty_state();
   yield true;
 });
--- a/toolkit/mozapps/extensions/test/xpcshell/test_provider_markSafe.js
+++ b/toolkit/mozapps/extensions/test/xpcshell/test_provider_markSafe.js
@@ -20,17 +20,17 @@ function mockAddonProvider(name) {
     },
 
     get name() {
       return name;
     },
   };
 
   return mockProvider;
-};
+}
 
 function run_test() {
   run_next_test();
 }
 
 add_task(function* testMarkSafe() {
   do_print("Starting with provider normally");
   let provider = mockAddonProvider("Mock1");
--- a/toolkit/mozapps/extensions/test/xpcshell/test_provider_shutdown.js
+++ b/toolkit/mozapps/extensions/test/xpcshell/test_provider_shutdown.js
@@ -30,17 +30,17 @@ function mockAddonProvider(aName) {
   mockProvider.donePromise = new Promise((resolve, reject) => {
     mockProvider.doneResolve = resolve;
     mockProvider.doneReject = reject;
   });
   mockProvider.shutdownPromise = new Promise((resolve, reject) => {
     mockProvider.shutdownResolve = resolve;
   });
   return mockProvider;
-};
+}
 
 function run_test() {
   run_next_test();
 }
 
 // Helper to find a particular shutdown blocker's status in the JSON blob
 function findInStatus(aStatus, aName) {
   for (let {name, state} of aStatus.state) {
--- a/toolkit/mozapps/extensions/test/xpcshell/test_provider_unsafe_access_shutdown.js
+++ b/toolkit/mozapps/extensions/test/xpcshell/test_provider_unsafe_access_shutdown.js
@@ -24,17 +24,17 @@ function mockAddonProvider(name) {
     },
 
     get name() {
       return name;
     },
   };
 
   return mockProvider;
-};
+}
 
 function run_test() {
   run_next_test();
 }
 
 add_task(function* unsafeProviderShutdown() {
   let firstProvider = mockAddonProvider("Mock1");
   AddonManagerPrivate.registerProvider(firstProvider);
--- a/toolkit/mozapps/extensions/test/xpcshell/test_provider_unsafe_access_startup.js
+++ b/toolkit/mozapps/extensions/test/xpcshell/test_provider_unsafe_access_startup.js
@@ -23,17 +23,17 @@ function mockAddonProvider(name) {
     },
 
     get name() {
       return name;
     },
   };
 
   return mockProvider;
-};
+}
 
 function run_test() {
   run_next_test();
 }
 
 add_task(function* unsafeProviderStartup() {
   let secondProvider = null;