no-test-prefixes.js 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.default = void 0;
  6. var _utils = require("@typescript-eslint/utils");
  7. var _utils2 = require("./utils");
  8. var _default = (0, _utils2.createRule)({
  9. name: __filename,
  10. meta: {
  11. docs: {
  12. category: 'Best Practices',
  13. description: 'Use `.only` and `.skip` over `f` and `x`',
  14. recommended: 'error'
  15. },
  16. messages: {
  17. usePreferredName: 'Use "{{ preferredNodeName }}" instead'
  18. },
  19. fixable: 'code',
  20. schema: [],
  21. type: 'suggestion'
  22. },
  23. defaultOptions: [],
  24. create(context) {
  25. return {
  26. CallExpression(node) {
  27. const jestFnCall = (0, _utils2.parseJestFnCall)(node, context);
  28. if ((jestFnCall === null || jestFnCall === void 0 ? void 0 : jestFnCall.type) !== 'describe' && (jestFnCall === null || jestFnCall === void 0 ? void 0 : jestFnCall.type) !== 'test') {
  29. return;
  30. }
  31. if (jestFnCall.name[0] !== 'f' && jestFnCall.name[0] !== 'x') {
  32. return;
  33. }
  34. const preferredNodeName = [jestFnCall.name.slice(1), jestFnCall.name[0] === 'f' ? 'only' : 'skip', ...jestFnCall.members.map(s => (0, _utils2.getAccessorValue)(s))].join('.');
  35. const funcNode = node.callee.type === _utils.AST_NODE_TYPES.TaggedTemplateExpression ? node.callee.tag : node.callee.type === _utils.AST_NODE_TYPES.CallExpression ? node.callee.callee : node.callee;
  36. context.report({
  37. messageId: 'usePreferredName',
  38. node: node.callee,
  39. data: {
  40. preferredNodeName
  41. },
  42. fix(fixer) {
  43. return [fixer.replaceText(funcNode, preferredNodeName)];
  44. }
  45. });
  46. }
  47. };
  48. }
  49. });
  50. exports.default = _default;