1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- /**
- * @fileoverview Reject use of Cu.importGlobalProperties
- *
- * 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";
- const path = require("path");
- const privilegedGlobals = Object.keys(
- require("../environments/privileged.js").globals
- );
- module.exports = {
- meta: {
- docs: {
- url:
- "https://firefox-source-docs.mozilla.org/code-quality/lint/linters/eslint-plugin-mozilla/reject-importGlobalProperties.html",
- },
- messages: {
- unexpectedCall: "Unexpected call to Cu.importGlobalProperties",
- unexpectedCallCuWebIdl:
- "Unnecessary call to Cu.importGlobalProperties for {{name}} (webidl names are automatically imported)",
- unexpectedCallXPCOMWebIdl:
- "Unnecessary call to XPCOMUtils.defineLazyGlobalGetters for {{name}} (webidl names are automatically imported)",
- },
- schema: [
- {
- enum: ["everything", "allownonwebidl"],
- },
- ],
- type: "problem",
- },
- create(context) {
- return {
- CallExpression(node) {
- if (
- node.callee.type !== "MemberExpression" ||
- // TODO Bug 1501127: sjs files have their own sandbox, and do not inherit
- // the Window backstage pass directly.
- path.extname(context.getFilename()) == ".sjs"
- ) {
- return;
- }
- let memexp = node.callee;
- if (
- memexp.object.type === "Identifier" &&
- // Only Cu, not Components.utils as `use-cc-etc` handles this for us.
- memexp.object.name === "Cu" &&
- memexp.property.type === "Identifier" &&
- memexp.property.name === "importGlobalProperties"
- ) {
- if (context.options.includes("allownonwebidl")) {
- for (let element of node.arguments[0].elements) {
- if (privilegedGlobals.includes(element.value)) {
- context.report({
- node,
- messageId: "unexpectedCallCuWebIdl",
- data: { name: element.value },
- });
- }
- }
- } else {
- context.report({ node, messageId: "unexpectedCall" });
- }
- }
- if (
- memexp.object.type === "Identifier" &&
- memexp.object.name === "XPCOMUtils" &&
- memexp.property.type === "Identifier" &&
- memexp.property.name === "defineLazyGlobalGetters" &&
- node.arguments.length >= 2
- ) {
- if (context.options.includes("allownonwebidl")) {
- for (let element of node.arguments[1].elements) {
- if (privilegedGlobals.includes(element.value)) {
- context.report({
- node,
- messageId: "unexpectedCallXPCOMWebIdl",
- data: { name: element.value },
- });
- }
- }
- } else {
- context.report({ node, messageId: "unexpectedCall" });
- }
- }
- },
- };
- },
- };
|