eslint-config-typed 3.13.6 → 3.14.0

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 (38) hide show
  1. package/dist/plugins/vitest-coding-style/rules/no-expect-to-strict-equal.mjs +2 -2
  2. package/dist/plugins/vitest-coding-style/rules/no-expect-to-strict-equal.mjs.map +1 -1
  3. package/dist/plugins/vitest-coding-style/rules/prefer-assert-not-ok-over-assert-is-not-ok.d.mts +6 -0
  4. package/dist/plugins/vitest-coding-style/rules/prefer-assert-not-ok-over-assert-is-not-ok.d.mts.map +1 -0
  5. package/dist/plugins/vitest-coding-style/rules/prefer-assert-not-ok-over-assert-is-not-ok.mjs +35 -0
  6. package/dist/plugins/vitest-coding-style/rules/prefer-assert-not-ok-over-assert-is-not-ok.mjs.map +1 -0
  7. package/dist/plugins/vitest-coding-style/rules/prefer-assert-not-ok-over-expect-false.d.mts +6 -0
  8. package/dist/plugins/vitest-coding-style/rules/prefer-assert-not-ok-over-expect-false.d.mts.map +1 -0
  9. package/dist/plugins/vitest-coding-style/rules/prefer-assert-not-ok-over-expect-false.mjs +54 -0
  10. package/dist/plugins/vitest-coding-style/rules/prefer-assert-not-ok-over-expect-false.mjs.map +1 -0
  11. package/dist/plugins/vitest-coding-style/rules/prefer-assert-over-assert-ok.d.mts +6 -0
  12. package/dist/plugins/vitest-coding-style/rules/prefer-assert-over-assert-ok.d.mts.map +1 -0
  13. package/dist/plugins/vitest-coding-style/rules/prefer-assert-over-assert-ok.mjs +35 -0
  14. package/dist/plugins/vitest-coding-style/rules/prefer-assert-over-assert-ok.mjs.map +1 -0
  15. package/dist/plugins/vitest-coding-style/rules/prefer-assert-over-expect-true.d.mts +6 -0
  16. package/dist/plugins/vitest-coding-style/rules/prefer-assert-over-expect-true.d.mts.map +1 -0
  17. package/dist/plugins/vitest-coding-style/rules/prefer-assert-over-expect-true.mjs +54 -0
  18. package/dist/plugins/vitest-coding-style/rules/prefer-assert-over-expect-true.mjs.map +1 -0
  19. package/dist/plugins/vitest-coding-style/rules/rules.d.mts +4 -0
  20. package/dist/plugins/vitest-coding-style/rules/rules.d.mts.map +1 -1
  21. package/dist/plugins/vitest-coding-style/rules/rules.mjs +8 -0
  22. package/dist/plugins/vitest-coding-style/rules/rules.mjs.map +1 -1
  23. package/dist/rules/eslint-vitest-coding-style-rules.d.mts +4 -0
  24. package/dist/rules/eslint-vitest-coding-style-rules.d.mts.map +1 -1
  25. package/dist/rules/eslint-vitest-coding-style-rules.mjs +4 -0
  26. package/dist/rules/eslint-vitest-coding-style-rules.mjs.map +1 -1
  27. package/dist/types/rules/eslint-vitest-coding-style-rules.d.mts +62 -1
  28. package/dist/types/rules/eslint-vitest-coding-style-rules.d.mts.map +1 -1
  29. package/package.json +5 -5
  30. package/src/plugins/vitest-coding-style/rules/no-expect-to-strict-equal.mts +2 -2
  31. package/src/plugins/vitest-coding-style/rules/prefer-assert-coding-style-rules.test.mts +95 -0
  32. package/src/plugins/vitest-coding-style/rules/prefer-assert-not-ok-over-assert-is-not-ok.mts +42 -0
  33. package/src/plugins/vitest-coding-style/rules/prefer-assert-not-ok-over-expect-false.mts +74 -0
  34. package/src/plugins/vitest-coding-style/rules/prefer-assert-over-assert-ok.mts +42 -0
  35. package/src/plugins/vitest-coding-style/rules/prefer-assert-over-expect-true.mts +74 -0
  36. package/src/plugins/vitest-coding-style/rules/rules.mts +12 -0
  37. package/src/rules/eslint-vitest-coding-style-rules.mts +4 -0
  38. package/src/types/rules/eslint-vitest-coding-style-rules.mts +66 -1
