eslint-plugin-jest 27.1.2 → 27.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (112) hide show
  1. package/README.md +81 -80
  2. package/docs/rules/consistent-test-it.md +4 -11
  3. package/docs/rules/expect-expect.md +3 -4
  4. package/docs/rules/max-expects.md +1 -5
  5. package/docs/rules/max-nested-describe.md +1 -5
  6. package/docs/rules/no-alias-methods.md +8 -10
  7. package/docs/rules/no-commented-out-tests.md +3 -4
  8. package/docs/rules/no-conditional-expect.md +4 -5
  9. package/docs/rules/no-conditional-in-test.md +1 -5
  10. package/docs/rules/no-deprecated-functions.md +5 -7
  11. package/docs/rules/no-disabled-tests.md +3 -4
  12. package/docs/rules/no-done-callback.md +6 -8
  13. package/docs/rules/no-duplicate-hooks.md +1 -5
  14. package/docs/rules/no-export.md +3 -4
  15. package/docs/rules/no-focused-tests.md +5 -7
  16. package/docs/rules/no-hooks.md +1 -5
  17. package/docs/rules/no-identical-title.md +3 -4
  18. package/docs/rules/no-if.md +2 -2
  19. package/docs/rules/no-interpolation-in-snapshots.md +3 -4
  20. package/docs/rules/no-jasmine-globals.md +6 -8
  21. package/docs/rules/no-large-snapshots.md +2 -6
  22. package/docs/rules/no-mocks-import.md +3 -4
  23. package/docs/rules/no-restricted-jest-methods.md +1 -5
  24. package/docs/rules/no-restricted-matchers.md +1 -5
  25. package/docs/rules/no-standalone-expect.md +3 -4
  26. package/docs/rules/no-test-prefixes.md +6 -8
  27. package/docs/rules/no-test-return-statement.md +1 -5
  28. package/docs/rules/prefer-called-with.md +1 -5
  29. package/docs/rules/prefer-comparison-matcher.md +3 -8
  30. package/docs/rules/prefer-each.md +1 -5
  31. package/docs/rules/prefer-equality-matcher.md +3 -8
  32. package/docs/rules/prefer-expect-assertions.md +3 -10
  33. package/docs/rules/prefer-expect-resolves.md +3 -8
  34. package/docs/rules/prefer-hooks-in-order.md +1 -5
  35. package/docs/rules/prefer-hooks-on-top.md +1 -5
  36. package/docs/rules/prefer-lowercase-title.md +3 -8
  37. package/docs/rules/prefer-mock-promise-shorthand.md +3 -8
  38. package/docs/rules/prefer-snapshot-hint.md +1 -5
  39. package/docs/rules/prefer-spy-on.md +3 -10
  40. package/docs/rules/prefer-strict-equal.md +3 -10
  41. package/docs/rules/prefer-to-be.md +5 -7
  42. package/docs/rules/prefer-to-contain.md +5 -9
  43. package/docs/rules/prefer-to-have-length.md +5 -9
  44. package/docs/rules/prefer-todo.md +3 -10
  45. package/docs/rules/require-hook.md +1 -5
  46. package/docs/rules/require-to-throw-message.md +1 -7
  47. package/docs/rules/require-top-level-describe.md +1 -5
  48. package/docs/rules/unbound-method.md +2 -4
  49. package/docs/rules/valid-describe-callback.md +3 -4
  50. package/docs/rules/valid-expect-in-promise.md +4 -5
  51. package/docs/rules/valid-expect.md +3 -6
  52. package/docs/rules/valid-title.md +5 -7
  53. package/lib/index.js +8 -16
  54. package/lib/processors/snapshot-processor.js +3 -5
  55. package/lib/rules/consistent-test-it.js +1 -19
  56. package/lib/rules/expect-expect.js +0 -15
  57. package/lib/rules/max-expects.js +0 -16
  58. package/lib/rules/max-nested-describe.js +0 -13
  59. package/lib/rules/no-alias-methods.js +0 -9
  60. package/lib/rules/no-commented-out-tests.js +0 -10
  61. package/lib/rules/no-conditional-expect.js +1 -20
  62. package/lib/rules/no-conditional-in-test.js +0 -9
  63. package/lib/rules/no-deprecated-functions.js +2 -18
  64. package/lib/rules/no-disabled-tests.js +2 -18
  65. package/lib/rules/no-done-callback.js +2 -31
  66. package/lib/rules/no-duplicate-hooks.js +0 -12
  67. package/lib/rules/no-export.js +0 -12
  68. package/lib/rules/no-focused-tests.js +0 -15
  69. package/lib/rules/no-hooks.js +0 -7
  70. package/lib/rules/no-identical-title.js +0 -19
  71. package/lib/rules/no-if.js +0 -24
  72. package/lib/rules/no-interpolation-in-snapshots.js +0 -9
  73. package/lib/rules/no-jasmine-globals.js +0 -22
  74. package/lib/rules/no-large-snapshots.js +3 -21
  75. package/lib/rules/no-mocks-import.js +0 -12
  76. package/lib/rules/no-restricted-jest-methods.js +1 -11
  77. package/lib/rules/no-restricted-matchers.js +0 -11
  78. package/lib/rules/no-standalone-expect.js +7 -33
  79. package/lib/rules/no-test-prefixes.js +1 -13
  80. package/lib/rules/no-test-return-statement.js +0 -12
  81. package/lib/rules/prefer-called-with.js +0 -10
  82. package/lib/rules/prefer-comparison-matcher.js +8 -33
  83. package/lib/rules/prefer-each.js +0 -18
  84. package/lib/rules/prefer-equality-matcher.js +11 -23
  85. package/lib/rules/prefer-expect-assertions.js +4 -51
  86. package/lib/rules/prefer-expect-resolves.js +0 -12
  87. package/lib/rules/prefer-hooks-in-order.js +2 -16
  88. package/lib/rules/prefer-hooks-on-top.js +0 -9
  89. package/lib/rules/prefer-lowercase-title.js +0 -23
  90. package/lib/rules/prefer-mock-promise-shorthand.js +5 -26
  91. package/lib/rules/prefer-snapshot-hint.js +7 -31
  92. package/lib/rules/prefer-spy-on.js +0 -17
  93. package/lib/rules/prefer-strict-equal.js +0 -9
  94. package/lib/rules/prefer-to-be.js +1 -30
  95. package/lib/rules/prefer-to-contain.js +11 -21
  96. package/lib/rules/prefer-to-have-length.js +4 -16
  97. package/lib/rules/prefer-todo.js +2 -18
  98. package/lib/rules/require-hook.js +0 -22
  99. package/lib/rules/require-to-throw-message.js +0 -9
  100. package/lib/rules/require-top-level-describe.js +0 -15
  101. package/lib/rules/unbound-method.js +2 -21
  102. package/lib/rules/utils/accessors.js +6 -18
  103. package/lib/rules/utils/detectJestVersion.js +2 -7
  104. package/lib/rules/utils/followTypeAssertionChain.js +0 -4
  105. package/lib/rules/utils/index.js +0 -10
  106. package/lib/rules/utils/misc.js +2 -46
  107. package/lib/rules/utils/parseJestFnCall.js +62 -118
  108. package/lib/rules/valid-describe-callback.js +0 -17
  109. package/lib/rules/valid-expect-in-promise.js +27 -94
  110. package/lib/rules/valid-expect.js +5 -48
  111. package/lib/rules/valid-title.js +0 -33
  112. package/package.json +3 -2
