12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- /**
- * @fileoverview Reject run_test() definitions where they aren't necessary.
- *
- * 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";
- module.exports = {
- meta: {
- docs: {
- url:
- "https://firefox-source-docs.mozilla.org/code-quality/lint/linters/eslint-plugin-mozilla/no-useless-run-test.html",
- },
- fixable: "code",
- type: "suggestion",
- },
- create(context) {
- return {
- "Program > FunctionDeclaration": function(node) {
- if (
- node.id.name === "run_test" &&
- node.body.type === "BlockStatement" &&
- node.body.body.length === 1 &&
- node.body.body[0].type === "ExpressionStatement" &&
- node.body.body[0].expression.type === "CallExpression" &&
- node.body.body[0].expression.callee.name === "run_next_test"
- ) {
- context.report({
- node,
- fix: fixer => {
- let sourceCode = context.getSourceCode();
- let startNode;
- if (sourceCode.getCommentsBefore) {
- // ESLint 4 has getCommentsBefore.
- startNode = sourceCode.getCommentsBefore(node);
- } else if (node && node.body && node.leadingComments) {
- // This is for ESLint 3.
- startNode = node.leadingComments;
- }
- // If we have comments, we want the start node to be the comments,
- // rather than the token before the comments, so that we don't
- // remove the comments - for run_test, these are likely to be useful
- // information about the test.
- if (startNode?.length) {
- startNode = startNode[startNode.length - 1];
- } else {
- startNode = sourceCode.getTokenBefore(node);
- }
- return fixer.removeRange([
- // If there's no startNode, we fall back to zero, i.e. start of
- // file.
- startNode ? startNode.range[1] + 1 : 0,
- // We know the function is a block and it'll end with }. Normally
- // there's a new line after that, so just advance past it. This
- // may be slightly not dodgy in some cases, but covers the existing
- // cases.
- node.range[1] + 1,
- ]);
- },
- message:
- "Useless run_test function - only contains run_next_test; whole function can be removed",
- });
- }
- },
- };
- },
- };
|