@@ -5,12 +5,12 @@ const noExpectToStrictEqualRule = {
5
5
  meta: {
6
6
  type: 'suggestion',
7
7
  docs: {
8
- description: 'Disallow `expect().toStrictEqual()` in favor of `assert.deepStrictEqual()`.',
8
+ description: 'Disallow `expect(X).toStrictEqual(Y)` in favor of `assert.deepStrictEqual(X, Y)`, as the former also checks type equality between X and Y.',
9
9
  },
10
10
  fixable: 'code',
11
11
  schema: [],
12
12
  messages: {
13
- useAssert: 'Use `assert.deepStrictEqual()` instead of `expect().toStrictEqual()`.',
13
+ useAssert: 'Use `assert.deepStrictEqual(X, Y)` instead of `expect(X).toStrictEqual(Y)`.',
14
14
  },
15
15
  },
16
16
  defaultOptions: [],
@@ -1 +1 @@
1
- {"version":3,"file":"no-expect-to-strict-equal.mjs","sources":["../../../../src/plugins/vitest-coding-style/rules/no-expect-to-strict-equal.mts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"no-expect-to-strict-equal.mjs","sources":["../../../../src/plugins/vitest-coding-style/rules/no-expect-to-strict-equal.mts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { type TSESLint } from '@typescript-eslint/utils';
2
+ type MessageIds = 'preferAssertOverAssertNotOk';
3
+ type Options = readonly [];
4
+ export declare const preferAssertNotOkOverAssertIsNotOkRule: TSESLint.RuleModule<MessageIds, Options>;
5
+ export {};
6
+ //# sourceMappingURL=prefer-assert-not-ok-over-assert-is-not-ok.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prefer-assert-not-ok-over-assert-is-not-ok.d.mts","sourceRoot":"","sources":["../../../../src/plugins/vitest-coding-style/rules/prefer-assert-not-ok-over-assert-is-not-ok.mts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAEzE,KAAK,UAAU,GAAG,6BAA6B,CAAC;AAEhD,KAAK,OAAO,GAAG,SAAS,EAAE,CAAC;AAE3B,eAAO,MAAM,sCAAsC,EAAE,QAAQ,CAAC,UAAU,CACtE,UAAU,EACV,OAAO,CAiCR,CAAC"}
@@ -0,0 +1,35 @@
1
+ import { AST_NODE_TYPES } from '@typescript-eslint/utils';
2
+
3
+ const preferAssertNotOkOverAssertIsNotOkRule = {
4
+ meta: {
5
+ type: 'suggestion',
6
+ docs: {
7
+ description: 'Prefer assert.notOk(X) over assert.isNotOk(X).',
8
+ },
9
+ fixable: 'code',
10
+ schema: [],
11
+ messages: {
12
+ preferAssertOverAssertNotOk: 'Use assert.notOk(X) instead of assert.isNotOk(X).',
13
+ },
14
+ },
15
+ defaultOptions: [],
16
+ create: (context) => ({
17
+ MemberExpression: (node) => {
18
+ if (node.object.type === AST_NODE_TYPES.Identifier &&
19
+ node.object.name === 'assert' &&
20
+ node.property.type === AST_NODE_TYPES.Identifier &&
21
+ node.property.name === 'isNotOk' &&
22
+ node.parent.type === AST_NODE_TYPES.CallExpression &&
23
+ node.parent.callee === node) {
24
+ context.report({
25
+ node,
26
+ messageId: 'preferAssertOverAssertNotOk',
27
+ fix: (fixer) => fixer.replaceText(node, 'assert.notOk'),
28
+ });
29
+ }
30
+ },
31
+ }),
32
+ };
33
+
34
+ export { preferAssertNotOkOverAssertIsNotOkRule };
35
+ //# sourceMappingURL=prefer-assert-not-ok-over-assert-is-not-ok.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prefer-assert-not-ok-over-assert-is-not-ok.mjs","sources":["../../../../src/plugins/vitest-coding-style/rules/prefer-assert-not-ok-over-assert-is-not-ok.mts"],"sourcesContent":[null],"names":[],"mappings":";;AAMO,MAAM,sCAAsC,GAG/C;AACF,IAAA,IAAI,EAAE;AACJ,QAAA,IAAI,EAAE,YAAY;AAClB,QAAA,IAAI,EAAE;AACJ,YAAA,WAAW,EAAE,gDAAgD;AAC9D,SAAA;AACD,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,MAAM,EAAE,EAAE;AACV,QAAA,QAAQ,EAAE;AACR,YAAA,2BAA2B,EACzB,mDAAmD;AACtD,SAAA;AACF,KAAA;AACD,IAAA,cAAc,EAAE,EAAE;AAClB,IAAA,MAAM,EAAE,CAAC,OAAO,MAAM;AACpB,QAAA,gBAAgB,EAAE,CAAC,IAAI,KAAI;YACzB,IACE,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,cAAc,CAAC,UAAU;AAC9C,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ;AAC7B,gBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,cAAc,CAAC,UAAU;AAChD,gBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,SAAS;AAChC,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,cAAc,CAAC,cAAc;AAClD,gBAAA,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,IAAI,EAC3B;gBACA,OAAO,CAAC,MAAM,CAAC;oBACb,IAAI;AACJ,oBAAA,SAAS,EAAE,6BAA6B;AACxC,oBAAA,GAAG,EAAE,CAAC,KAAK,KAAK,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,cAAc,CAAC;AACxD,iBAAA,CAAC;YACJ;QACF,CAAC;KACF,CAAC;;;;;"}
@@ -0,0 +1,6 @@
1
+ import { type TSESLint } from '@typescript-eslint/utils';
2
+ type MessageIds = 'preferAssertNotOkOverExpectFalse';
3
+ type Options = readonly [];
4
+ export declare const preferAssertNotOkOverExpectFalseRule: TSESLint.RuleModule<MessageIds, Options>;
5
+ export {};
6
+ //# sourceMappingURL=prefer-assert-not-ok-over-expect-false.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prefer-assert-not-ok-over-expect-false.d.mts","sourceRoot":"","sources":["../../../../src/plugins/vitest-coding-style/rules/prefer-assert-not-ok-over-expect-false.mts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,QAAQ,EACd,MAAM,0BAA0B,CAAC;AAIlC,KAAK,UAAU,GAAG,kCAAkC,CAAC;AAErD,KAAK,OAAO,GAAG,SAAS,EAAE,CAAC;AAE3B,eAAO,MAAM,oCAAoC,EAAE,QAAQ,CAAC,UAAU,CACpE,UAAU,EACV,OAAO,CA2DR,CAAC"}
@@ -0,0 +1,54 @@
1
+ import { ESLintUtils, AST_NODE_TYPES } from '@typescript-eslint/utils';
2
+ import { Arr } from 'ts-data-forge';
3
+ import * as ts from 'typescript';
4
+
5
+ const preferAssertNotOkOverExpectFalseRule = {
6
+ meta: {
7
+ type: 'suggestion',
8
+ docs: {
9
+ description: 'Prefer assert.notOk(X) over expect(X).toBe(false) (only if X is boolean)',
10
+ },
11
+ fixable: 'code',
12
+ schema: [],
13
+ messages: {
14
+ preferAssertNotOkOverExpectFalse: 'Use assert.notOk(X) instead of expect(X).toBe(false)',
15
+ },
16
+ },
17
+ defaultOptions: [],
18
+ create: (context) => {
19
+ const parserServices = ESLintUtils.getParserServices(context);
20
+ const checker = parserServices.program.getTypeChecker();
21
+ return {
22
+ CallExpression: (node) => {
23
+ if (node.callee.type === AST_NODE_TYPES.MemberExpression &&
24
+ node.callee.object.type === AST_NODE_TYPES.CallExpression &&
25
+ node.callee.object.callee.type === AST_NODE_TYPES.Identifier &&
26
+ node.callee.object.callee.name === 'expect' &&
27
+ node.callee.property.type === AST_NODE_TYPES.Identifier &&
28
+ node.callee.property.name === 'toBe' &&
29
+ Arr.isArrayOfLength(node.arguments, 1) &&
30
+ node.arguments[0].type === AST_NODE_TYPES.Literal &&
31
+ node.arguments[0].value === false) {
32
+ const arg = node.callee.object.arguments[0];
33
+ if (arg !== undefined) {
34
+ const tsNode = parserServices.esTreeNodeToTSNodeMap.get(arg);
35
+ const type = checker.getTypeAtLocation(tsNode);
36
+ const isBoolean = (type.flags & ts.TypeFlags.Boolean) !== 0;
37
+ if (!isBoolean) {
38
+ return;
39
+ }
40
+ }
41
+ const argText = context.sourceCode.getText(arg);
42
+ context.report({
43
+ node,
44
+ messageId: 'preferAssertNotOkOverExpectFalse',
45
+ fix: (fixer) => fixer.replaceText(node, `assert.notOk(${argText})`),
46
+ });
47
+ }
48
+ },
49
+ };
50
+ },
51
+ };
52
+
53
+ export { preferAssertNotOkOverExpectFalseRule };
54
+ //# sourceMappingURL=prefer-assert-not-ok-over-expect-false.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prefer-assert-not-ok-over-expect-false.mjs","sources":["../../../../src/plugins/vitest-coding-style/rules/prefer-assert-not-ok-over-expect-false.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAYO,MAAM,oCAAoC,GAG7C;AACF,IAAA,IAAI,EAAE;AACJ,QAAA,IAAI,EAAE,YAAY;AAClB,QAAA,IAAI,EAAE;AACJ,YAAA,WAAW,EACT,0EAA0E;AAC7E,SAAA;AACD,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,MAAM,EAAE,EAAE;AACV,QAAA,QAAQ,EAAE;AACR,YAAA,gCAAgC,EAC9B,sDAAsD;AACzD,SAAA;AACF,KAAA;AACD,IAAA,cAAc,EAAE,EAAE;AAClB,IAAA,MAAM,EAAE,CAAC,OAAO,KAAI;QAClB,MAAM,cAAc,GAAG,WAAW,CAAC,iBAAiB,CAAC,OAAO,CAAC;QAE7D,MAAM,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC,cAAc,EAAE;QAEvD,OAAO;AACL,YAAA,cAAc,EAAE,CAAC,IAAI,KAAI;gBACvB,IACE,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,cAAc,CAAC,gBAAgB;oBACpD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,cAAc,CAAC,cAAc;oBACzD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,cAAc,CAAC,UAAU;oBAC5D,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ;oBAC3C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,KAAK,cAAc,CAAC,UAAU;AACvD,oBAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,KAAK,MAAM;oBACpC,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;oBACtC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,cAAc,CAAC,OAAO;oBACjD,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,EACjC;AACA,oBAAA,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;AAE3C,oBAAA,IAAI,GAAG,KAAK,SAAS,EAAE;wBACrB,MAAM,MAAM,GAAG,cAAc,CAAC,qBAAqB,CAAC,GAAG,CAAC,GAAG,CAAC;wBAE5D,MAAM,IAAI,GAAG,OAAO,CAAC,iBAAiB,CAAC,MAAM,CAAC;AAE9C,wBAAA,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,SAAS,CAAC,OAAO,MAAM,CAAC;wBAE3D,IAAI,CAAC,SAAS,EAAE;4BACd;wBACF;oBACF;oBAEA,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC;oBAE/C,OAAO,CAAC,MAAM,CAAC;wBACb,IAAI;AACJ,wBAAA,SAAS,EAAE,kCAAkC;AAC7C,wBAAA,GAAG,EAAE,CAAC,KAAK,KAAK,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,CAAA,aAAA,EAAgB,OAAO,GAAG,CAAC;AACpE,qBAAA,CAAC;gBACJ;YACF,CAAC;SACF;IACH,CAAC;;;;;"}
@@ -0,0 +1,6 @@
1
+ import { type TSESLint } from '@typescript-eslint/utils';
2
+ type MessageIds = 'preferAssertOverAssertOk';
3
+ type Options = readonly [];
4
+ export declare const preferAssertOverAssertOkRule: TSESLint.RuleModule<MessageIds, Options>;
5
+ export {};
6
+ //# sourceMappingURL=prefer-assert-over-assert-ok.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prefer-assert-over-assert-ok.d.mts","sourceRoot":"","sources":["../../../../src/plugins/vitest-coding-style/rules/prefer-assert-over-assert-ok.mts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAEzE,KAAK,UAAU,GAAG,0BAA0B,CAAC;AAE7C,KAAK,OAAO,GAAG,SAAS,EAAE,CAAC;AAE3B,eAAO,MAAM,4BAA4B,EAAE,QAAQ,CAAC,UAAU,CAC5D,UAAU,EACV,OAAO,CAiCR,CAAC"}
@@ -0,0 +1,35 @@
1
+ import { AST_NODE_TYPES } from '@typescript-eslint/utils';
2
+
3
+ const preferAssertOverAssertOkRule = {
4
+ meta: {
5
+ type: 'suggestion',
6
+ docs: {
7
+ description: 'Prefer assert(X) over assert.ok(X), assert.isOk(X).',
8
+ },
9
+ fixable: 'code',
10
+ schema: [],
11
+ messages: {
12
+ preferAssertOverAssertOk: 'Use assert(X) instead of assert.ok(X), assert.isOk(X).',
13
+ },
14
+ },
15
+ defaultOptions: [],
16
+ create: (context) => ({
17
+ MemberExpression: (node) => {
18
+ if (node.object.type === AST_NODE_TYPES.Identifier &&
19
+ node.object.name === 'assert' &&
20
+ node.property.type === AST_NODE_TYPES.Identifier &&
21
+ (node.property.name === 'ok' || node.property.name === 'isOk') &&
22
+ node.parent.type === AST_NODE_TYPES.CallExpression &&
23
+ node.parent.callee === node) {
24
+ context.report({
25
+ node,
26
+ messageId: 'preferAssertOverAssertOk',
27
+ fix: (fixer) => fixer.replaceText(node, 'assert'),
28
+ });
29
+ }
30
+ },
31
+ }),
32
+ };
33
+
34
+ export { preferAssertOverAssertOkRule };
35
+ //# sourceMappingURL=prefer-assert-over-assert-ok.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prefer-assert-over-assert-ok.mjs","sources":["../../../../src/plugins/vitest-coding-style/rules/prefer-assert-over-assert-ok.mts"],"sourcesContent":[null],"names":[],"mappings":";;AAMO,MAAM,4BAA4B,GAGrC;AACF,IAAA,IAAI,EAAE;AACJ,QAAA,IAAI,EAAE,YAAY;AAClB,QAAA,IAAI,EAAE;AACJ,YAAA,WAAW,EAAE,qDAAqD;AACnE,SAAA;AACD,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,MAAM,EAAE,EAAE;AACV,QAAA,QAAQ,EAAE;AACR,YAAA,wBAAwB,EACtB,wDAAwD;AAC3D,SAAA;AACF,KAAA;AACD,IAAA,cAAc,EAAE,EAAE;AAClB,IAAA,MAAM,EAAE,CAAC,OAAO,MAAM;AACpB,QAAA,gBAAgB,EAAE,CAAC,IAAI,KAAI;YACzB,IACE,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,cAAc,CAAC,UAAU;AAC9C,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ;AAC7B,gBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,cAAc,CAAC,UAAU;AAChD,iBAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,MAAM,CAAC;AAC9D,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,cAAc,CAAC,cAAc;AAClD,gBAAA,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,IAAI,EAC3B;gBACA,OAAO,CAAC,MAAM,CAAC;oBACb,IAAI;AACJ,oBAAA,SAAS,EAAE,0BAA0B;AACrC,oBAAA,GAAG,EAAE,CAAC,KAAK,KAAK,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,QAAQ,CAAC;AAClD,iBAAA,CAAC;YACJ;QACF,CAAC;KACF,CAAC;;;;;"}
@@ -0,0 +1,6 @@
1
+ import { type TSESLint } from '@typescript-eslint/utils';
2
+ type MessageIds = 'preferAssertOverExpectTrue';
3
+ type Options = readonly [];
4
+ export declare const preferAssertOverExpectTrueRule: TSESLint.RuleModule<MessageIds, Options>;
5
+ export {};
6
+ //# sourceMappingURL=prefer-assert-over-expect-true.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prefer-assert-over-expect-true.d.mts","sourceRoot":"","sources":["../../../../src/plugins/vitest-coding-style/rules/prefer-assert-over-expect-true.mts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,QAAQ,EACd,MAAM,0BAA0B,CAAC;AAIlC,KAAK,UAAU,GAAG,4BAA4B,CAAC;AAE/C,KAAK,OAAO,GAAG,SAAS,EAAE,CAAC;AAE3B,eAAO,MAAM,8BAA8B,EAAE,QAAQ,CAAC,UAAU,CAC9D,UAAU,EACV,OAAO,CA2DR,CAAC"}
@@ -0,0 +1,54 @@
1
+ import { ESLintUtils, AST_NODE_TYPES } from '@typescript-eslint/utils';
2
+ import { Arr } from 'ts-data-forge';
3
+ import * as ts from 'typescript';
4
+
5
+ const preferAssertOverExpectTrueRule = {
6
+ meta: {
7
+ type: 'suggestion',
8
+ docs: {
9
+ description: 'Prefer assert(X) over expect(X).toBe(true) (only if X is boolean)',
10
+ },
11
+ fixable: 'code',
12
+ schema: [],
13
+ messages: {
14
+ preferAssertOverExpectTrue: 'Use assert(X) instead of expect(X).toBe(true)',
15
+ },
16
+ },
17
+ defaultOptions: [],
18
+ create: (context) => {
19
+ const parserServices = ESLintUtils.getParserServices(context);
20
+ const checker = parserServices.program.getTypeChecker();
21
+ return {
22
+ CallExpression: (node) => {
23
+ if (node.callee.type === AST_NODE_TYPES.MemberExpression &&
24
+ node.callee.object.type === AST_NODE_TYPES.CallExpression &&
25
+ node.callee.object.callee.type === AST_NODE_TYPES.Identifier &&
26
+ node.callee.object.callee.name === 'expect' &&
27
+ node.callee.property.type === AST_NODE_TYPES.Identifier &&
28
+ node.callee.property.name === 'toBe' &&
29
+ Arr.isArrayOfLength(node.arguments, 1) &&
30
+ node.arguments[0].type === AST_NODE_TYPES.Literal &&
31
+ node.arguments[0].value === true) {
32
+ const arg = node.callee.object.arguments[0];
33
+ if (arg !== undefined) {
34
+ const tsNode = parserServices.esTreeNodeToTSNodeMap.get(arg);
35
+ const type = checker.getTypeAtLocation(tsNode);
36
+ const isBoolean = (type.flags & ts.TypeFlags.Boolean) !== 0;
37
+ if (!isBoolean) {
38
+ return;
39
+ }
40
+ }
41
+ const argText = context.sourceCode.getText(arg);
42
+ context.report({
43
+ node,
44
+ messageId: 'preferAssertOverExpectTrue',
45
+ fix: (fixer) => fixer.replaceText(node, `assert(${argText})`),
46
+ });
47
+ }
48
+ },
49
+ };
50
+ },
51
+ };
52
+
53
+ export { preferAssertOverExpectTrueRule };
54
+ //# sourceMappingURL=prefer-assert-over-expect-true.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prefer-assert-over-expect-true.mjs","sources":["../../../../src/plugins/vitest-coding-style/rules/prefer-assert-over-expect-true.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAYO,MAAM,8BAA8B,GAGvC;AACF,IAAA,IAAI,EAAE;AACJ,QAAA,IAAI,EAAE,YAAY;AAClB,QAAA,IAAI,EAAE;AACJ,YAAA,WAAW,EACT,mEAAmE;AACtE,SAAA;AACD,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,MAAM,EAAE,EAAE;AACV,QAAA,QAAQ,EAAE;AACR,YAAA,0BAA0B,EACxB,+CAA+C;AAClD,SAAA;AACF,KAAA;AACD,IAAA,cAAc,EAAE,EAAE;AAClB,IAAA,MAAM,EAAE,CAAC,OAAO,KAAI;QAClB,MAAM,cAAc,GAAG,WAAW,CAAC,iBAAiB,CAAC,OAAO,CAAC;QAE7D,MAAM,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC,cAAc,EAAE;QAEvD,OAAO;AACL,YAAA,cAAc,EAAE,CAAC,IAAI,KAAI;gBACvB,IACE,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,cAAc,CAAC,gBAAgB;oBACpD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,cAAc,CAAC,cAAc;oBACzD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,cAAc,CAAC,UAAU;oBAC5D,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ;oBAC3C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,KAAK,cAAc,CAAC,UAAU;AACvD,oBAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,KAAK,MAAM;oBACpC,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;oBACtC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,cAAc,CAAC,OAAO;oBACjD,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,EAChC;AACA,oBAAA,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;AAE3C,oBAAA,IAAI,GAAG,KAAK,SAAS,EAAE;wBACrB,MAAM,MAAM,GAAG,cAAc,CAAC,qBAAqB,CAAC,GAAG,CAAC,GAAG,CAAC;wBAE5D,MAAM,IAAI,GAAG,OAAO,CAAC,iBAAiB,CAAC,MAAM,CAAC;AAE9C,wBAAA,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,SAAS,CAAC,OAAO,MAAM,CAAC;wBAE3D,IAAI,CAAC,SAAS,EAAE;4BACd;wBACF;oBACF;oBAEA,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC;oBAE/C,OAAO,CAAC,MAAM,CAAC;wBACb,IAAI;AACJ,wBAAA,SAAS,EAAE,4BAA4B;AACvC,wBAAA,GAAG,EAAE,CAAC,KAAK,KAAK,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,CAAA,OAAA,EAAU,OAAO,GAAG,CAAC;AAC9D,qBAAA,CAAC;gBACJ;YACF,CAAC;SACF;IACH,CAAC;;;;;"}
@@ -1,4 +1,8 @@
1
1
  export declare const vitestCodingStyleRules: {
2
2
  readonly 'no-expect-to-strict-equal': import("@typescript-eslint/utils/ts-eslint").RuleModule<"useAssert", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
3
+ readonly 'prefer-assert-over-assert-ok': import("@typescript-eslint/utils/ts-eslint").RuleModule<"preferAssertOverAssertOk", readonly [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
4
+ readonly 'prefer-assert-not-ok-over-assert-is-not-ok': import("@typescript-eslint/utils/ts-eslint").RuleModule<"preferAssertOverAssertNotOk", readonly [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
5
+ readonly 'prefer-assert-over-expect-true': import("@typescript-eslint/utils/ts-eslint").RuleModule<"preferAssertOverExpectTrue", readonly [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
6
+ readonly 'prefer-assert-not-ok-over-expect-false': import("@typescript-eslint/utils/ts-eslint").RuleModule<"preferAssertNotOkOverExpectFalse", readonly [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
3
7
  };
4
8
  //# sourceMappingURL=rules.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"rules.d.mts","sourceRoot":"","sources":["../../../../src/plugins/vitest-coding-style/rules/rules.mts"],"names":[],"mappings":"AAGA,eAAO,MAAM,sBAAsB;;CAEO,CAAC"}
1
+ {"version":3,"file":"rules.d.mts","sourceRoot":"","sources":["../../../../src/plugins/vitest-coding-style/rules/rules.mts"],"names":[],"mappings":"AAOA,eAAO,MAAM,sBAAsB;;;;;;CAUO,CAAC"}
@@ -1,7 +1,15 @@
1
1
  import { noExpectToStrictEqualRule } from './no-expect-to-strict-equal.mjs';
2
+ import { preferAssertNotOkOverAssertIsNotOkRule } from './prefer-assert-not-ok-over-assert-is-not-ok.mjs';
3
+ import { preferAssertNotOkOverExpectFalseRule } from './prefer-assert-not-ok-over-expect-false.mjs';
4
+ import { preferAssertOverAssertOkRule } from './prefer-assert-over-assert-ok.mjs';
5
+ import { preferAssertOverExpectTrueRule } from './prefer-assert-over-expect-true.mjs';
2
6
 
3
7
  const vitestCodingStyleRules = {
4
8
  'no-expect-to-strict-equal': noExpectToStrictEqualRule,
9
+ 'prefer-assert-over-assert-ok': preferAssertOverAssertOkRule,
10
+ 'prefer-assert-not-ok-over-assert-is-not-ok': preferAssertNotOkOverAssertIsNotOkRule,
11
+ 'prefer-assert-over-expect-true': preferAssertOverExpectTrueRule,
12
+ 'prefer-assert-not-ok-over-expect-false': preferAssertNotOkOverExpectFalseRule,
5
13
  };
6
14
 
7
15
  export { vitestCodingStyleRules };
@@ -1 +1 @@
1
- {"version":3,"file":"rules.mjs","sources":["../../../../src/plugins/vitest-coding-style/rules/rules.mts"],"sourcesContent":[null],"names":[],"mappings":";;AAGO,MAAM,sBAAsB,GAAG;AACpC,IAAA,2BAA2B,EAAE,yBAAyB;;;;;"}
1
+ {"version":3,"file":"rules.mjs","sources":["../../../../src/plugins/vitest-coding-style/rules/rules.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;AAOO,MAAM,sBAAsB,GAAG;AACpC,IAAA,2BAA2B,EAAE,yBAAyB;AAEtD,IAAA,8BAA8B,EAAE,4BAA4B;AAC5D,IAAA,4CAA4C,EAC1C,sCAAsC;AAExC,IAAA,gCAAgC,EAAE,8BAA8B;AAChE,IAAA,wCAAwC,EACtC,oCAAoC;;;;;"}
@@ -1,4 +1,8 @@
1
1
  export declare const eslintVitestCodingStyleRules: {
2
2
  readonly 'vitest-coding-style/no-expect-to-strict-equal': "error";
3
+ readonly 'vitest-coding-style/prefer-assert-over-assert-ok': "error";
4
+ readonly 'vitest-coding-style/prefer-assert-not-ok-over-assert-is-not-ok': "error";
5
+ readonly 'vitest-coding-style/prefer-assert-over-expect-true': "error";
6
+ readonly 'vitest-coding-style/prefer-assert-not-ok-over-expect-false': "error";
3
7
  };
4
8
  //# sourceMappingURL=eslint-vitest-coding-style-rules.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"eslint-vitest-coding-style-rules.d.mts","sourceRoot":"","sources":["../../src/rules/eslint-vitest-coding-style-rules.mts"],"names":[],"mappings":"AAEA,eAAO,MAAM,4BAA4B;;CAEQ,CAAC"}
1
+ {"version":3,"file":"eslint-vitest-coding-style-rules.d.mts","sourceRoot":"","sources":["../../src/rules/eslint-vitest-coding-style-rules.mts"],"names":[],"mappings":"AAEA,eAAO,MAAM,4BAA4B;;;;;;CAMQ,CAAC"}
@@ -1,5 +1,9 @@
1
1
  const eslintVitestCodingStyleRules = {
2
2
  'vitest-coding-style/no-expect-to-strict-equal': 'error',
3
+ 'vitest-coding-style/prefer-assert-over-assert-ok': 'error',
4
+ 'vitest-coding-style/prefer-assert-not-ok-over-assert-is-not-ok': 'error',
5
+ 'vitest-coding-style/prefer-assert-over-expect-true': 'error',
6
+ 'vitest-coding-style/prefer-assert-not-ok-over-expect-false': 'error',
3
7
  };
4
8
 
5
9
  export { eslintVitestCodingStyleRules };
@@ -1 +1 @@
1
- {"version":3,"file":"eslint-vitest-coding-style-rules.mjs","sources":["../../src/rules/eslint-vitest-coding-style-rules.mts"],"sourcesContent":[null],"names":[],"mappings":"AAEO,MAAM,4BAA4B,GAAG;AAC1C,IAAA,+CAA+C,EAAE,OAAO;;;;;"}
1
+ {"version":3,"file":"eslint-vitest-coding-style-rules.mjs","sources":["../../src/rules/eslint-vitest-coding-style-rules.mts"],"sourcesContent":[null],"names":[],"mappings":"AAEO,MAAM,4BAA4B,GAAG;AAC1C,IAAA,+CAA+C,EAAE,OAAO;AACxD,IAAA,kDAAkD,EAAE,OAAO;AAC3D,IAAA,gEAAgE,EAAE,OAAO;AACzE,IAAA,oDAAoD,EAAE,OAAO;AAC7D,IAAA,4DAA4D,EAAE,OAAO;;;;;"}
@@ -1,6 +1,7 @@
1
1
  import { type Linter } from 'eslint';
2
2
  /**
3
- * Disallow `expect().toStrictEqual()` in favor of `assert.deepStrictEqual()`.
3
+ * Disallow `expect(X).toStrictEqual(Y)` in favor of `assert.deepStrictEqual(X,
4
+ * Y)`, as the former also checks type equality between X and Y.
4
5
  *
5
6
  * ```md
6
7
  * | key | value |
@@ -13,8 +14,68 @@ import { type Linter } from 'eslint';
13
14
  declare namespace NoExpectToStrictEqual {
14
15
  type RuleEntry = Linter.StringSeverity;
15
16
  }
17
+ /**
18
+ * Prefer assert(X) over assert.ok(X), assert.isOk(X).
19
+ *
20
+ * ```md
21
+ * | key | value |
22
+ * | :--------- | :--------- |
23
+ * | type | suggestion |
24
+ * | deprecated | false |
25
+ * | fixable | code |
26
+ * ```
27
+ */
28
+ declare namespace PreferAssertOverAssertOk {
29
+ type RuleEntry = Linter.StringSeverity;
30
+ }
31
+ /**
32
+ * Prefer assert.notOk(X) over assert.isNotOk(X).
33
+ *
34
+ * ```md
35
+ * | key | value |
36
+ * | :--------- | :--------- |
37
+ * | type | suggestion |
38
+ * | deprecated | false |
39
+ * | fixable | code |
40
+ * ```
41
+ */
42
+ declare namespace PreferAssertNotOkOverAssertIsNotOk {
43
+ type RuleEntry = Linter.StringSeverity;
44
+ }
45
+ /**
46
+ * Prefer assert(X) over expect(X).toBe(true) (only if X is boolean)
47
+ *
48
+ * ```md
49
+ * | key | value |
50
+ * | :--------- | :--------- |
51
+ * | type | suggestion |
52
+ * | deprecated | false |
53
+ * | fixable | code |
54
+ * ```
55
+ */
56
+ declare namespace PreferAssertOverExpectTrue {
57
+ type RuleEntry = Linter.StringSeverity;
58
+ }
59
+ /**
60
+ * Prefer assert.notOk(X) over expect(X).toBe(false) (only if X is boolean)
61
+ *
62
+ * ```md
63
+ * | key | value |
64
+ * | :--------- | :--------- |
65
+ * | type | suggestion |
66
+ * | deprecated | false |
67
+ * | fixable | code |
68
+ * ```
69
+ */
70
+ declare namespace PreferAssertNotOkOverExpectFalse {
71
+ type RuleEntry = Linter.StringSeverity;
72
+ }
16
73
  export type EslintVitestCodingStyleRules = Readonly<{
17
74
  'vitest-coding-style/no-expect-to-strict-equal': NoExpectToStrictEqual.RuleEntry;
75
+ 'vitest-coding-style/prefer-assert-over-assert-ok': PreferAssertOverAssertOk.RuleEntry;
76
+ 'vitest-coding-style/prefer-assert-not-ok-over-assert-is-not-ok': PreferAssertNotOkOverAssertIsNotOk.RuleEntry;
77
+ 'vitest-coding-style/prefer-assert-over-expect-true': PreferAssertOverExpectTrue.RuleEntry;
78
+ 'vitest-coding-style/prefer-assert-not-ok-over-expect-false': PreferAssertNotOkOverExpectFalse.RuleEntry;
18
79
  }>;
19
80
  export {};
20
81
  //# sourceMappingURL=eslint-vitest-coding-style-rules.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"eslint-vitest-coding-style-rules.d.mts","sourceRoot":"","sources":["../../../src/types/rules/eslint-vitest-coding-style-rules.mts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,QAAQ,CAAC;AAErC;;;;;;;;;;GAUG;AACH,kBAAU,qBAAqB,CAAC;IAC9B,KAAY,SAAS,GAAG,MAAM,CAAC,cAAc,CAAC;CAC/C;AAED,MAAM,MAAM,4BAA4B,GAAG,QAAQ,CAAC;IAClD,+CAA+C,EAAE,qBAAqB,CAAC,SAAS,CAAC;CAClF,CAAC,CAAC"}
1
+ {"version":3,"file":"eslint-vitest-coding-style-rules.d.mts","sourceRoot":"","sources":["../../../src/types/rules/eslint-vitest-coding-style-rules.mts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,QAAQ,CAAC;AAErC;;;;;;;;;;;GAWG;AACH,kBAAU,qBAAqB,CAAC;IAC9B,KAAY,SAAS,GAAG,MAAM,CAAC,cAAc,CAAC;CAC/C;AAED;;;;;;;;;;GAUG;AACH,kBAAU,wBAAwB,CAAC;IACjC,KAAY,SAAS,GAAG,MAAM,CAAC,cAAc,CAAC;CAC/C;AAED;;;;;;;;;;GAUG;AACH,kBAAU,kCAAkC,CAAC;IAC3C,KAAY,SAAS,GAAG,MAAM,CAAC,cAAc,CAAC;CAC/C;AAED;;;;;;;;;;GAUG;AACH,kBAAU,0BAA0B,CAAC;IACnC,KAAY,SAAS,GAAG,MAAM,CAAC,cAAc,CAAC;CAC/C;AAED;;;;;;;;;;GAUG;AACH,kBAAU,gCAAgC,CAAC;IACzC,KAAY,SAAS,GAAG,MAAM,CAAC,cAAc,CAAC;CAC/C;AAED,MAAM,MAAM,4BAA4B,GAAG,QAAQ,CAAC;IAClD,+CAA+C,EAAE,qBAAqB,CAAC,SAAS,CAAC;IACjF,kDAAkD,EAAE,wBAAwB,CAAC,SAAS,CAAC;IACvF,gEAAgE,EAAE,kCAAkC,CAAC,SAAS,CAAC;IAC/G,oDAAoD,EAAE,0BAA0B,CAAC,SAAS,CAAC;IAC3F,4DAA4D,EAAE,gCAAgC,CAAC,SAAS,CAAC;CAC1G,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "eslint-config-typed",
3
- "version": "3.13.6",
3
+ "version": "3.14.0",
4
4
  "private": false,
5
5
  "keywords": [
6
6
  "typescript"
@@ -83,7 +83,7 @@
83
83
  "eslint-plugin-import-x": "^4.16.1",
84
84
  "eslint-plugin-jest": "29.1.0",
85
85
  "eslint-plugin-jsx-a11y": "6.10.2",
86
- "eslint-plugin-math": "^0.13.0",
86
+ "eslint-plugin-math": "^0.13.1",
87
87
  "eslint-plugin-n": "^17.23.1",
88
88
  "eslint-plugin-playwright": "2.3.0",
89
89
  "eslint-plugin-prefer-arrow-functions": "3.9.1",
@@ -121,7 +121,7 @@
121
121
  "@types/json-schema": "^7.0.15",
122
122
  "@types/micromatch": "^4.0.10",
123
123
  "@types/node": "^24.10.1",
124
- "@types/react": "^19.2.6",
124
+ "@types/react": "^19.2.7",
125
125
  "@typescript-eslint/rule-tester": "8.47.0",
126
126
  "@vitest/coverage-v8": "^4.0.10",
127
127
  "@vitest/ui": "^4.0.10",
@@ -141,11 +141,11 @@
141
141
  "prettier-plugin-organize-imports": "^4.3.0",
142
142
  "prettier-plugin-packagejson": "^2.5.19",
143
143
  "react": "^19.2.0",
144
- "rollup": "^4.53.2",
144
+ "rollup": "^4.53.3",
145
145
  "semantic-release": "^25.0.2",
146
146
  "ts-fortress": "^6.1.0",
147
147
  "ts-morph": "^27.0.2",
148
- "ts-repo-utils": "^7.8.2",
148
+ "ts-repo-utils": "^7.9.2",
149
149
  "ts-type-forge": "^2.3.0",
150
150
  "tslib": "^2.8.1",
151
151
  "tsx": "^4.20.6",
@@ -17,13 +17,13 @@ export const noExpectToStrictEqualRule: TSESLint.RuleModule<MessageIds> = {
17
17
  type: 'suggestion',
18
18
  docs: {
19
19
  description:
20
- 'Disallow `expect().toStrictEqual()` in favor of `assert.deepStrictEqual()`.',
20
+ 'Disallow `expect(X).toStrictEqual(Y)` in favor of `assert.deepStrictEqual(X, Y)`, as the former also checks type equality between X and Y.',
21
21
  },
22
22
  fixable: 'code',
23
23
  schema: [],
24
24
  messages: {
25
25
  useAssert:
26
- 'Use `assert.deepStrictEqual()` instead of `expect().toStrictEqual()`.',
26
+ 'Use `assert.deepStrictEqual(X, Y)` instead of `expect(X).toStrictEqual(Y)`.',
27
27
  },
28
28
  },
29
29
  defaultOptions: [],
@@ -0,0 +1,95 @@
1
+ import parser from '@typescript-eslint/parser';
2
+ import { RuleTester } from '@typescript-eslint/rule-tester';
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';
7
+
8
+ const ruleTester = new RuleTester({
9
+ languageOptions: {
10
+ parserOptions: {
11
+ sourceType: 'module',
12
+ project: './tsconfig.tests.json',
13
+ },
14
+ parser,
15
+ },
16
+ });
17
+
18
+ ruleTester.run(
19
+ 'prefer-assert-not-ok-over-expect-false',
20
+ preferAssertNotOkOverExpectFalseRule,
21
+ {
22
+ valid: [
23
+ { code: 'assert.notOk(0);' },
24
+ { code: 'expect(0).toBe(true);' },
25
+ { code: 'expect(0).toEqual(false);' },
26
+ ],
27
+ invalid: [
28
+ {
29
+ code: 'expect(Array.isArray({})).toBe(false);',
30
+ output: 'assert.notOk(Array.isArray({}));',
31
+ errors: [{ messageId: 'preferAssertNotOkOverExpectFalse' }],
32
+ },
33
+ ],
34
+ },
35
+ );
36
+
37
+ ruleTester.run(
38
+ 'prefer-assert-over-expect-true',
39
+ preferAssertOverExpectTrueRule,
40
+ {
41
+ valid: [
42
+ { code: 'assert(0);' },
43
+ { code: 'expect(0).toBe(false);' },
44
+ { code: 'expect(0).toEqual(true);' },
45
+ // Non-boolean argument
46
+ { code: 'expect(123).toBe(true);' },
47
+ ],
48
+ invalid: [
49
+ {
50
+ code: 'expect(Array.isArray([{}])).toBe(true);',
51
+ output: 'assert(Array.isArray([{}]));',
52
+ errors: [{ messageId: 'preferAssertOverExpectTrue' }],
53
+ },
54
+ ],
55
+ },
56
+ );
57
+
58
+ ruleTester.run('prefer-assert-over-assert-ok', preferAssertOverAssertOkRule, {
59
+ valid: [
60
+ { code: 'assert(0);' },
61
+ { code: 'assert.notOk(0);' },
62
+ { code: 'foo.ok(0);' },
63
+ ],
64
+ invalid: [
65
+ {
66
+ code: 'assert.ok(Array.isArray([]));',
67
+ output: 'assert(Array.isArray([]));',
68
+ errors: [{ messageId: 'preferAssertOverAssertOk' }],
69
+ },
70
+ {
71
+ code: 'assert.isOk(Array.isArray([]));',
72
+ output: 'assert(Array.isArray([]));',
73
+ errors: [{ messageId: 'preferAssertOverAssertOk' }],
74
+ },
75
+ ],
76
+ });
77
+
78
+ ruleTester.run(
79
+ 'prefer-assert-not-ok-over-assert-is-not-ok',
80
+ preferAssertNotOkOverAssertIsNotOkRule,
81
+ {
82
+ valid: [
83
+ { code: 'assert(0);' },
84
+ { code: 'assert.notOk(0);' },
85
+ { code: 'foo.isNotOk(0);' },
86
+ ],
87
+ invalid: [
88
+ {
89
+ code: 'assert.isNotOk(Array.isArray([]));',
90
+ output: 'assert.notOk(Array.isArray([]));',
91
+ errors: [{ messageId: 'preferAssertOverAssertNotOk' }],
92
+ },
93
+ ],
94
+ },
95
+ );
@@ -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'];
@@ -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;
@@ -2,7 +2,8 @@
2
2
  import { type Linter } from 'eslint';
3
3
 
4
4
  /**
5
- * Disallow `expect().toStrictEqual()` in favor of `assert.deepStrictEqual()`.
5
+ * Disallow `expect(X).toStrictEqual(Y)` in favor of `assert.deepStrictEqual(X,
6
+ * Y)`, as the former also checks type equality between X and Y.
6
7
  *
7
8
  * ```md
8
9
  * | key | value |
@@ -16,6 +17,70 @@ namespace NoExpectToStrictEqual {
16
17
  export type RuleEntry = Linter.StringSeverity;
17
18
  }
18
19
 
20
+ /**
21
+ * Prefer assert(X) over assert.ok(X), assert.isOk(X).
22
+ *
23
+ * ```md
24
+ * | key | value |
25
+ * | :--------- | :--------- |
26
+ * | type | suggestion |
27
+ * | deprecated | false |
28
+ * | fixable | code |
29
+ * ```
30
+ */
31
+ namespace PreferAssertOverAssertOk {
32
+ export type RuleEntry = Linter.StringSeverity;
33
+ }
34
+
35
+ /**
36
+ * Prefer assert.notOk(X) over assert.isNotOk(X).
37
+ *
38
+ * ```md
39
+ * | key | value |
40
+ * | :--------- | :--------- |
41
+ * | type | suggestion |
42
+ * | deprecated | false |
43
+ * | fixable | code |
44
+ * ```
45
+ */
46
+ namespace PreferAssertNotOkOverAssertIsNotOk {
47
+ export type RuleEntry = Linter.StringSeverity;
48
+ }
49
+
50
+ /**
51
+ * Prefer assert(X) over expect(X).toBe(true) (only if X is boolean)
52
+ *
53
+ * ```md
54
+ * | key | value |
55
+ * | :--------- | :--------- |
56
+ * | type | suggestion |
57
+ * | deprecated | false |
58
+ * | fixable | code |
59
+ * ```
60
+ */
61
+ namespace PreferAssertOverExpectTrue {
62
+ export type RuleEntry = Linter.StringSeverity;
63
+ }
64
+
65
+ /**
66
+ * Prefer assert.notOk(X) over expect(X).toBe(false) (only if X is boolean)
67
+ *
68
+ * ```md
69
+ * | key | value |
70
+ * | :--------- | :--------- |
71
+ * | type | suggestion |
72
+ * | deprecated | false |
73
+ * | fixable | code |
74
+ * ```
75
+ */
76
+ namespace PreferAssertNotOkOverExpectFalse {
77
+ export type RuleEntry = Linter.StringSeverity;
78
+ }
79
+
19
80
  export type EslintVitestCodingStyleRules = Readonly<{
20
81
  'vitest-coding-style/no-expect-to-strict-equal': NoExpectToStrictEqual.RuleEntry;
82
+ 'vitest-coding-style/prefer-assert-over-assert-ok': PreferAssertOverAssertOk.RuleEntry;
83
+ 'vitest-coding-style/prefer-assert-not-ok-over-assert-is-not-ok': PreferAssertNotOkOverAssertIsNotOk.RuleEntry;
84
+ 'vitest-coding-style/prefer-assert-over-expect-true': PreferAssertOverExpectTrue.RuleEntry;
85
+ 'vitest-coding-style/prefer-assert-not-ok-over-expect-false': PreferAssertNotOkOverExpectFalse.RuleEntry;
21
86
  }>;