| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 | /** * @fileoverview Ensures that Services uses have valid property names. * * 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");module.exports = {  meta: {    docs: {      url:        "https://firefox-source-docs.mozilla.org/code-quality/lint/linters/eslint-plugin-mozilla/valid-services.html",    },    type: "problem",  },  create(context) {    let servicesInterfaceMap = helpers.servicesData;    let serviceAliases = new Set([      ...Object.values(servicesInterfaceMap),      // This is defined only for Android, so most builds won't pick it up.      "androidBridge",      // These are defined without interfaces and hence are not in the services map.      "cpmm",      "crashmanager",      "mm",      "ppmm",      // The new xulStore also does not have an interface.      "xulStore",    ]);    return {      MemberExpression(node) {        if (node.computed || node.object.type !== "Identifier") {          return;        }        let alias;        if (node.object.name == "Services") {          alias = node.property.name;        } else if (          node.property.name == "Services" &&          node.parent.type == "MemberExpression"        ) {          alias = node.parent.property.name;        } else {          return;        }        if (!serviceAliases.has(alias)) {          context.report(node, `Unknown Services member property ${alias}`);        }      },    };  },};
 |