eslint-config-typed 3.13.7 → 3.14.1

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 (66) hide show
  1. package/dist/plugins/react-coding-style/rules/use-memo-hooks-style.mjs +2 -1
  2. package/dist/plugins/react-coding-style/rules/use-memo-hooks-style.mjs.map +1 -1
  3. package/dist/plugins/vitest-coding-style/rules/no-expect-to-strict-equal.mjs +2 -2
  4. package/dist/plugins/vitest-coding-style/rules/no-expect-to-strict-equal.mjs.map +1 -1
  5. package/dist/plugins/vitest-coding-style/rules/prefer-assert-not-ok-over-assert-is-not-ok.d.mts +6 -0
  6. package/dist/plugins/vitest-coding-style/rules/prefer-assert-not-ok-over-assert-is-not-ok.d.mts.map +1 -0
  7. package/dist/plugins/vitest-coding-style/rules/prefer-assert-not-ok-over-assert-is-not-ok.mjs +35 -0
  8. package/dist/plugins/vitest-coding-style/rules/prefer-assert-not-ok-over-assert-is-not-ok.mjs.map +1 -0
  9. package/dist/plugins/vitest-coding-style/rules/prefer-assert-not-ok-over-expect-false.d.mts +6 -0
  10. package/dist/plugins/vitest-coding-style/rules/prefer-assert-not-ok-over-expect-false.d.mts.map +1 -0
  11. package/dist/plugins/vitest-coding-style/rules/prefer-assert-not-ok-over-expect-false.mjs +54 -0
  12. package/dist/plugins/vitest-coding-style/rules/prefer-assert-not-ok-over-expect-false.mjs.map +1 -0
  13. package/dist/plugins/vitest-coding-style/rules/prefer-assert-over-assert-ok.d.mts +6 -0
  14. package/dist/plugins/vitest-coding-style/rules/prefer-assert-over-assert-ok.d.mts.map +1 -0
  15. package/dist/plugins/vitest-coding-style/rules/prefer-assert-over-assert-ok.mjs +35 -0
  16. package/dist/plugins/vitest-coding-style/rules/prefer-assert-over-assert-ok.mjs.map +1 -0
  17. package/dist/plugins/vitest-coding-style/rules/prefer-assert-over-expect-true.d.mts +6 -0
  18. package/dist/plugins/vitest-coding-style/rules/prefer-assert-over-expect-true.d.mts.map +1 -0
  19. package/dist/plugins/vitest-coding-style/rules/prefer-assert-over-expect-true.mjs +54 -0
  20. package/dist/plugins/vitest-coding-style/rules/prefer-assert-over-expect-true.mjs.map +1 -0
  21. package/dist/plugins/vitest-coding-style/rules/rules.d.mts +4 -0
  22. package/dist/plugins/vitest-coding-style/rules/rules.d.mts.map +1 -1
  23. package/dist/plugins/vitest-coding-style/rules/rules.mjs +8 -0
  24. package/dist/plugins/vitest-coding-style/rules/rules.mjs.map +1 -1
  25. package/dist/rules/eslint-jest-rules.d.mts +1 -0
  26. package/dist/rules/eslint-jest-rules.d.mts.map +1 -1
  27. package/dist/rules/eslint-jest-rules.mjs +1 -0
  28. package/dist/rules/eslint-jest-rules.mjs.map +1 -1
  29. package/dist/rules/eslint-vitest-coding-style-rules.d.mts +4 -0
  30. package/dist/rules/eslint-vitest-coding-style-rules.d.mts.map +1 -1
  31. package/dist/rules/eslint-vitest-coding-style-rules.mjs +4 -0
  32. package/dist/rules/eslint-vitest-coding-style-rules.mjs.map +1 -1
  33. package/dist/rules/eslint-vitest-rules.d.mts +7 -0
  34. package/dist/rules/eslint-vitest-rules.d.mts.map +1 -1
  35. package/dist/rules/eslint-vitest-rules.mjs +10 -0
  36. package/dist/rules/eslint-vitest-rules.mjs.map +1 -1
  37. package/dist/types/rules/eslint-jest-rules.d.mts +104 -63
  38. package/dist/types/rules/eslint-jest-rules.d.mts.map +1 -1
  39. package/dist/types/rules/eslint-react-rules.d.mts +1 -1
  40. package/dist/types/rules/eslint-react-rules.d.mts.map +1 -1
  41. package/dist/types/rules/eslint-rules.d.mts +4 -4
  42. package/dist/types/rules/eslint-rules.d.mts.map +1 -1
  43. package/dist/types/rules/eslint-vitest-coding-style-rules.d.mts +62 -1
  44. package/dist/types/rules/eslint-vitest-coding-style-rules.d.mts.map +1 -1
  45. package/dist/types/rules/eslint-vitest-rules.d.mts +86 -1
  46. package/dist/types/rules/eslint-vitest-rules.d.mts.map +1 -1
  47. package/dist/types/rules/typescript-eslint-rules.d.mts +1 -1
  48. package/dist/types/rules/typescript-eslint-rules.d.mts.map +1 -1
  49. package/package.json +19 -19
  50. package/src/plugins/react-coding-style/rules/use-memo-hooks-style.mts +2 -1
  51. package/src/plugins/vitest-coding-style/rules/no-expect-to-strict-equal.mts +2 -2
  52. package/src/plugins/vitest-coding-style/rules/prefer-assert-coding-style-rules.test.mts +95 -0
  53. package/src/plugins/vitest-coding-style/rules/prefer-assert-not-ok-over-assert-is-not-ok.mts +42 -0
  54. package/src/plugins/vitest-coding-style/rules/prefer-assert-not-ok-over-expect-false.mts +74 -0
  55. package/src/plugins/vitest-coding-style/rules/prefer-assert-over-assert-ok.mts +42 -0
  56. package/src/plugins/vitest-coding-style/rules/prefer-assert-over-expect-true.mts +74 -0
  57. package/src/plugins/vitest-coding-style/rules/rules.mts +12 -0
  58. package/src/rules/eslint-jest-rules.mts +2 -0
  59. package/src/rules/eslint-vitest-coding-style-rules.mts +4 -0
  60. package/src/rules/eslint-vitest-rules.mts +11 -0
  61. package/src/types/rules/eslint-jest-rules.mts +109 -63
  62. package/src/types/rules/eslint-react-rules.mts +0 -1
  63. package/src/types/rules/eslint-rules.mts +0 -4
  64. package/src/types/rules/eslint-vitest-coding-style-rules.mts +66 -1
  65. package/src/types/rules/eslint-vitest-rules.mts +92 -1
  66. package/src/types/rules/typescript-eslint-rules.mts +0 -1