@@ -4,35 +4,27 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
-
8
7
  var _utils = require("@typescript-eslint/utils");
9
-
10
8
  var _utils2 = require("./utils");
11
-
12
9
  const findCallbackArg = (node, isJestEach, context) => {
13
10
  if (isJestEach) {
14
11
  return node.arguments[1];
15
12
  }
16
-
17
13
  const jestFnCall = (0, _utils2.parseJestFnCall)(node, context);
18
-
19
14
  if ((jestFnCall === null || jestFnCall === void 0 ? void 0 : jestFnCall.type) === 'hook' && node.arguments.length >= 1) {
20
15
  return node.arguments[0];
21
16
  }
22
-
23
17
  if ((jestFnCall === null || jestFnCall === void 0 ? void 0 : jestFnCall.type) === 'test' && node.arguments.length >= 2) {
24
18
  return node.arguments[1];
25
19
  }
26
-
27
20
  return null;
28
21
  };
29
-
30
22
  var _default = (0, _utils2.createRule)({
31
23
  name: __filename,
32
24
  meta: {
33
25
  docs: {
34
26
  category: 'Best Practices',
35
- description: 'Avoid using a callback in asynchronous tests and hooks',
27
+ description: 'Disallow using a callback in asynchronous tests and hooks',
36
28
  recommended: 'error'
37
29
  },
38
30
  messages: {
@@ -45,31 +37,24 @@ var _default = (0, _utils2.createRule)({
45
37
  hasSuggestions: true
46
38
  },
47
39
  defaultOptions: [],
48
-
49
40
  create(context) {
50
41
  return {
51
42
  CallExpression(node) {
52
43
  var _getNodeName;
53
-
54
44
  // done is the second argument for it.each, not the first
55
45
  const isJestEach = ((_getNodeName = (0, _utils2.getNodeName)(node.callee)) === null || _getNodeName === void 0 ? void 0 : _getNodeName.endsWith('.each')) ?? false;
56
-
57
46
  if (isJestEach && node.callee.type !== _utils.AST_NODE_TYPES.TaggedTemplateExpression) {
58
47
  // isJestEach but not a TaggedTemplateExpression, so this must be
59
48
  // the `jest.each([])()` syntax which this rule doesn't support due
60
49
  // to its complexity (see jest-community/eslint-plugin-jest#710)
61
50
  return;
62
51
  }
63
-
64
52
  const callback = findCallbackArg(node, isJestEach, context);
65
53
  const callbackArgIndex = Number(isJestEach);
66
-
67
54
  if (!callback || !(0, _utils2.isFunction)(callback) || callback.params.length !== 1 + callbackArgIndex) {
68
55
  return;
69
56
  }
70
-
71
57
  const argument = callback.params[callbackArgIndex];
72
-
73
58
  if (argument.type !== _utils.AST_NODE_TYPES.Identifier) {
74
59
  context.report({
75
60
  node: argument,
@@ -77,7 +62,6 @@ var _default = (0, _utils2.createRule)({
77
62
  });
78
63
  return;
79
64
  }
80
-
81
65
  if (callback.async) {
82
66
  context.report({
83
67
  node: argument,
@@ -85,7 +69,6 @@ var _default = (0, _utils2.createRule)({
85
69
  });
86
70
  return;
87
71
  }
88
-
89
72
  context.report({
90
73
  node: argument,
91
74
  messageId: 'noDoneCallback',
@@ -94,7 +77,6 @@ var _default = (0, _utils2.createRule)({
94
77
  data: {
95
78
  callback: argument.name
96
79
  },
97
-
98
80
  fix(fixer) {
99
81
  const {
100
82
  body
@@ -104,46 +86,35 @@ var _default = (0, _utils2.createRule)({
104
86
  const lastBodyToken = sourceCode.getLastToken(body);
105
87
  const tokenBeforeArgument = sourceCode.getTokenBefore(argument);
106
88
  const tokenAfterArgument = sourceCode.getTokenAfter(argument);
107
- /* istanbul ignore if */
108
89
 
90
+ /* istanbul ignore if */
109
91
  if (!firstBodyToken || !lastBodyToken || !tokenBeforeArgument || !tokenAfterArgument) {
110
92
  throw new Error(`Unexpected null when attempting to fix ${context.getFilename()} - please file a github issue at https://github.com/jest-community/eslint-plugin-jest`);
111
93
  }
112
-
113
94
  const argumentInParens = tokenBeforeArgument.value === '(' && tokenAfterArgument.value === ')';
114
95
  let argumentFix = fixer.replaceText(argument, '()');
115
-
116
96
  if (argumentInParens) {
117
97
  argumentFix = fixer.remove(argument);
118
98
  }
119
-
120
99
  let newCallback = argument.name;
121
-
122
100
  if (argumentInParens) {
123
101
  newCallback = `(${newCallback})`;
124
102
  }
125
-
126
103
  let beforeReplacement = `new Promise(${newCallback} => `;
127
104
  let afterReplacement = ')';
128
105
  let replaceBefore = true;
129
-
130
106
  if (body.type === _utils.AST_NODE_TYPES.BlockStatement) {
131
107
  const keyword = 'return';
132
108
  beforeReplacement = `${keyword} ${beforeReplacement}{`;
133
109
  afterReplacement += '}';
134
110
  replaceBefore = false;
135
111
  }
136
-
137
112
  return [argumentFix, replaceBefore ? fixer.insertTextBefore(firstBodyToken, beforeReplacement) : fixer.insertTextAfter(firstBodyToken, beforeReplacement), fixer.insertTextAfter(lastBodyToken, afterReplacement)];
138
113
  }
139
-
140
114
  }]
141
115
  });
142
116
  }
143
-
144
117
  };
145
118
  }
146
-
147
119
  });
148
-
149
120
  exports.default = _default;
@@ -4,9 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
-
8
7
  var _utils = require("./utils");
9
-
10
8
  var _default = (0, _utils.createRule)({
11
9
  name: __filename,
12
10
  meta: {
@@ -22,27 +20,21 @@ var _default = (0, _utils.createRule)({
22
20
  type: 'suggestion'
23
21
  },
24
22
  defaultOptions: [],
25
-
26
23
  create(context) {
27
24
  const hookContexts = [{}];
28
25
  return {
29
26
  CallExpression(node) {
30
27
  var _jestFnCall$name;
31
-
32
28
  const jestFnCall = (0, _utils.parseJestFnCall)(node, context);
33
-
34
29
  if ((jestFnCall === null || jestFnCall === void 0 ? void 0 : jestFnCall.type) === 'describe') {
35
30
  hookContexts.push({});
36
31
  }
37
-
38
32
  if ((jestFnCall === null || jestFnCall === void 0 ? void 0 : jestFnCall.type) !== 'hook') {
39
33
  return;
40
34
  }
41
-
42
35
  const currentLayer = hookContexts[hookContexts.length - 1];
43
36
  currentLayer[_jestFnCall$name = jestFnCall.name] || (currentLayer[_jestFnCall$name] = 0);
44
37
  currentLayer[jestFnCall.name] += 1;
45
-
46
38
  if (currentLayer[jestFnCall.name] > 1) {
47
39
  context.report({
48
40
  messageId: 'noDuplicateHook',
@@ -53,16 +45,12 @@ var _default = (0, _utils.createRule)({
53
45
  });
54
46
  }
55
47
  },
56
-
57
48
  'CallExpression:exit'(node) {
58
49
  if ((0, _utils.isTypeOfJestFnCall)(node, context, ['describe'])) {
59
50
  hookContexts.pop();
60
51
  }
61
52
  }
62
-
63
53
  };
64
54
  }
65
-
66
55
  });
67
-
68
56
  exports.default = _default;
@@ -4,11 +4,8 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
-
8
7
  var _utils = require("@typescript-eslint/utils");
9
-
10
8
  var _utils2 = require("./utils");
11
-
12
9
  var _default = (0, _utils2.createRule)({
13
10
  name: __filename,
14
11
  meta: {
@@ -24,7 +21,6 @@ var _default = (0, _utils2.createRule)({
24
21
  schema: []
25
22
  },
26
23
  defaultOptions: [],
27
-
28
24
  create(context) {
29
25
  const exportNodes = [];
30
26
  let hasTestCase = false;
@@ -39,38 +35,30 @@ var _default = (0, _utils2.createRule)({
39
35
  }
40
36
  }
41
37
  },
42
-
43
38
  CallExpression(node) {
44
39
  if ((0, _utils2.isTypeOfJestFnCall)(node, context, ['test'])) {
45
40
  hasTestCase = true;
46
41
  }
47
42
  },
48
-
49
43
  'ExportNamedDeclaration, ExportDefaultDeclaration'(node) {
50
44
  exportNodes.push(node);
51
45
  },
52
-
53
46
  'AssignmentExpression > MemberExpression'(node) {
54
47
  let {
55
48
  object,
56
49
  property
57
50
  } = node;
58
-
59
51
  if (object.type === _utils.AST_NODE_TYPES.MemberExpression) {
60
52
  ({
61
53
  object,
62
54
  property
63
55
  } = object);
64
56
  }
65
-
66
57
  if ('name' in object && object.name === 'module' && property.type === _utils.AST_NODE_TYPES.Identifier && /^exports?$/u.test(property.name)) {
67
58
  exportNodes.push(node);
68
59
  }
69
60
  }
70
-
71
61
  };
72
62
  }
73
-
74
63
  });
75
-
76
64
  exports.default = _default;
@@ -4,11 +4,8 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
-
8
7
  var _utils = require("@typescript-eslint/utils");
9
-
10
8
  var _utils2 = require("./utils");
11
-
12
9
  var _default = (0, _utils2.createRule)({
13
10
  name: __filename,
14
11
  meta: {
@@ -26,43 +23,34 @@ var _default = (0, _utils2.createRule)({
26
23
  hasSuggestions: true
27
24
  },
28
25
  defaultOptions: [],
29
-
30
26
  create(context) {
31
27
  return {
32
28
  CallExpression(node) {
33
29
  const jestFnCall = (0, _utils2.parseJestFnCall)(node, context);
34
-
35
30
  if ((jestFnCall === null || jestFnCall === void 0 ? void 0 : jestFnCall.type) !== 'test' && (jestFnCall === null || jestFnCall === void 0 ? void 0 : jestFnCall.type) !== 'describe') {
36
31
  return;
37
32
  }
38
-
39
33
  if (jestFnCall.name.startsWith('f')) {
40
34
  context.report({
41
35
  messageId: 'focusedTest',
42
36
  node,
43
37
  suggest: [{
44
38
  messageId: 'suggestRemoveFocus',
45
-
46
39
  fix(fixer) {
47
40
  // don't apply the fixer if we're an aliased import
48
41
  if (jestFnCall.head.type === 'import' && jestFnCall.name !== jestFnCall.head.local) {
49
42
  return null;
50
43
  }
51
-
52
44
  return fixer.removeRange([node.range[0], node.range[0] + 1]);
53
45
  }
54
-
55
46
  }]
56
47
  });
57
48
  return;
58
49
  }
59
-
60
50
  const onlyNode = jestFnCall.members.find(s => (0, _utils2.getAccessorValue)(s) === 'only');
61
-
62
51
  if (!onlyNode) {
63
52
  return;
64
53
  }
65
-
66
54
  context.report({
67
55
  messageId: 'focusedTest',
68
56
  node: onlyNode,
@@ -72,10 +60,7 @@ var _default = (0, _utils2.createRule)({
72
60
  }]
73
61
  });
74
62
  }
75
-
76
63
  };
77
64
  }
78
-
79
65
  });
80
-
81
66
  exports.default = _default;
@@ -4,9 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
-
8
7
  var _utils = require("./utils");
9
-
10
8
  var _default = (0, _utils.createRule)({
11
9
  name: __filename,
12
10
  meta: {
@@ -33,14 +31,12 @@ var _default = (0, _utils.createRule)({
33
31
  defaultOptions: [{
34
32
  allow: []
35
33
  }],
36
-
37
34
  create(context, [{
38
35
  allow = []
39
36
  }]) {
40
37
  return {
41
38
  CallExpression(node) {
42
39
  const jestFnCall = (0, _utils.parseJestFnCall)(node, context);
43
-
44
40
  if ((jestFnCall === null || jestFnCall === void 0 ? void 0 : jestFnCall.type) === 'hook' && !allow.includes(jestFnCall.name)) {
45
41
  context.report({
46
42
  node,
@@ -51,10 +47,7 @@ var _default = (0, _utils.createRule)({
51
47
  });
52
48
  }
53
49
  }
54
-
55
50
  };
56
51
  }
57
-
58
52
  });
59
-
60
53
  exports.default = _default;
@@ -4,14 +4,11 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
-
8
7
  var _utils = require("./utils");
9
-
10
8
  const newDescribeContext = () => ({
11
9
  describeTitles: [],
12
10
  testTitles: []
13
11
  });
14
-
15
12
  var _default = (0, _utils.createRule)({
16
13
  name: __filename,
17
14
  meta: {
@@ -28,34 +25,26 @@ var _default = (0, _utils.createRule)({
28
25
  type: 'suggestion'
29
26
  },
30
27
  defaultOptions: [],
31
-
32
28
  create(context) {
33
29
  const contexts = [newDescribeContext()];
34
30
  return {
35
31
  CallExpression(node) {
36
32
  const currentLayer = contexts[contexts.length - 1];
37
33
  const jestFnCall = (0, _utils.parseJestFnCall)(node, context);
38
-
39
34
  if (!jestFnCall) {
40
35
  return;
41
36
  }
42
-
43
37
  if (jestFnCall.type === 'describe') {
44
38
  contexts.push(newDescribeContext());
45
39
  }
46
-
47
40
  if (jestFnCall.members.find(s => (0, _utils.isSupportedAccessor)(s, 'each'))) {
48
41
  return;
49
42
  }
50
-
51
43
  const [argument] = node.arguments;
52
-
53
44
  if (!argument || !(0, _utils.isStringNode)(argument)) {
54
45
  return;
55
46
  }
56
-
57
47
  const title = (0, _utils.getStringValue)(argument);
58
-
59
48
  if (jestFnCall.type === 'test') {
60
49
  if (currentLayer.testTitles.includes(title)) {
61
50
  context.report({
@@ -63,33 +52,25 @@ var _default = (0, _utils.createRule)({
63
52
  node: argument
64
53
  });
65
54
  }
66
-
67
55
  currentLayer.testTitles.push(title);
68
56
  }
69
-
70
57
  if (jestFnCall.type !== 'describe') {
71
58
  return;
72
59
  }
73
-
74
60
  if (currentLayer.describeTitles.includes(title)) {
75
61
  context.report({
76
62
  messageId: 'multipleDescribeTitle',
77
63
  node: argument
78
64
  });
79
65
  }
80
-
81
66
  currentLayer.describeTitles.push(title);
82
67
  },
83
-
84
68
  'CallExpression:exit'(node) {
85
69
  if ((0, _utils.isTypeOfJestFnCall)(node, context, ['describe'])) {
86
70
  contexts.pop();
87
71
  }
88
72
  }
89
-
90
73
  };
91
74
  }
92
-
93
75
  });
94
-
95
76
  exports.default = _default;
@@ -4,21 +4,15 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
-
8
7
  var _utils = require("@typescript-eslint/utils");
9
-
10
8
  var _utils2 = require("./utils");
11
-
12
9
  const testCaseNames = new Set([...Object.keys(_utils2.TestCaseName), 'it.only', 'it.only', 'it.skip', 'it.skip', 'test.only', 'test.only', 'test.skip', 'test.skip', 'fit.concurrent']);
13
-
14
10
  const isTestFunctionExpression = node => node.parent !== undefined && node.parent.type === _utils.AST_NODE_TYPES.CallExpression && testCaseNames.has((0, _utils2.getNodeName)(node.parent.callee));
15
-
16
11
  const conditionName = {
17
12
  [_utils.AST_NODE_TYPES.ConditionalExpression]: 'conditional',
18
13
  [_utils.AST_NODE_TYPES.SwitchStatement]: 'switch',
19
14
  [_utils.AST_NODE_TYPES.IfStatement]: 'if'
20
15
  };
21
-
22
16
  var _default = (0, _utils2.createRule)({
23
17
  name: __filename,
24
18
  meta: {
@@ -36,17 +30,13 @@ var _default = (0, _utils2.createRule)({
36
30
  type: 'suggestion'
37
31
  },
38
32
  defaultOptions: [],
39
-
40
33
  create(context) {
41
34
  const stack = [];
42
-
43
35
  function validate(node) {
44
36
  const lastElementInStack = stack[stack.length - 1];
45
-
46
37
  if (stack.length === 0 || !lastElementInStack) {
47
38
  return;
48
39
  }
49
-
50
40
  context.report({
51
41
  data: {
52
42
  condition: conditionName[node.type]
@@ -55,57 +45,43 @@ var _default = (0, _utils2.createRule)({
55
45
  node
56
46
  });
57
47
  }
58
-
59
48
  return {
60
49
  CallExpression(node) {
61
50
  const jestFnCall = (0, _utils2.parseJestFnCall)(node, context);
62
-
63
51
  if ((jestFnCall === null || jestFnCall === void 0 ? void 0 : jestFnCall.type) === 'test') {
64
52
  stack.push(true);
65
-
66
53
  if (jestFnCall.members.some(s => (0, _utils2.getAccessorValue)(s) === 'each')) {
67
54
  stack.push(true);
68
55
  }
69
56
  }
70
57
  },
71
-
72
58
  FunctionExpression(node) {
73
59
  stack.push(isTestFunctionExpression(node));
74
60
  },
75
-
76
61
  FunctionDeclaration(node) {
77
62
  const declaredVariables = context.getDeclaredVariables(node);
78
63
  const testCallExpressions = (0, _utils2.getTestCallExpressionsFromDeclaredVariables)(declaredVariables, context);
79
64
  stack.push(testCallExpressions.length > 0);
80
65
  },
81
-
82
66
  ArrowFunctionExpression(node) {
83
67
  stack.push(isTestFunctionExpression(node));
84
68
  },
85
-
86
69
  IfStatement: validate,
87
70
  SwitchStatement: validate,
88
71
  ConditionalExpression: validate,
89
-
90
72
  'CallExpression:exit'() {
91
73
  stack.pop();
92
74
  },
93
-
94
75
  'FunctionExpression:exit'() {
95
76
  stack.pop();
96
77
  },
97
-
98
78
  'FunctionDeclaration:exit'() {
99
79
  stack.pop();
100
80
  },
101
-
102
81
  'ArrowFunctionExpression:exit'() {
103
82
  stack.pop();
104
83
  }
105
-
106
84
  };
107
85
  }
108
-
109
86
  });
110
-
111
87
  exports.default = _default;
@@ -4,11 +4,8 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
-
8
7
  var _utils = require("@typescript-eslint/utils");
9
-
10
8
  var _utils2 = require("./utils");
11
-
12
9
  var _default = (0, _utils2.createRule)({
13
10
  name: __filename,
14
11
  meta: {
@@ -24,16 +21,13 @@ var _default = (0, _utils2.createRule)({
24
21
  type: 'problem'
25
22
  },
26
23
  defaultOptions: [],
27
-
28
24
  create(context) {
29
25
  return {
30
26
  CallExpression(node) {
31
27
  const jestFnCall = (0, _utils2.parseJestFnCall)(node, context);
32
-
33
28
  if ((jestFnCall === null || jestFnCall === void 0 ? void 0 : jestFnCall.type) !== 'expect') {
34
29
  return;
35
30
  }
36
-
37
31
  if (['toMatchInlineSnapshot', 'toThrowErrorMatchingInlineSnapshot'].includes((0, _utils2.getAccessorValue)(jestFnCall.matcher))) {
38
32
  // Check all since the optional 'propertyMatchers' argument might be present
39
33
  jestFnCall.args.forEach(argument => {
@@ -46,10 +40,7 @@ var _default = (0, _utils2.createRule)({
46
40
  });
47
41
  }
48
42
  }
49
-
50
43
  };
51
44
  }
52
-
53
45
  });
54
-
55
46
  exports.default = _default;
@@ -4,11 +4,8 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
-
8
7
  var _utils = require("@typescript-eslint/utils");
9
-
10
8
  var _utils2 = require("./utils");
11
-
12
9
  var _default = (0, _utils2.createRule)({
13
10
  name: __filename,
14
11
  meta: {
@@ -29,7 +26,6 @@ var _default = (0, _utils2.createRule)({
29
26
  type: 'suggestion'
30
27
  },
31
28
  defaultOptions: [],
32
-
33
29
  create(context) {
34
30
  return {
35
31
  CallExpression(node) {
@@ -37,17 +33,14 @@ var _default = (0, _utils2.createRule)({
37
33
  callee
38
34
  } = node;
39
35
  const calleeName = (0, _utils2.getNodeName)(callee);
40
-
41
36
  if (!calleeName) {
42
37
  return;
43
38
  }
44
-
45
39
  if (calleeName === 'spyOn' || calleeName === 'spyOnProperty' || calleeName === 'fail' || calleeName === 'pending') {
46
40
  if ((0, _utils2.scopeHasLocalReference)(context.getScope(), calleeName)) {
47
41
  // It's a local variable, not a jasmine global.
48
42
  return;
49
43
  }
50
-
51
44
  switch (calleeName) {
52
45
  case 'spyOn':
53
46
  case 'spyOnProperty':
@@ -60,14 +53,12 @@ var _default = (0, _utils2.createRule)({
60
53
  }
61
54
  });
62
55
  break;
63
-
64
56
  case 'fail':
65
57
  context.report({
66
58
  node,
67
59
  messageId: 'illegalFail'
68
60
  });
69
61
  break;
70
-
71
62
  case 'pending':
72
63
  context.report({
73
64
  node,
@@ -75,13 +66,10 @@ var _default = (0, _utils2.createRule)({
75
66
  });
76
67
  break;
77
68
  }
78
-
79
69
  return;
80
70
  }
81
-
82
71
  if (callee.type === _utils.AST_NODE_TYPES.MemberExpression && calleeName.startsWith('jasmine.')) {
83
72
  const functionName = calleeName.replace('jasmine.', '');
84
-
85
73
  if (functionName === 'any' || functionName === 'anything' || functionName === 'arrayContaining' || functionName === 'objectContaining' || functionName === 'stringMatching') {
86
74
  context.report({
87
75
  fix: fixer => [fixer.replaceText(callee.object, 'expect')],
@@ -94,7 +82,6 @@ var _default = (0, _utils2.createRule)({
94
82
  });
95
83
  return;
96
84
  }
97
-
98
85
  if (functionName === 'addMatchers') {
99
86
  context.report({
100
87
  node,
@@ -106,7 +93,6 @@ var _default = (0, _utils2.createRule)({
106
93
  });
107
94
  return;
108
95
  }
109
-
110
96
  if (functionName === 'createSpy') {
111
97
  context.report({
112
98
  node,
@@ -118,27 +104,23 @@ var _default = (0, _utils2.createRule)({
118
104
  });
119
105
  return;
120
106
  }
121
-
122
107
  context.report({
123
108
  node,
124
109
  messageId: 'illegalJasmine'
125
110
  });
126
111
  }
127
112
  },
128
-
129
113
  MemberExpression(node) {
130
114
  if ((0, _utils2.isSupportedAccessor)(node.object, 'jasmine')) {
131
115
  const {
132
116
  parent,
133
117
  property
134
118
  } = node;
135
-
136
119
  if (parent && parent.type === _utils.AST_NODE_TYPES.AssignmentExpression) {
137
120
  if ((0, _utils2.isSupportedAccessor)(property, 'DEFAULT_TIMEOUT_INTERVAL')) {
138
121
  const {
139
122
  right
140
123
  } = parent;
141
-
142
124
  if (right.type === _utils.AST_NODE_TYPES.Literal) {
143
125
  context.report({
144
126
  fix: fixer => [fixer.replaceText(parent, `jest.setTimeout(${right.value})`)],
@@ -148,7 +130,6 @@ var _default = (0, _utils2.createRule)({
148
130
  return;
149
131
  }
150
132
  }
151
-
152
133
  context.report({
153
134
  node,
154
135
  messageId: 'illegalJasmine'
@@ -156,10 +137,7 @@ var _default = (0, _utils2.createRule)({
156
137
  }
157
138
  }
158
139
  }
159
-
160
140
  };
161
141
  }
162
-
163
142
  });
164
-
165
143
  exports.default = _default;