123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.RULE_NAME = void 0;
- const utils_1 = require("@typescript-eslint/utils");
- const create_testing_library_rule_1 = require("../create-testing-library-rule");
- const node_utils_1 = require("../node-utils");
- const utils_2 = require("../utils");
- exports.RULE_NAME = 'no-debugging-utils';
- exports.default = (0, create_testing_library_rule_1.createTestingLibraryRule)({
- name: exports.RULE_NAME,
- meta: {
- type: 'problem',
- docs: {
- description: 'Disallow the use of debugging utilities like `debug`',
- recommendedConfig: {
- dom: false,
- angular: 'error',
- react: 'error',
- vue: 'error',
- marko: 'error',
- },
- },
- messages: {
- noDebug: 'Unexpected debug statement',
- },
- schema: [
- {
- type: 'object',
- properties: {
- utilsToCheckFor: {
- type: 'object',
- properties: utils_2.DEBUG_UTILS.reduce((obj, name) => (Object.assign({ [name]: { type: 'boolean' } }, obj)), {}),
- additionalProperties: false,
- },
- },
- additionalProperties: false,
- },
- ],
- },
- defaultOptions: [
- { utilsToCheckFor: { debug: true, logTestingPlaygroundURL: true } },
- ],
- create(context, [{ utilsToCheckFor = {} }], helpers) {
- const suspiciousDebugVariableNames = [];
- const suspiciousReferenceNodes = [];
- const renderWrapperNames = [];
- const builtInConsoleNodes = [];
- const utilsToReport = Object.entries(utilsToCheckFor)
- .filter(([, shouldCheckFor]) => shouldCheckFor)
- .map(([name]) => name);
- function detectRenderWrapper(node) {
- const innerFunction = (0, node_utils_1.getInnermostReturningFunction)(context, node);
- if (innerFunction) {
- renderWrapperNames.push((0, node_utils_1.getFunctionName)(innerFunction));
- }
- }
- return {
- VariableDeclarator(node) {
- if (!node.init) {
- return;
- }
- const initIdentifierNode = (0, node_utils_1.getDeepestIdentifierNode)(node.init);
- if (!initIdentifierNode) {
- return;
- }
- if (initIdentifierNode.name === 'console') {
- builtInConsoleNodes.push(node);
- return;
- }
- const isRenderWrapperVariableDeclarator = renderWrapperNames.includes(initIdentifierNode.name);
- if (!helpers.isRenderVariableDeclarator(node) &&
- !isRenderWrapperVariableDeclarator) {
- return;
- }
- if ((0, node_utils_1.isObjectPattern)(node.id)) {
- for (const property of node.id.properties) {
- if ((0, node_utils_1.isProperty)(property) &&
- utils_1.ASTUtils.isIdentifier(property.key) &&
- utilsToReport.includes(property.key.name)) {
- const identifierNode = (0, node_utils_1.getDeepestIdentifierNode)(property.value);
- if (identifierNode) {
- suspiciousDebugVariableNames.push(identifierNode.name);
- }
- }
- }
- }
- if (utils_1.ASTUtils.isIdentifier(node.id)) {
- suspiciousReferenceNodes.push(node.id);
- }
- },
- CallExpression(node) {
- const callExpressionIdentifier = (0, node_utils_1.getDeepestIdentifierNode)(node);
- if (!callExpressionIdentifier) {
- return;
- }
- if (helpers.isRenderUtil(callExpressionIdentifier)) {
- detectRenderWrapper(callExpressionIdentifier);
- }
- const referenceNode = (0, node_utils_1.getReferenceNode)(node);
- const referenceIdentifier = (0, node_utils_1.getPropertyIdentifierNode)(referenceNode);
- if (!referenceIdentifier) {
- return;
- }
- const isDebugUtil = helpers.isDebugUtil(callExpressionIdentifier, utilsToReport);
- const isDeclaredDebugVariable = suspiciousDebugVariableNames.includes(callExpressionIdentifier.name);
- const isChainedReferenceDebug = suspiciousReferenceNodes.some((suspiciousReferenceIdentifier) => {
- return (utilsToReport.includes(callExpressionIdentifier.name) &&
- suspiciousReferenceIdentifier.name === referenceIdentifier.name);
- });
- const isVariableFromBuiltInConsole = builtInConsoleNodes.some((variableDeclarator) => {
- const variables = context.getDeclaredVariables(variableDeclarator);
- return variables.some(({ name }) => name === callExpressionIdentifier.name &&
- (0, node_utils_1.isCallExpression)(callExpressionIdentifier.parent));
- });
- if (!isVariableFromBuiltInConsole &&
- (isDebugUtil || isDeclaredDebugVariable || isChainedReferenceDebug)) {
- context.report({
- node: callExpressionIdentifier,
- messageId: 'noDebug',
- });
- }
- },
- };
- },
- });
|