@@ -0,0 +1,42 @@
1
+ import { AST_NODE_TYPES, type TSESLint } from '@typescript-eslint/utils';
2
+
3
+ type MessageIds = 'preferAssertOverAssertNotOk';
4
+
5
+ type Options = readonly [];
6
+
7
+ export const preferAssertNotOkOverAssertIsNotOkRule: TSESLint.RuleModule<
8
+ MessageIds,
9
+ Options
10
+ > = {
11
+ meta: {
12
+ type: 'suggestion',
13
+ docs: {
14
+ description: 'Prefer assert.notOk(X) over assert.isNotOk(X).',
15
+ },
16
+ fixable: 'code',
17
+ schema: [],
18
+ messages: {
19
+ preferAssertOverAssertNotOk:
20
+ 'Use assert.notOk(X) instead of assert.isNotOk(X).',
21
+ },
22
+ },
23
+ defaultOptions: [],
24
+ create: (context) => ({
25
+ MemberExpression: (node) => {
26
+ if (
27
+ node.object.type === AST_NODE_TYPES.Identifier &&
28
+ node.object.name === 'assert' &&
29
+ node.property.type === AST_NODE_TYPES.Identifier &&
30
+ node.property.name === 'isNotOk' &&
31
+ node.parent.type === AST_NODE_TYPES.CallExpression &&
32
+ node.parent.callee === node
33
+ ) {
34
+ context.report({
35
+ node,
36
+ messageId: 'preferAssertOverAssertNotOk',
37
+ fix: (fixer) => fixer.replaceText(node, 'assert.notOk'),
38
+ });
39
+ }
40
+ },
41
+ }),
42
+ };
@@ -0,0 +1,74 @@
1
+ import {
2
+ AST_NODE_TYPES,
3
+ ESLintUtils,
4
+ type TSESLint,
5
+ } from '@typescript-eslint/utils';
6
+ import { Arr } from 'ts-data-forge';
7
+ import * as ts from 'typescript';
8
+
9
+ type MessageIds = 'preferAssertNotOkOverExpectFalse';
10
+
11
+ type Options = readonly [];
12
+
13
+ export const preferAssertNotOkOverExpectFalseRule: TSESLint.RuleModule<
14
+ MessageIds,
15
+ Options
16
+ > = {
17
+ meta: {
18
+ type: 'suggestion',
19
+ docs: {
20
+ description:
21
+ 'Prefer assert.notOk(X) over expect(X).toBe(false) (only if X is boolean)',
22
+ },
23
+ fixable: 'code',
24
+ schema: [],
25
+ messages: {
26
+ preferAssertNotOkOverExpectFalse:
27
+ 'Use assert.notOk(X) instead of expect(X).toBe(false)',
28
+ },
29
+ },
30
+ defaultOptions: [],
31
+ create: (context) => {
32
+ const parserServices = ESLintUtils.getParserServices(context);
33
+
34
+ const checker = parserServices.program.getTypeChecker();
35
+
36
+ return {
37
+ CallExpression: (node) => {
38
+ if (
39
+ node.callee.type === AST_NODE_TYPES.MemberExpression &&
40
+ node.callee.object.type === AST_NODE_TYPES.CallExpression &&
41
+ node.callee.object.callee.type === AST_NODE_TYPES.Identifier &&
42
+ node.callee.object.callee.name === 'expect' &&
43
+ node.callee.property.type === AST_NODE_TYPES.Identifier &&
44
+ node.callee.property.name === 'toBe' &&
45
+ Arr.isArrayOfLength(node.arguments, 1) &&
46
+ node.arguments[0].type === AST_NODE_TYPES.Literal &&
47
+ node.arguments[0].value === false
48
+ ) {
49
+ const arg = node.callee.object.arguments[0];
50
+
51
+ if (arg !== undefined) {
52
+ const tsNode = parserServices.esTreeNodeToTSNodeMap.get(arg);
53
+
54
+ const type = checker.getTypeAtLocation(tsNode);
55
+
56
+ const isBoolean = (type.flags & ts.TypeFlags.Boolean) !== 0;
57
+
58
+ if (!isBoolean) {
59
+ return;
60
+ }
61
+ }
62
+
63
+ const argText = context.sourceCode.getText(arg);
64
+
65
+ context.report({
66
+ node,
67
+ messageId: 'preferAssertNotOkOverExpectFalse',
68
+ fix: (fixer) => fixer.replaceText(node, `assert.notOk(${argText})`),
69
+ });
70
+ }
71
+ },
72
+ };
73
+ },
74
+ };
@@ -0,0 +1,42 @@
1
+ import { AST_NODE_TYPES, type TSESLint } from '@typescript-eslint/utils';
2
+
3
+ type MessageIds = 'preferAssertOverAssertOk';
4
+
5
+ type Options = readonly [];
6
+
7
+ export const preferAssertOverAssertOkRule: TSESLint.RuleModule<
8
+ MessageIds,
9
+ Options
10
+ > = {
11
+ meta: {
12
+ type: 'suggestion',
13
+ docs: {
14
+ description: 'Prefer assert(X) over assert.ok(X), assert.isOk(X).',
15
+ },
16
+ fixable: 'code',
17
+ schema: [],
18
+ messages: {
19
+ preferAssertOverAssertOk:
20
+ 'Use assert(X) instead of assert.ok(X), assert.isOk(X).',
21
+ },
22
+ },
23
+ defaultOptions: [],
24
+ create: (context) => ({
25
+ MemberExpression: (node) => {
26
+ if (
27
+ node.object.type === AST_NODE_TYPES.Identifier &&
28
+ node.object.name === 'assert' &&
29
+ node.property.type === AST_NODE_TYPES.Identifier &&
30
+ (node.property.name === 'ok' || node.property.name === 'isOk') &&
31
+ node.parent.type === AST_NODE_TYPES.CallExpression &&
32
+ node.parent.callee === node
33
+ ) {
34
+ context.report({
35
+ node,
36
+ messageId: 'preferAssertOverAssertOk',
37
+ fix: (fixer) => fixer.replaceText(node, 'assert'),
38
+ });
39
+ }
40
+ },
41
+ }),
42
+ };
@@ -0,0 +1,74 @@
1
+ import {
2
+ AST_NODE_TYPES,
3
+ ESLintUtils,
4
+ type TSESLint,
5
+ } from '@typescript-eslint/utils';
6
+ import { Arr } from 'ts-data-forge';
7
+ import * as ts from 'typescript';
8
+
9
+ type MessageIds = 'preferAssertOverExpectTrue';
10
+
11
+ type Options = readonly [];
12
+
13
+ export const preferAssertOverExpectTrueRule: TSESLint.RuleModule<
14
+ MessageIds,
15
+ Options
16
+ > = {
17
+ meta: {
18
+ type: 'suggestion',
19
+ docs: {
20
+ description:
21
+ 'Prefer assert(X) over expect(X).toBe(true) (only if X is boolean)',
22
+ },
23
+ fixable: 'code',
24
+ schema: [],
25
+ messages: {
26
+ preferAssertOverExpectTrue:
27
+ 'Use assert(X) instead of expect(X).toBe(true)',
28
+ },
29
+ },
30
+ defaultOptions: [],
31
+ create: (context) => {
32
+ const parserServices = ESLintUtils.getParserServices(context);
33
+
34
+ const checker = parserServices.program.getTypeChecker();
35
+
36
+ return {
37
+ CallExpression: (node) => {
38
+ if (
39
+ node.callee.type === AST_NODE_TYPES.MemberExpression &&
40
+ node.callee.object.type === AST_NODE_TYPES.CallExpression &&
41
+ node.callee.object.callee.type === AST_NODE_TYPES.Identifier &&
42
+ node.callee.object.callee.name === 'expect' &&
43
+ node.callee.property.type === AST_NODE_TYPES.Identifier &&
44
+ node.callee.property.name === 'toBe' &&
45
+ Arr.isArrayOfLength(node.arguments, 1) &&
46
+ node.arguments[0].type === AST_NODE_TYPES.Literal &&
47
+ node.arguments[0].value === true
48
+ ) {
49
+ const arg = node.callee.object.arguments[0];
50
+
51
+ if (arg !== undefined) {
52
+ const tsNode = parserServices.esTreeNodeToTSNodeMap.get(arg);
53
+
54
+ const type = checker.getTypeAtLocation(tsNode);
55
+
56
+ const isBoolean = (type.flags & ts.TypeFlags.Boolean) !== 0;
57
+
58
+ if (!isBoolean) {
59
+ return;
60
+ }
61
+ }
62
+
63
+ const argText = context.sourceCode.getText(arg);
64
+
65
+ context.report({
66
+ node,
67
+ messageId: 'preferAssertOverExpectTrue',
68
+ fix: (fixer) => fixer.replaceText(node, `assert(${argText})`),
69
+ });
70
+ }
71
+ },
72
+ };
73
+ },
74
+ };
@@ -1,6 +1,18 @@
1
1
  import { type ESLintPlugin } from '../../../types/index.mjs';
