source: frontend/node_modules/eslint-plugin-testing-library/rules/no-render-in-setup.js

Last change on this file was 9af201e, checked in by MBK <marija.karapandzova@…>, 13 days ago

Fix frontend appearance

  • Property mode set to 100644
File size: 3.5 KB
Line 
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3exports.findClosestBeforeHook = exports.RULE_NAME = void 0;
4const utils_1 = require("@typescript-eslint/utils");
5const create_testing_library_rule_1 = require("../create-testing-library-rule");
6const node_utils_1 = require("../node-utils");
7const utils_2 = require("../utils");
8exports.RULE_NAME = 'no-render-in-setup';
9function findClosestBeforeHook(node, testingFrameworkSetupHooksToFilter) {
10 if (node === null) {
11 return null;
12 }
13 if ((0, node_utils_1.isCallExpression)(node) &&
14 utils_1.ASTUtils.isIdentifier(node.callee) &&
15 testingFrameworkSetupHooksToFilter.includes(node.callee.name)) {
16 return node.callee;
17 }
18 if (node.parent) {
19 return findClosestBeforeHook(node.parent, testingFrameworkSetupHooksToFilter);
20 }
21 return null;
22}
23exports.findClosestBeforeHook = findClosestBeforeHook;
24exports.default = (0, create_testing_library_rule_1.createTestingLibraryRule)({
25 name: exports.RULE_NAME,
26 meta: {
27 type: 'problem',
28 docs: {
29 description: 'Disallow the use of `render` in testing frameworks setup functions',
30 recommendedConfig: {
31 dom: false,
32 angular: 'error',
33 react: 'error',
34 vue: 'error',
35 marko: 'error',
36 },
37 },
38 messages: {
39 noRenderInSetup: 'Forbidden usage of `render` within testing framework `{{ name }}` setup',
40 },
41 schema: [
42 {
43 type: 'object',
44 properties: {
45 allowTestingFrameworkSetupHook: {
46 enum: utils_2.TESTING_FRAMEWORK_SETUP_HOOKS,
47 },
48 },
49 },
50 ],
51 },
52 defaultOptions: [
53 {
54 allowTestingFrameworkSetupHook: '',
55 },
56 ],
57 create(context, [{ allowTestingFrameworkSetupHook }], helpers) {
58 const renderWrapperNames = [];
59 function detectRenderWrapper(node) {
60 const innerFunction = (0, node_utils_1.getInnermostReturningFunction)(context, node);
61 if (innerFunction) {
62 renderWrapperNames.push((0, node_utils_1.getFunctionName)(innerFunction));
63 }
64 }
65 return {
66 CallExpression(node) {
67 const testingFrameworkSetupHooksToFilter = utils_2.TESTING_FRAMEWORK_SETUP_HOOKS.filter((hook) => hook !== allowTestingFrameworkSetupHook);
68 const callExpressionIdentifier = (0, node_utils_1.getDeepestIdentifierNode)(node);
69 if (!callExpressionIdentifier) {
70 return;
71 }
72 const isRenderIdentifier = helpers.isRenderUtil(callExpressionIdentifier);
73 if (isRenderIdentifier) {
74 detectRenderWrapper(callExpressionIdentifier);
75 }
76 if (!isRenderIdentifier &&
77 !renderWrapperNames.includes(callExpressionIdentifier.name)) {
78 return;
79 }
80 const beforeHook = findClosestBeforeHook(node, testingFrameworkSetupHooksToFilter);
81 if (!beforeHook) {
82 return;
83 }
84 context.report({
85 node: callExpressionIdentifier,
86 messageId: 'noRenderInSetup',
87 data: {
88 name: beforeHook.name,
89 },
90 });
91 },
92 };
93 },
94});
Note: See TracBrowser for help on using the repository browser.