eslint-plugin-jest 26.8.7 → 27.1.5

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 (114) hide show
  1. package/README.md +82 -78
  2. package/docs/rules/consistent-test-it.md +9 -4
  3. package/docs/rules/expect-expect.md +5 -0
  4. package/docs/rules/max-expects.md +3 -1
  5. package/docs/rules/max-nested-describe.md +3 -1
  6. package/docs/rules/no-alias-methods.md +13 -2
  7. package/docs/rules/no-commented-out-tests.md +6 -1
  8. package/docs/rules/no-conditional-expect.md +7 -2
  9. package/docs/rules/no-conditional-in-test.md +3 -1
  10. package/docs/rules/no-deprecated-functions.md +14 -7
  11. package/docs/rules/no-disabled-tests.md +6 -1
  12. package/docs/rules/no-done-callback.md +9 -1
  13. package/docs/rules/no-duplicate-hooks.md +3 -1
  14. package/docs/rules/no-export.md +6 -1
  15. package/docs/rules/no-focused-tests.md +10 -1
  16. package/docs/rules/no-hooks.md +3 -1
  17. package/docs/rules/no-identical-title.md +6 -1
  18. package/docs/rules/no-if.md +4 -4
  19. package/docs/rules/no-interpolation-in-snapshots.md +6 -1
  20. package/docs/rules/no-jasmine-globals.md +10 -2
  21. package/docs/rules/no-large-snapshots.md +4 -2
  22. package/docs/rules/no-mocks-import.md +6 -1
  23. package/docs/rules/no-restricted-jest-methods.md +51 -0
  24. package/docs/rules/no-restricted-matchers.md +19 -4
  25. package/docs/rules/no-standalone-expect.md +6 -1
  26. package/docs/rules/no-test-prefixes.md +9 -1
  27. package/docs/rules/no-test-return-statement.md +2 -0
  28. package/docs/rules/prefer-called-with.md +2 -0
  29. package/docs/rules/prefer-comparison-matcher.md +5 -0
  30. package/docs/rules/prefer-each.md +56 -0
  31. package/docs/rules/prefer-equality-matcher.md +5 -0
  32. package/docs/rules/prefer-expect-assertions.md +5 -2
  33. package/docs/rules/prefer-expect-resolves.md +8 -1
  34. package/docs/rules/prefer-hooks-in-order.md +3 -1
  35. package/docs/rules/prefer-hooks-on-top.md +3 -1
  36. package/docs/rules/prefer-lowercase-title.md +5 -0
  37. package/docs/rules/prefer-mock-promise-shorthand.md +6 -1
  38. package/docs/rules/prefer-snapshot-hint.md +2 -0
  39. package/docs/rules/prefer-spy-on.md +5 -2
  40. package/docs/rules/prefer-strict-equal.md +5 -2
  41. package/docs/rules/prefer-to-be.md +8 -0
  42. package/docs/rules/prefer-to-contain.md +8 -2
  43. package/docs/rules/prefer-to-have-length.md +8 -2
  44. package/docs/rules/prefer-todo.md +5 -2
  45. package/docs/rules/require-hook.md +2 -0
  46. package/docs/rules/require-to-throw-message.md +2 -2
  47. package/docs/rules/require-top-level-describe.md +5 -1
  48. package/docs/rules/unbound-method.md +7 -2
  49. package/docs/rules/valid-describe-callback.md +6 -1
  50. package/docs/rules/valid-expect-in-promise.md +6 -1
  51. package/docs/rules/valid-expect.md +5 -2
  52. package/docs/rules/valid-title.md +9 -1
  53. package/lib/index.js +14 -25
  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 +1 -18
  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 +1 -10
  60. package/lib/rules/no-commented-out-tests.js +0 -10
  61. package/lib/rules/no-conditional-expect.js +2 -23
  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 +3 -19
  65. package/lib/rules/no-done-callback.js +5 -35
  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 +1 -17
  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 +1 -23
  74. package/lib/rules/no-large-snapshots.js +4 -24
  75. package/lib/rules/no-mocks-import.js +0 -12
  76. package/lib/rules/no-restricted-jest-methods.js +56 -0
  77. package/lib/rules/no-restricted-matchers.js +13 -28
  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 +80 -0
  84. package/lib/rules/prefer-equality-matcher.js +12 -25
  85. package/lib/rules/prefer-expect-assertions.js +8 -54
  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 +8 -34
  92. package/lib/rules/prefer-spy-on.js +0 -17
  93. package/lib/rules/prefer-strict-equal.js +1 -11
  94. package/lib/rules/prefer-to-be.js +5 -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 +1 -25
  99. package/lib/rules/require-to-throw-message.js +0 -9
  100. package/lib/rules/require-top-level-describe.js +1 -18
  101. package/lib/rules/unbound-method.js +3 -30
  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 +51 -154
  108. package/lib/rules/valid-describe-callback.js +0 -17
  109. package/lib/rules/valid-expect-in-promise.js +28 -95
  110. package/lib/rules/valid-expect.js +5 -48
  111. package/lib/rules/valid-title.js +5 -40
  112. package/package.json +20 -16
  113. package/docs/rules/no-jest-import.md +0 -20
  114. package/lib/rules/no-jest-import.js +0 -48
