| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 | /** * @fileoverview Require use of static imports where possible. * * 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 helpers = require("../helpers");function isIdentifier(node, id) {  return node && node.type === "Identifier" && node.name === id;}module.exports = {  meta: {    docs: {      url:        "https://firefox-source-docs.mozilla.org/code-quality/lint/linters/eslint-plugin-mozilla/use-static-import.html",    },    fixable: "code",    messages: {      useStaticImport:        "Please use static import instead of ChromeUtils.importESModule",    },    type: "suggestion",  },  create(context) {    return {      VariableDeclarator(node) {        if (          node.init?.type != "CallExpression" ||          node.init?.callee?.type != "MemberExpression" ||          !context.getFilename().endsWith(".sys.mjs") ||          !helpers.isTopLevel(context.getAncestors())        ) {          return;        }        let callee = node.init.callee;        if (          isIdentifier(callee.object, "ChromeUtils") &&          isIdentifier(callee.property, "importESModule") &&          callee.parent.arguments.length == 1        ) {          let sourceCode = context.getSourceCode();          let importItemSource;          if (node.id.type != "ObjectPattern") {            importItemSource = sourceCode.getText(node.id);          } else {            importItemSource = "{ ";            let initial = true;            for (let property of node.id.properties) {              if (!initial) {                importItemSource += ", ";              }              initial = false;              if (property.key.name == property.value.name) {                importItemSource += property.key.name;              } else {                importItemSource += `${property.key.name} as ${property.value.name}`;              }            }            importItemSource += " }";          }          context.report({            node: node.parent,            messageId: "useStaticImport",            fix(fixer) {              return fixer.replaceText(                node.parent,                `import ${importItemSource} from ${sourceCode.getText(                  callee.parent.arguments[0]                )}`              );            },          });        }      },    };  },};
 |