123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- /**
- * 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");
- const callExpressionDefinitions = [
- /^loader\.lazyGetter\((?:globalThis|window), "(\w+)"/,
- /^loader\.lazyServiceGetter\((?:globalThis|window), "(\w+)"/,
- /^loader\.lazyRequireGetter\((?:globalThis|window), "(\w+)"/,
- /^XPCOMUtils\.defineLazyGetter\((?:globalThis|window), "(\w+)"/,
- /^XPCOMUtils\.defineLazyModuleGetter\((?:globalThis|window), "(\w+)"/,
- /^ChromeUtils\.defineModuleGetter\((?:globalThis|window), "(\w+)"/,
- /^XPCOMUtils\.defineLazyPreferenceGetter\((?:globalThis|window), "(\w+)"/,
- /^XPCOMUtils\.defineLazyProxy\((?:globalThis|window), "(\w+)"/,
- /^XPCOMUtils\.defineLazyScriptGetter\((?:globalThis|window), "(\w+)"/,
- /^XPCOMUtils\.defineLazyServiceGetter\((?:globalThis|window), "(\w+)"/,
- /^XPCOMUtils\.defineConstant\((?:globalThis|window), "(\w+)"/,
- /^DevToolsUtils\.defineLazyModuleGetter\((?:globalThis|window), "(\w+)"/,
- /^DevToolsUtils\.defineLazyGetter\((?:globalThis|window), "(\w+)"/,
- /^Object\.defineProperty\((?:globalThis|window), "(\w+)"/,
- /^Reflect\.defineProperty\((?:globalThis|window), "(\w+)"/,
- /^this\.__defineGetter__\("(\w+)"/,
- ];
- const callExpressionMultiDefinitions = [
- "XPCOMUtils.defineLazyGlobalGetters(window,",
- "XPCOMUtils.defineLazyGlobalGetters(globalThis,",
- "XPCOMUtils.defineLazyModuleGetters(window,",
- "XPCOMUtils.defineLazyModuleGetters(globalThis,",
- "XPCOMUtils.defineLazyServiceGetters(window,",
- "XPCOMUtils.defineLazyServiceGetters(globalThis,",
- "ChromeUtils.defineESModuleGetters(window,",
- "ChromeUtils.defineESModuleGetters(globalThis,",
- "loader.lazyRequireGetter(window,",
- "loader.lazyRequireGetter(globalThis,",
- ];
- module.exports = {
- meta: {
- docs: {
- url:
- "https://firefox-source-docs.mozilla.org/code-quality/lint/linters/eslint-plugin-mozilla/reject-lazy-imports-into-globals.html",
- },
- messages: {
- rejectLazyImportsIntoGlobals:
- "Non-system modules should not import into globalThis nor window. Prefer a lazy object holder",
- },
- type: "suggestion",
- },
- create(context) {
- return {
- CallExpression(node) {
- let source;
- try {
- source = helpers.getASTSource(node);
- } catch (e) {
- return;
- }
- if (
- callExpressionDefinitions.some(expr => source.match(expr)) ||
- callExpressionMultiDefinitions.some(expr => source.startsWith(expr))
- ) {
- context.report({ node, messageId: "rejectLazyImportsIntoGlobals" });
- }
- },
- };
- },
- };
|