2
2
  import { noExpectToStrictEqualRule } from './no-expect-to-strict-equal.mjs';
3
+ import { preferAssertNotOkOverAssertIsNotOkRule } from './prefer-assert-not-ok-over-assert-is-not-ok.mjs';
4
+ import { preferAssertNotOkOverExpectFalseRule } from './prefer-assert-not-ok-over-expect-false.mjs';
5
+ import { preferAssertOverAssertOkRule } from './prefer-assert-over-assert-ok.mjs';
6
+ import { preferAssertOverExpectTrueRule } from './prefer-assert-over-expect-true.mjs';
3
7
 
4
8
  export const vitestCodingStyleRules = {
5
9
  'no-expect-to-strict-equal': noExpectToStrictEqualRule,
10
+
11
+ 'prefer-assert-over-assert-ok': preferAssertOverAssertOkRule,
12
+ 'prefer-assert-not-ok-over-assert-is-not-ok':
13
+ preferAssertNotOkOverAssertIsNotOkRule,
14
+
15
+ 'prefer-assert-over-expect-true': preferAssertOverExpectTrueRule,
16
+ 'prefer-assert-not-ok-over-expect-false':
17
+ preferAssertNotOkOverExpectFalseRule,
6
18
  } as const satisfies ESLintPlugin['rules'];