@@ -4,20 +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 parseJestVersion = rawVersion => {
13
10
  if (typeof rawVersion === 'number') {
14
11
  return rawVersion;
15
12
  }
16
-
17
13
  const [majorVersion] = rawVersion.split('.');
18
14
  return parseInt(majorVersion, 10);
19
15
  };
20
-
21
16
  var _default = (0, _utils2.createRule)({
22
17
  name: __filename,
23
18
  meta: {
@@ -34,12 +29,11 @@ var _default = (0, _utils2.createRule)({
34
29
  fixable: 'code'
35
30
  },
36
31
  defaultOptions: [],
37
-
38
32
  create(context) {
39
33
  var _context$settings, _context$settings$jes;
40
-
41
34
  const jestVersion = parseJestVersion(((_context$settings = context.settings) === null || _context$settings === void 0 ? void 0 : (_context$settings$jes = _context$settings.jest) === null || _context$settings$jes === void 0 ? void 0 : _context$settings$jes.version) || (0, _utils2.detectJestVersion)());
42
- const deprecations = { ...(jestVersion >= 15 && {
35
+ const deprecations = {
36
+ ...(jestVersion >= 15 && {
43
37
  'jest.resetModuleRegistry': 'jest.resetModules'
44
38
  }),
45
39
  ...(jestVersion >= 17 && {
@@ -61,13 +55,10 @@ var _default = (0, _utils2.createRule)({
61
55
  if (node.callee.type !== _utils.AST_NODE_TYPES.MemberExpression) {
62
56
  return;
63
57
  }
64
-
65
58
  const deprecation = (0, _utils2.getNodeName)(node);
66
-
67
59
  if (!deprecation || !(deprecation in deprecations)) {
68
60
  return;
69
61
  }
70
-
71
62
  const replacement = deprecations[deprecation];
72
63
  const {
73
64
  callee
@@ -79,23 +70,16 @@ var _default = (0, _utils2.createRule)({
79
70
  replacement
80
71
  },
81
72
  node,
82
-
83
73
  fix(fixer) {
84
74
  let [name, func] = replacement.split('.');
85
-
86
75
  if (callee.property.type === _utils.AST_NODE_TYPES.Literal) {
87
76
  func = `'${func}'`;
88
77
  }
89
-
90
78
  return [fixer.replaceText(callee.object, name), fixer.replaceText(callee.property, func)];
91
79
  }
92
-
93
80
  });
94
81
  }
95
-
96
82
  };
97
83
  }
98
-
99
84
  });
100
-
101
85
  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: {
@@ -27,25 +25,20 @@ var _default = (0, _utils.createRule)({
27
25
  type: 'suggestion'
28
26
  },
29
27
  defaultOptions: [],
30
-
31
28
  create(context) {
32
29
  let suiteDepth = 0;
33
30
  let testDepth = 0;
34
31
  return {
35
32
  CallExpression(node) {
36
33
  const jestFnCall = (0, _utils.parseJestFnCall)(node, context);
37
-
38
34
  if (!jestFnCall) {
39
35
  return;
40
36
  }
41
-
42
37
  if (jestFnCall.type === 'describe') {
43
38
  suiteDepth++;
44
39
  }
45
-
46
40
  if (jestFnCall.type === 'test') {
47
41
  testDepth++;
48
-
49
42
  if (node.arguments.length < 2 && jestFnCall.members.every(s => (0, _utils.getAccessorValue)(s) !== 'todo')) {
50
43
  context.report({
51
44
  messageId: 'missingFunction',
@@ -53,8 +46,8 @@ var _default = (0, _utils.createRule)({
53
46
  });
54
47
  }
55
48
  }
56
-
57
- if ( // the only jest functions that are with "x" are "xdescribe", "xtest", and "xit"
49
+ if (
50
+ // the only jest functions that are with "x" are "xdescribe", "xtest", and "xit"
58
51
  jestFnCall.name.startsWith('x') || jestFnCall.members.some(s => (0, _utils.getAccessorValue)(s) === 'skip')) {
59
52
  context.report({
60
53
  messageId: jestFnCall.type === 'describe' ? 'disabledSuite' : 'disabledTest',
@@ -62,28 +55,22 @@ var _default = (0, _utils.createRule)({
62
55
  });
63
56
  }
64
57
  },
65
-
66
58
  'CallExpression:exit'(node) {
67
59
  const jestFnCall = (0, _utils.parseJestFnCall)(node, context);
68
-
69
60
  if (!jestFnCall) {
70
61
  return;
71
62
  }
72
-
73
63
  if (jestFnCall.type === 'describe') {
74
64
  suiteDepth--;
75
65
  }
76
-
77
66
  if (jestFnCall.type === 'test') {
78
67
  testDepth--;
79
68
  }
80
69
  },
81
-
82
70
  'CallExpression[callee.name="pending"]'(node) {
83
- if ((0, _utils.scopeHasLocalReference)(context.getScope(), 'pending')) {
71
+ if ((0, _utils.resolveScope)(context.getScope(), 'pending')) {
84
72
  return;
85
73
  }
86
-
87
74
  if (testDepth > 0) {
88
75
  context.report({
89
76
  messageId: 'pendingTest',
@@ -101,10 +88,7 @@ var _default = (0, _utils.createRule)({
101
88
  });
102
89
  }
103
90
  }
104
-
105
91
  };
106
92
  }
107
-
108
93
  });
109
-
110
94
  exports.default = _default;
@@ -4,37 +4,28 @@ 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',
36
- recommended: 'error',
37
- suggestion: true
27
+ description: 'Disallow using a callback in asynchronous tests and hooks',
28
+ recommended: 'error'
38
29
  },
39
30
  messages: {
40
31
  noDoneCallback: 'Return a Promise instead of relying on callback parameter',
@@ -46,31 +37,24 @@ var _default = (0, _utils2.createRule)({
46
37
  hasSuggestions: true
47
38
  },
48
39
  defaultOptions: [],
49
-
50
40
  create(context) {
51
41
  return {
52
42
  CallExpression(node) {
53
- var _getNodeName$endsWith, _getNodeName;
54
-
43
+ var _getNodeName;
55
44
  // done is the second argument for it.each, not the first
56
- const isJestEach = (_getNodeName$endsWith = (_getNodeName = (0, _utils2.getNodeName)(node.callee)) === null || _getNodeName === void 0 ? void 0 : _getNodeName.endsWith('.each')) !== null && _getNodeName$endsWith !== void 0 ? _getNodeName$endsWith : false;
57
-
45
+ const isJestEach = ((_getNodeName = (0, _utils2.getNodeName)(node.callee)) === null || _getNodeName === void 0 ? void 0 : _getNodeName.endsWith('.each')) ?? false;
58
46
  if (isJestEach && node.callee.type !== _utils.AST_NODE_TYPES.TaggedTemplateExpression) {
59
47
  // isJestEach but not a TaggedTemplateExpression, so this must be
60
48
  // the `jest.each([])()` syntax which this rule doesn't support due
61
49
  // to its complexity (see jest-community/eslint-plugin-jest#710)
62
50
  return;
63
51
  }
64
-
65
52
  const callback = findCallbackArg(node, isJestEach, context);
66
53
  const callbackArgIndex = Number(isJestEach);
67
-
68
54
  if (!callback || !(0, _utils2.isFunction)(callback) || callback.params.length !== 1 + callbackArgIndex) {
69
55
  return;
70
56
  }
71
-
72
57
  const argument = callback.params[callbackArgIndex];
73
-
74
58
  if (argument.type !== _utils.AST_NODE_TYPES.Identifier) {
75
59
  context.report({
76
60
  node: argument,
@@ -78,7 +62,6 @@ var _default = (0, _utils2.createRule)({
78
62
  });
79
63
  return;
80
64
  }
81
-
82
65
  if (callback.async) {
83
66
  context.report({
84
67
  node: argument,
@@ -86,7 +69,6 @@ var _default = (0, _utils2.createRule)({
86
69
  });
87
70
  return;
88
71
  }
89
-
90
72
  context.report({
91
73
  node: argument,
92
74
  messageId: 'noDoneCallback',
@@ -95,7 +77,6 @@ var _default = (0, _utils2.createRule)({
95
77
  data: {
96
78
  callback: argument.name
97
79
  },
98
-
99
80
  fix(fixer) {
100
81
  const {
101
82
  body
@@ -105,46 +86,35 @@ var _default = (0, _utils2.createRule)({
105
86
  const lastBodyToken = sourceCode.getLastToken(body);
106
87
  const tokenBeforeArgument = sourceCode.getTokenBefore(argument);
107
88
  const tokenAfterArgument = sourceCode.getTokenAfter(argument);
108
- /* istanbul ignore if */
109
89
 
90
+ /* istanbul ignore if */
110
91
  if (!firstBodyToken || !lastBodyToken || !tokenBeforeArgument || !tokenAfterArgument) {
111
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`);
112
93
  }
113
-
114
94
  const argumentInParens = tokenBeforeArgument.value === '(' && tokenAfterArgument.value === ')';
115
95
  let argumentFix = fixer.replaceText(argument, '()');
116
-
117
96
  if (argumentInParens) {
118
97
  argumentFix = fixer.remove(argument);
119
98
  }
120
-
121
99
  let newCallback = argument.name;
122
-
123
100
  if (argumentInParens) {
124
101
  newCallback = `(${newCallback})`;
125
102
  }
126
-
127
103
  let beforeReplacement = `new Promise(${newCallback} => `;
128
104
  let afterReplacement = ')';
129
105
  let replaceBefore = true;
130
-
131
106
  if (body.type === _utils.AST_NODE_TYPES.BlockStatement) {
132
107
  const keyword = 'return';
133
108
  beforeReplacement = `${keyword} ${beforeReplacement}{`;
134
109
  afterReplacement += '}';
135
110
  replaceBefore = false;
136
111
  }
137
-
138
112
  return [argumentFix, replaceBefore ? fixer.insertTextBefore(firstBodyToken, beforeReplacement) : fixer.insertTextAfter(firstBodyToken, beforeReplacement), fixer.insertTextAfter(lastBodyToken, afterReplacement)];
139
113
  }
140
-
141
114
  }]
142
115
  });
143
116
  }
144
-
145
117
  };
146
118
  }
147
-
148
119
  });
149
-
150
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,19 +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
  var _default = (0, _utils2.createRule)({
13
10
  name: __filename,
14
11
  meta: {
15
12
  docs: {
16
13
  category: 'Best Practices',
17
14
  description: 'Disallow focused tests',
18
- recommended: 'error',
19
- suggestion: true
15
+ recommended: 'error'
20
16
  },
21
17
  messages: {
22
18
  focusedTest: 'Unexpected focused test.',
@@ -27,43 +23,34 @@ var _default = (0, _utils2.createRule)({
27
23
  hasSuggestions: true
28
24
  },
29
25
  defaultOptions: [],
30
-
31
26
  create(context) {
32
27
  return {
33
28
  CallExpression(node) {
34
29
  const jestFnCall = (0, _utils2.parseJestFnCall)(node, context);
35
-
36
30
  if ((jestFnCall === null || jestFnCall === void 0 ? void 0 : jestFnCall.type) !== 'test' && (jestFnCall === null || jestFnCall === void 0 ? void 0 : jestFnCall.type) !== 'describe') {
37
31
  return;
38
32
  }
39
-
40
33
  if (jestFnCall.name.startsWith('f')) {
41
34
  context.report({
42
35
  messageId: 'focusedTest',
43
36
  node,
44
37
  suggest: [{
45
38
  messageId: 'suggestRemoveFocus',
46
-
47
39
  fix(fixer) {
48
40
  // don't apply the fixer if we're an aliased import
49
41
  if (jestFnCall.head.type === 'import' && jestFnCall.name !== jestFnCall.head.local) {
50
42
  return null;
51
43
  }
52
-
53
44
  return fixer.removeRange([node.range[0], node.range[0] + 1]);
54
45
  }
55
-
56
46
  }]
57
47
  });
58
48
  return;
59
49
  }
60
-
61
50
  const onlyNode = jestFnCall.members.find(s => (0, _utils2.getAccessorValue)(s) === 'only');
62
-
63
51
  if (!onlyNode) {
64
52
  return;
65
53
  }
66
-
67
54
  context.report({
68
55
  messageId: 'focusedTest',
69
56
  node: onlyNode,
@@ -73,10 +60,7 @@ var _default = (0, _utils2.createRule)({
73
60
  }]
74
61
  });
75
62
  }
76
-
77
63
  };
78
64
  }
79
-
80
65
  });
81
-
82
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;