Bug 1431104 - add lint rule for use of ChromeUtils.import over Cu.import, r?Standard8
MozReview-Commit-ID: 3Up9RSIsTec
--- a/tools/lint/eslint/eslint-plugin-mozilla/lib/index.js
+++ b/tools/lint/eslint/eslint-plugin-mozilla/lib/index.js
@@ -51,16 +51,17 @@ module.exports = {
"no-useless-parameters": require("../lib/rules/no-useless-parameters"),
"no-useless-removeEventListener":
require("../lib/rules/no-useless-removeEventListener"),
"no-useless-run-test":
require("../lib/rules/no-useless-run-test"),
"reject-importGlobalProperties":
require("../lib/rules/reject-importGlobalProperties"),
"reject-some-requires": require("../lib/rules/reject-some-requires"),
+ "use-chromeutils-import": require("../lib/rules/use-chromeutils-import"),
"use-default-preference-values":
require("../lib/rules/use-default-preference-values"),
"use-ownerGlobal": require("../lib/rules/use-ownerGlobal"),
"use-services": require("../lib/rules/use-services"),
"var-only-at-top-level": require("../lib/rules/var-only-at-top-level")
},
rulesConfig: {
"avoid-Date-timing": "off",
@@ -77,14 +78,15 @@ module.exports = {
"no-single-arg-cu-import": "off",
"no-import-into-var-and-global": "off",
"no-task": "off",
"no-useless-parameters": "off",
"no-useless-run-test": "off",
"no-useless-removeEventListener": "off",
"reject-importGlobalProperties": "off",
"reject-some-requires": "off",
+ "use-chromeutils-import": "off",
"use-default-preference-values": "off",
"use-ownerGlobal": "off",
"use-services": "off",
"var-only-at-top-level": "off"
}
};
new file mode 100644
--- /dev/null
+++ b/tools/lint/eslint/eslint-plugin-mozilla/lib/rules/use-chromeutils-import.js
@@ -0,0 +1,47 @@
+/**
+ * @fileoverview Require use of ChromeUtils.import instead of Cu/Components.utils.import
+ *
+ * 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/.
+ */
+
+"use strict";
+
+// -----------------------------------------------------------------------------
+// Rule Definition
+// -----------------------------------------------------------------------------
+module.exports = function(context) {
+ // ---------------------------------------------------------------------------
+ // Public
+ // --------------------------------------------------------------------------
+ return {
+ CallExpression(node) {
+ if (!node.callee ||
+ !node.callee.property ||
+ node.callee.property.type != "Identifier" ||
+ node.callee.property.name != "import") {
+ return;
+ }
+
+ if (node.callee.object.type == "Identifier") {
+ if (node.callee.object.name != "Cu") {
+ return;
+ }
+ } else if (node.callee.object.type == "MemberExpression") {
+ if (node.callee.object.object.type != "Identifier" ||
+ node.callee.object.object.name != "Components" ||
+ node.callee.object.property.type != "Identifier" ||
+ node.callee.object.property.name != "utils") {
+ return;
+ }
+ } else {
+ return;
+ }
+
+ context.report(node,
+ `Use ChromeUtils.import rather than Components.utils.import().`);
+ }
+ };
+};
+