@@ -82,4 +82,6 @@ export const eslintJestRules = {
82
82
  'jest/unbound-method': withDefaultOption('error'),
83
83
  'jest/valid-expect-in-promise': 'error',
84
84
  'jest/prefer-ending-with-an-expect': withDefaultOption('error'),
85
+
86
+ 'jest/valid-mock-module-path': withDefaultOption('error'),
85
87
  } as const satisfies EslintJestRules;
@@ -2,4 +2,8 @@ import { type EslintVitestCodingStyleRules } from '../types/index.mjs';
2
2
 
3
3
  export const eslintVitestCodingStyleRules = {
4
4
  'vitest-coding-style/no-expect-to-strict-equal': 'error',
5
+ 'vitest-coding-style/prefer-assert-over-assert-ok': 'error',
6
+ 'vitest-coding-style/prefer-assert-not-ok-over-assert-is-not-ok': 'error',
7
+ 'vitest-coding-style/prefer-assert-over-expect-true': 'error',
8
+ 'vitest-coding-style/prefer-assert-not-ok-over-expect-false': 'error',
5
9
  } as const satisfies EslintVitestCodingStyleRules;
@@ -107,6 +107,17 @@ export const eslintVitestRules = {
107
107
  'vitest/warn-todo': 'error',
108
108
  'vitest/require-awaited-expect-poll': 'error',
109
109
 
110
+ 'vitest/consistent-each-for': [
111
+ 'error',
112
+ {
113
+ test: 'each',
114
+ it: 'each',
115
+ describe: 'each',
116
+ suite: 'each',
117
+ },
118
+ ],
119
+ 'vitest/require-import-vi-mock': 'error',
120
+
110
121
  // deprecated
111
122
  'vitest/no-done-callback': 0,
112
123
  } as const satisfies EslintVitestRules;