123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- /**
- * @fileoverview Rule to prevent throwing bare Cr.ERRORs.
- *
- * 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";
- function isCr(object) {
- return object.type === "Identifier" && object.name === "Cr";
- }
- function isComponentsResults(object) {
- return (
- object.type === "MemberExpression" &&
- object.object.type === "Identifier" &&
- object.object.name === "Components" &&
- object.property.type === "Identifier" &&
- object.property.name === "results"
- );
- }
- function isNewError(argument) {
- return (
- argument.type === "NewExpression" &&
- argument.callee.type === "Identifier" &&
- argument.callee.name === "Error" &&
- argument.arguments.length === 1
- );
- }
- function fixT(context, node, argument, fixer) {
- const sourceText = context.getSourceCode().getText(argument);
- return fixer.replaceText(node, `Components.Exception("", ${sourceText})`);
- }
- module.exports = {
- meta: {
- docs: {
- url:
- "https://firefox-source-docs.mozilla.org/code-quality/lint/linters/eslint-plugin-mozilla/no-throw-cr-literal.html",
- },
- fixable: "code",
- messages: {
- bareCR: "Do not throw bare Cr.ERRORs, use Components.Exception instead",
- bareComponentsResults:
- "Do not throw bare Components.results.ERRORs, use Components.Exception instead",
- newErrorCR:
- "Do not pass Cr.ERRORs to new Error(), use Components.Exception instead",
- newErrorComponentsResults:
- "Do not pass Components.results.ERRORs to new Error(), use Components.Exception instead",
- },
- type: "problem",
- },
- create(context) {
- return {
- ThrowStatement(node) {
- if (node.argument.type === "MemberExpression") {
- const fix = fixT.bind(null, context, node.argument, node.argument);
- if (isCr(node.argument.object)) {
- context.report({
- node,
- messageId: "bareCR",
- fix,
- });
- } else if (isComponentsResults(node.argument.object)) {
- context.report({
- node,
- messageId: "bareComponentsResults",
- fix,
- });
- }
- } else if (isNewError(node.argument)) {
- const argument = node.argument.arguments[0];
- if (argument.type === "MemberExpression") {
- const fix = fixT.bind(null, context, node.argument, argument);
- if (isCr(argument.object)) {
- context.report({
- node,
- messageId: "newErrorCR",
- fix,
- });
- } else if (isComponentsResults(argument.object)) {
- context.report({
- node,
- messageId: "newErrorComponentsResults",
- fix,
- });
- }
- }
- }
- },
- };
- },
- };
|