eslint-config-typed 3.14.1 → 4.0.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 (63) hide show
  1. package/README.md +90 -9
  2. package/dist/plugins/vitest-coding-style/rules/prefer-assert-deep-strict-equal-over-deep-equal.d.mts +6 -0
  3. package/dist/plugins/vitest-coding-style/rules/prefer-assert-deep-strict-equal-over-deep-equal.d.mts.map +1 -0
  4. package/dist/plugins/vitest-coding-style/rules/{prefer-assert-over-assert-ok.mjs → prefer-assert-deep-strict-equal-over-deep-equal.mjs} +8 -8
  5. package/dist/plugins/vitest-coding-style/rules/prefer-assert-deep-strict-equal-over-deep-equal.mjs.map +1 -0
  6. package/dist/plugins/vitest-coding-style/rules/prefer-assert-is-false-over-assert-negation.d.mts +6 -0
  7. package/dist/plugins/vitest-coding-style/rules/prefer-assert-is-false-over-assert-negation.d.mts.map +1 -0
  8. package/dist/plugins/vitest-coding-style/rules/prefer-assert-is-false-over-assert-negation.mjs +41 -0
  9. package/dist/plugins/vitest-coding-style/rules/prefer-assert-is-false-over-assert-negation.mjs.map +1 -0
  10. package/dist/plugins/vitest-coding-style/rules/prefer-assert-is-false-over-assert-not-ok.d.mts +6 -0
  11. package/dist/plugins/vitest-coding-style/rules/prefer-assert-is-false-over-assert-not-ok.d.mts.map +1 -0
  12. package/dist/plugins/vitest-coding-style/rules/{prefer-assert-not-ok-over-assert-is-not-ok.mjs → prefer-assert-is-false-over-assert-not-ok.mjs} +8 -8
  13. package/dist/plugins/vitest-coding-style/rules/prefer-assert-is-false-over-assert-not-ok.mjs.map +1 -0
  14. package/dist/plugins/vitest-coding-style/rules/prefer-assert-is-false-over-expect-false.d.mts +6 -0
  15. package/dist/plugins/vitest-coding-style/rules/prefer-assert-is-false-over-expect-false.d.mts.map +1 -0
  16. package/dist/plugins/vitest-coding-style/rules/{prefer-assert-not-ok-over-expect-false.mjs → prefer-assert-is-false-over-expect-false.mjs} +7 -7
  17. package/dist/plugins/vitest-coding-style/rules/prefer-assert-is-false-over-expect-false.mjs.map +1 -0
  18. package/dist/plugins/vitest-coding-style/rules/prefer-assert-is-true-over-assert-negated-is-false.d.mts +6 -0
  19. package/dist/plugins/vitest-coding-style/rules/prefer-assert-is-true-over-assert-negated-is-false.d.mts.map +1 -0
  20. package/dist/plugins/vitest-coding-style/rules/prefer-assert-is-true-over-assert-negated-is-false.mjs +41 -0
  21. package/dist/plugins/vitest-coding-style/rules/prefer-assert-is-true-over-assert-negated-is-false.mjs.map +1 -0
  22. package/dist/plugins/vitest-coding-style/rules/prefer-assert-is-true-over-assert.d.mts +6 -0
  23. package/dist/plugins/vitest-coding-style/rules/prefer-assert-is-true-over-assert.d.mts.map +1 -0
  24. package/dist/plugins/vitest-coding-style/rules/prefer-assert-is-true-over-assert.mjs +52 -0
  25. package/dist/plugins/vitest-coding-style/rules/prefer-assert-is-true-over-assert.mjs.map +1 -0
  26. package/dist/plugins/vitest-coding-style/rules/prefer-assert-is-true-over-expect-true.d.mts +6 -0
  27. package/dist/plugins/vitest-coding-style/rules/{prefer-assert-not-ok-over-expect-false.d.mts.map → prefer-assert-is-true-over-expect-true.d.mts.map} +1 -1
  28. package/dist/plugins/vitest-coding-style/rules/{prefer-assert-over-expect-true.mjs → prefer-assert-is-true-over-expect-true.mjs} +7 -7
  29. package/dist/plugins/vitest-coding-style/rules/{prefer-assert-not-ok-over-expect-false.mjs.map → prefer-assert-is-true-over-expect-true.mjs.map} +1 -1
  30. package/dist/plugins/vitest-coding-style/rules/rules.d.mts +7 -4
  31. package/dist/plugins/vitest-coding-style/rules/rules.d.mts.map +1 -1
  32. package/dist/plugins/vitest-coding-style/rules/rules.mjs +14 -8
  33. package/dist/plugins/vitest-coding-style/rules/rules.mjs.map +1 -1
  34. package/dist/rules/eslint-vitest-coding-style-rules.d.mts +7 -4
  35. package/dist/rules/eslint-vitest-coding-style-rules.d.mts.map +1 -1
  36. package/dist/rules/eslint-vitest-coding-style-rules.mjs +7 -4
  37. package/dist/rules/eslint-vitest-coding-style-rules.mjs.map +1 -1
  38. package/dist/types/rules/eslint-vitest-coding-style-rules.d.mts +57 -12
  39. package/dist/types/rules/eslint-vitest-coding-style-rules.d.mts.map +1 -1
  40. package/package.json +4 -1
  41. package/src/plugins/vitest-coding-style/rules/original-assert-api-type.test.mts +147 -0
  42. package/src/plugins/vitest-coding-style/rules/prefer-assert-coding-style-rules.test.mts +118 -40
  43. package/src/plugins/vitest-coding-style/rules/{prefer-assert-over-assert-ok.mts → prefer-assert-deep-strict-equal-over-deep-equal.mts} +8 -8
  44. package/src/plugins/vitest-coding-style/rules/prefer-assert-is-false-over-assert-negation.mts +53 -0
  45. package/src/plugins/vitest-coding-style/rules/{prefer-assert-not-ok-over-assert-is-not-ok.mts → prefer-assert-is-false-over-assert-not-ok.mts} +9 -8
  46. package/src/plugins/vitest-coding-style/rules/{prefer-assert-not-ok-over-expect-false.mts → prefer-assert-is-false-over-expect-false.mts} +8 -7
  47. package/src/plugins/vitest-coding-style/rules/prefer-assert-is-true-over-assert-negated-is-false.mts +53 -0
  48. package/src/plugins/vitest-coding-style/rules/prefer-assert-is-true-over-assert.mts +67 -0
  49. package/src/plugins/vitest-coding-style/rules/{prefer-assert-over-expect-true.mts → prefer-assert-is-true-over-expect-true.mts} +8 -7
  50. package/src/plugins/vitest-coding-style/rules/rules.mts +22 -10
  51. package/src/plugins/vitest-coding-style/rules/vitest-coding-style.d.mts +1614 -0
  52. package/src/rules/eslint-vitest-coding-style-rules.mts +10 -4
  53. package/src/types/rules/eslint-vitest-coding-style-rules.mts +60 -12
  54. package/dist/plugins/vitest-coding-style/rules/prefer-assert-not-ok-over-assert-is-not-ok.d.mts +0 -6
  55. package/dist/plugins/vitest-coding-style/rules/prefer-assert-not-ok-over-assert-is-not-ok.d.mts.map +0 -1
  56. package/dist/plugins/vitest-coding-style/rules/prefer-assert-not-ok-over-assert-is-not-ok.mjs.map +0 -1
  57. package/dist/plugins/vitest-coding-style/rules/prefer-assert-not-ok-over-expect-false.d.mts +0 -6
  58. package/dist/plugins/vitest-coding-style/rules/prefer-assert-over-assert-ok.d.mts +0 -6
  59. package/dist/plugins/vitest-coding-style/rules/prefer-assert-over-assert-ok.d.mts.map +0 -1
  60. package/dist/plugins/vitest-coding-style/rules/prefer-assert-over-assert-ok.mjs.map +0 -1
  61. package/dist/plugins/vitest-coding-style/rules/prefer-assert-over-expect-true.d.mts +0 -6
  62. package/dist/plugins/vitest-coding-style/rules/prefer-assert-over-expect-true.d.mts.map +0 -1
  63. package/dist/plugins/vitest-coding-style/rules/prefer-assert-over-expect-true.mjs.map +0 -1
package/README.md CHANGED
@@ -16,12 +16,12 @@ A comprehensive ESLint configuration package with strongly-typed rule definition
16
16
  - [defineConfig helper](#defineconfig-helper)
17
17
  - [defineKnownRules utility](#defineknownrules-utility)
18
18
  - [withDefaultOption utility](#withdefaultoption-utility)
19
+ - [TypeScript Configuration Files](#typescript-configuration-files)
19
20
  - [Configuration Examples](#configuration-examples)
20
21
  - [TypeScript + React Project](#typescript--react-project)
21
22
  - [Node.js TypeScript Project](#nodejs-typescript-project)
22
23
  - [React + Testing Libraries](#react--testing-libraries)
23
24
  - [VS Code Integration](#vs-code-integration)
24
- - [TypeScript Configuration Files](#typescript-configuration-files)
25
25
  - [Included plugins](#included-plugins)
26
26
  - [API Reference](#api-reference)
27
27
  - [Configuration Functions](#configuration-functions)
@@ -31,6 +31,10 @@ A comprehensive ESLint configuration package with strongly-typed rule definition
31
31
  - [Rule Collections](#rule-collections)
32
32
  - [Exported Pre-configured Rule Options](#exported-pre-configured-rule-options)
33
33
  - [Custom Plugins](#custom-plugins)
34
+ - [Forked plugins](#forked-plugins)
35
+ - [ts-restrictions](#ts-restrictions)
36
+ - [vitest-coding-style](#vitest-coding-style)
37
+ - [react-coding-style](#react-coding-style)
34
38
  - [Type Definitions](#type-definitions)
35
39
  - [Core Types](#core-types)
36
40
  - [Rule Types](#rule-types)
@@ -43,6 +47,7 @@ A comprehensive ESLint configuration package with strongly-typed rule definition
43
47
  - [1. ESLint can't find tsconfig.json](#1-eslint-cant-find-tsconfigjson)
44
48
  - [2. Import resolution errors](#2-import-resolution-errors)
45
49
  - [3. Performance issues](#3-performance-issues)
50
+ - [4. How to Use import-x/no-unused-modules](#4-how-to-use-import-xno-unused-modules)
46
51
  - [Known Limitations](#known-limitations)
47
52
  - [Contributing](#contributing)
48
53
  - [License](#license)
@@ -536,16 +541,21 @@ The shape of the rule option varies depending on the rule, so please check the c
536
541
 
537
542
  ### Custom Plugins
538
543
 
544
+ #### Forked plugins
545
+
539
546
  - **`eslintPluginTotalFunctions`**
540
- - `eslint-plugin-total-functions` with support for Flat Config
547
+ - Flat Config version of `eslint-plugin-total-functions`
541
548
  - **`eslintPluginTreeShakable`**
542
- - `eslint-plugin-tree-shakable` with support for Flat Config
543
- - **`eslintPluginReactCodingStyle`**
544
- - Custom ESLint plugin that codifies this repository's React memo component conventions (namespace imports, `React.memo<Props>`, arrow props naming, etc.). See [`src/plugins/react-coding-style/README.md`](src/plugins/react-coding-style/README.md) for the rationale and examples.
545
- - Provides rules such as `react-coding-style/import-style`, `react-coding-style/component-var-type-annotation`, `react-coding-style/react-memo-type-parameter`, `react-coding-style/react-memo-props-argument-name`, `react-coding-style/props-type-annotation-style`, and `react-coding-style/react-hooks-definition-style`.
546
- - **`eslintPluginTsRestrictions`** - Custom ESLint plugin with additional rules for TypeScript
547
- - Currently, this plugin only provides the `ts-restrictions/no-restricted-syntax` rule (which duplicates ESLint's `no-restricted-syntax` rule).
548
- - Can be used to set the error level to `error` or `warn` as needed.
549
+ - Flat Config version of `eslint-plugin-tree-shakable`
550
+ - **`eslintPluginStrictDependencies`**
551
+ - Flat Config version of `eslint-plugin-strict-dependencies`
552
+
553
+ #### ts-restrictions
554
+
555
+ **`eslintPluginTsRestrictions`** - Custom ESLint plugin with additional rules for TypeScript
556
+
557
+ - Currently, this plugin only provides the `ts-restrictions/no-restricted-syntax` rule (which duplicates ESLint's `no-restricted-syntax` rule).
558
+ - Can be used to set the error level to `error` or `warn` as needed.
549
559
 
550
560
  Example:
551
561
 
@@ -579,6 +589,77 @@ export default [
579
589
  ] satisfies FlatConfig[];
580
590
  ```
581
591
 
592
+ #### vitest-coding-style
593
+
594
+ **`eslintPluginVitestCodingStyle`** - Opinionated rules that constrain how Vitest `assert`/`expect` APIs are used. Rules that rely on type information (for example `prefer-assert-is-true-over-expect-true` / `prefer-assert-is-false-over-expect-false`) assume the plugin types are loaded via tsconfig; add this plugin type definition to `compilerOptions.types` as shown below.
595
+
596
+ ```jsonc
597
+ {
598
+ "compilerOptions": {
599
+ "types": [
600
+ // "vitest/globals", // Remove this line
601
+ "eslint-config-typed/vitest", // Add this line
602
+ "vitest/importMeta",
603
+ ],
604
+ },
605
+ }
606
+ ```
607
+
608
+ This type definition provides overridden `Chai.Assert` type:
609
+
610
+ - Change the type definition of `isTrue`/`isFalse`
611
+ - Change the arg type from `unknown` to `boolean`
612
+ - Change the return type of `isTrue` from `asserts value is true` to `asserts value` so that it can be used as an assertion function like `assert.ok`.
613
+ - Removed optional `message` arg
614
+ - Before
615
+ - `isTrue: (value: unknown, message?: string) => asserts value is true`
616
+ - `isFalse: (value: unknown, message?: string) => asserts value is false`
617
+ - After
618
+ - `isTrue: (value: boolean) => asserts value;`
619
+ - `isFalse: (value: boolean) => asserts value is false`
620
+ - Removed the call signature (`assert(x)`)
621
+ - Removed `deepEqual`, `equal`, `notEqual`, `ok`, `notOk`, `isOk`, `isNotOk`,
622
+ - `deepEqual` : Removed in favor of `assert.deepStrictEqual`
623
+ - `equal` : Removed in favor of `assert.strictEqual`
624
+ - `notEqual` : Removed in favor of `assert.notStrictEqual`
625
+ - `ok` : Removed in favor of `assert.isTrue`
626
+ - `notOk` : Removed in favor of `assert.isFalse`
627
+ - `isOk` : Removed in favor of `assert.isTrue`
628
+ - `isNotOk` : Removed in favor of `assert.isFalse`
629
+ - Removed optional `message` arg from all `assert.*` methods
630
+ - Convert arg types to be readonly
631
+ - Replace `Object` with `object`
632
+
633
+ | Included rules | Description |
634
+ | :--------------------------------------------------- | :-------------------------------------------------------------------------------------------- |
635
+ | `no-expect-to-strict-equal` | Forbid `expect(x).toStrictEqual(y)`; prefer `assert.deepStrictEqual(x, y)` |
636
+ | `prefer-assert-deep-strict-equal-over-deep-equal` | Replace `assert.deepEqual(x)` with `assert.deepStrictEqual(x)` |
637
+ | `prefer-assert-is-true-over-assert` | Canonicalize `assert(x)` / `assert.isOk(x)` / `assert.ok(x)` to `assert.isTrue(x)` |
638
+ | `prefer-assert-is-false-over-assert-not-ok` | Canonicalize `assert.isNotOk(x)` / `assert.notOk(x)` to `assert.isFalse(x)` |
639
+ | `prefer-assert-is-false-over-negated-assert-is-true` | Rewrite `assert.isTrue(!x)` to `assert.isFalse(x)` |
640
+ | `prefer-assert-is-true-over-negated-assert-is-false` | Rewrite `assert.isFalse(!x)` to `assert.isTrue(x)` |
641
+ | `prefer-assert-is-true-over-expect-true` | Rewrite `expect(x).toBe(true)` to `assert.isTrue(x)` (only when `x` is boolean; type-aware) |
642
+ | `prefer-assert-is-false-over-expect-false` | Rewrite `expect(x).toBe(false)` to `assert.isFalse(x)` (only when `x` is boolean; type-aware) |
643
+
644
+ #### react-coding-style
645
+
646
+ **`eslintPluginReactCodingStyle`** - Custom ESLint plugin that codifies this repository's React memo component conventions (namespace imports, `React.memo<Props>`, arrow props naming, etc.).
647
+
648
+ - See [`src/plugins/react-coding-style/README.md`](src/plugins/react-coding-style/README.md) for the rationale and examples.
649
+ - Provides rules such as `react-coding-style/import-style`, `react-coding-style/component-var-type-annotation`, `react-coding-style/react-memo-type-parameter`, `react-coding-style/react-memo-props-argument-name`, `react-coding-style/props-type-annotation-style`, and `react-coding-style/react-hooks-definition-style`.
650
+
651
+ | Included rules | Description |
652
+ | :------------------------------- | :-------------------------------------------------------------------------------------------------------------------- |
653
+ | `component-name` | Enforce concise React.memo component variable names (default max length 42; optional pattern) |
654
+ | `component-var-type-annotation` | Forbid React.FC / React.FunctionComponent type annotations; prefer `React.memo<Props>((props) => ...)` |
655
+ | `import-style` | Enforce React import style (`import * as React` by default; configurable to named imports) |
656
+ | `props-type-annotation-style` | Forbid annotating props in the React.memo arrow function; use `React.memo<Props>((props) => ...)` |
657
+ | `react-memo-props-argument-name` | Require the React.memo arrow function to take a single identifier named `props` |
658
+ | `react-memo-type-parameter` | Require `React.memo<Props>` when props exist; forbid type parameter when there are no props |
659
+ | `use-memo-hook-style` | Forbid type assertions/annotations inside and around `React.useMemo`; annotate via type parameter or variable instead |
660
+ | `ban-use-imperative-handle-hook` | Forbid `React.useImperativeHandle`; move logic to the parent component |
661
+ | `display-name` | Require explicit `displayName` on React.memo components |
662
+
582
663
  ### Type Definitions
583
664
 
584
665
  All rules and configurations come with complete TypeScript type definitions:
@@ -0,0 +1,6 @@
1
+ import { type TSESLint } from '@typescript-eslint/utils';
2
+ type MessageIds = 'preferAssertDeepStrictEqual';
3
+ type Options = readonly [];
4
+ export declare const preferAssertDeepStrictEqualOverDeepEqualRule: TSESLint.RuleModule<MessageIds, Options>;
5
+ export {};
6
+ //# sourceMappingURL=prefer-assert-deep-strict-equal-over-deep-equal.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prefer-assert-deep-strict-equal-over-deep-equal.d.mts","sourceRoot":"","sources":["../../../../src/plugins/vitest-coding-style/rules/prefer-assert-deep-strict-equal-over-deep-equal.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,4CAA4C,EAAE,QAAQ,CAAC,UAAU,CAC5E,UAAU,EACV,OAAO,CAiCR,CAAC"}
@@ -1,15 +1,15 @@
1
1
  import { AST_NODE_TYPES } from '@typescript-eslint/utils';
2
2
 
3
- const preferAssertOverAssertOkRule = {
3
+ const preferAssertDeepStrictEqualOverDeepEqualRule = {
4
4
  meta: {
5
5
  type: 'suggestion',
6
6
  docs: {
7
- description: 'Prefer assert(X) over assert.ok(X), assert.isOk(X).',
7
+ description: 'Prefer assert.deepStrictEqual(X) over assert.deepEqual(X).',
8
8
  },
9
9
  fixable: 'code',
10
10
  schema: [],
11
11
  messages: {
12
- preferAssertOverAssertOk: 'Use assert(X) instead of assert.ok(X), assert.isOk(X).',
12
+ preferAssertDeepStrictEqual: 'Use assert.deepStrictEqual(X) instead of assert.deepEqual(X).',
13
13
  },
14
14
  },
15
15
  defaultOptions: [],
@@ -18,18 +18,18 @@ const preferAssertOverAssertOkRule = {
18
18
  if (node.object.type === AST_NODE_TYPES.Identifier &&
19
19
  node.object.name === 'assert' &&
20
20
  node.property.type === AST_NODE_TYPES.Identifier &&
21
- (node.property.name === 'ok' || node.property.name === 'isOk') &&
21
+ node.property.name === 'deepEqual' &&
22
22
  node.parent.type === AST_NODE_TYPES.CallExpression &&
23
23
  node.parent.callee === node) {
24
24
  context.report({
25
25
  node,
26
- messageId: 'preferAssertOverAssertOk',
27
- fix: (fixer) => fixer.replaceText(node, 'assert'),
26
+ messageId: 'preferAssertDeepStrictEqual',
27
+ fix: (fixer) => fixer.replaceText(node, 'assert.deepStrictEqual'),
28
28
  });
29
29
  }
30
30
  },
31
31
  }),
32
32
  };
33
33
 
34
- export { preferAssertOverAssertOkRule };
35
- //# sourceMappingURL=prefer-assert-over-assert-ok.mjs.map
34
+ export { preferAssertDeepStrictEqualOverDeepEqualRule };
35
+ //# sourceMappingURL=prefer-assert-deep-strict-equal-over-deep-equal.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prefer-assert-deep-strict-equal-over-deep-equal.mjs","sources":["../../../../src/plugins/vitest-coding-style/rules/prefer-assert-deep-strict-equal-over-deep-equal.mts"],"sourcesContent":[null],"names":[],"mappings":";;AAMO,MAAM,4CAA4C,GAGrD;AACF,IAAA,IAAI,EAAE;AACJ,QAAA,IAAI,EAAE,YAAY;AAClB,QAAA,IAAI,EAAE;AACJ,YAAA,WAAW,EAAE,4DAA4D;AAC1E,SAAA;AACD,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,MAAM,EAAE,EAAE;AACV,QAAA,QAAQ,EAAE;AACR,YAAA,2BAA2B,EACzB,+DAA+D;AAClE,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,WAAW;AAClC,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,wBAAwB,CAAC;AAClE,iBAAA,CAAC;YACJ;QACF,CAAC;KACF,CAAC;;;;;"}
@@ -0,0 +1,6 @@
1
+ import { type TSESLint } from '@typescript-eslint/utils';
2
+ type MessageIds = 'preferAssertIsFalseOverAssertNegation';
3
+ type Options = readonly [];
4
+ export declare const preferAssertIsFalseOverNegatedAssertIsTrueRule: TSESLint.RuleModule<MessageIds, Options>;
5
+ export {};
6
+ //# sourceMappingURL=prefer-assert-is-false-over-assert-negation.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prefer-assert-is-false-over-assert-negation.d.mts","sourceRoot":"","sources":["../../../../src/plugins/vitest-coding-style/rules/prefer-assert-is-false-over-assert-negation.mts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAGzE,KAAK,UAAU,GAAG,uCAAuC,CAAC;AAE1D,KAAK,OAAO,GAAG,SAAS,EAAE,CAAC;AAE3B,eAAO,MAAM,8CAA8C,EAAE,QAAQ,CAAC,UAAU,CAC9E,UAAU,EACV,OAAO,CA2CR,CAAC"}
@@ -0,0 +1,41 @@
1
+ import { AST_NODE_TYPES } from '@typescript-eslint/utils';
2
+ import { Arr } from 'ts-data-forge';
3
+
4
+ const preferAssertIsFalseOverNegatedAssertIsTrueRule = {
5
+ meta: {
6
+ type: 'suggestion',
7
+ docs: {
8
+ description: 'Prefer assert.isFalse(X) over assert.isTrue(!X).',
9
+ },
10
+ fixable: 'code',
11
+ schema: [],
12
+ messages: {
13
+ preferAssertIsFalseOverAssertNegation: 'Use assert.isFalse(X) instead of assert.isTrue(!X).',
14
+ },
15
+ },
16
+ defaultOptions: [],
17
+ create: (context) => ({
18
+ CallExpression: (node) => {
19
+ if (node.callee.type === AST_NODE_TYPES.MemberExpression &&
20
+ node.callee.object.type === AST_NODE_TYPES.Identifier &&
21
+ node.callee.object.name === 'assert' &&
22
+ node.callee.property.type === AST_NODE_TYPES.Identifier &&
23
+ node.callee.property.name === 'isTrue' &&
24
+ Arr.isArrayOfLength(node.arguments, 1)) {
25
+ const [arg] = node.arguments;
26
+ if (arg.type === AST_NODE_TYPES.UnaryExpression &&
27
+ arg.operator === '!') {
28
+ const targetText = context.sourceCode.getText(arg.argument);
29
+ context.report({
30
+ node: arg,
31
+ messageId: 'preferAssertIsFalseOverAssertNegation',
32
+ fix: (fixer) => fixer.replaceText(node, `assert.isFalse(${targetText})`),
33
+ });
34
+ }
35
+ }
36
+ },
37
+ }),
38
+ };
39
+
40
+ export { preferAssertIsFalseOverNegatedAssertIsTrueRule };
41
+ //# sourceMappingURL=prefer-assert-is-false-over-assert-negation.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prefer-assert-is-false-over-assert-negation.mjs","sources":["../../../../src/plugins/vitest-coding-style/rules/prefer-assert-is-false-over-assert-negation.mts"],"sourcesContent":[null],"names":[],"mappings":";;;AAOO,MAAM,8CAA8C,GAGvD;AACF,IAAA,IAAI,EAAE;AACJ,QAAA,IAAI,EAAE,YAAY;AAClB,QAAA,IAAI,EAAE;AACJ,YAAA,WAAW,EAAE,kDAAkD;AAChE,SAAA;AACD,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,MAAM,EAAE,EAAE;AACV,QAAA,QAAQ,EAAE;AACR,YAAA,qCAAqC,EACnC,qDAAqD;AACxD,SAAA;AACF,KAAA;AACD,IAAA,cAAc,EAAE,EAAE;AAClB,IAAA,MAAM,EAAE,CAAC,OAAO,MAAM;AACpB,QAAA,cAAc,EAAE,CAAC,IAAI,KAAI;YACvB,IACE,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,cAAc,CAAC,gBAAgB;gBACpD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,cAAc,CAAC,UAAU;AACrD,gBAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ;gBACpC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,KAAK,cAAc,CAAC,UAAU;AACvD,gBAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,KAAK,QAAQ;gBACtC,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,EACtC;AACA,gBAAA,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS;AAE5B,gBAAA,IACE,GAAG,CAAC,IAAI,KAAK,cAAc,CAAC,eAAe;AAC3C,oBAAA,GAAG,CAAC,QAAQ,KAAK,GAAG,EACpB;AACA,oBAAA,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;oBAE3D,OAAO,CAAC,MAAM,CAAC;AACb,wBAAA,IAAI,EAAE,GAAG;AACT,wBAAA,SAAS,EAAE,uCAAuC;AAClD,wBAAA,GAAG,EAAE,CAAC,KAAK,KACT,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,CAAA,eAAA,EAAkB,UAAU,GAAG,CAAC;AAC3D,qBAAA,CAAC;gBACJ;YACF;QACF,CAAC;KACF,CAAC;;;;;"}
@@ -0,0 +1,6 @@
1
+ import { type TSESLint } from '@typescript-eslint/utils';
2
+ type MessageIds = 'preferAssertIsFalseOverAssertNotOk';
3
+ type Options = readonly [];
4
+ export declare const preferAssertIsFalseOverAssertNotOkRule: TSESLint.RuleModule<MessageIds, Options>;
5
+ export {};
6
+ //# sourceMappingURL=prefer-assert-is-false-over-assert-not-ok.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prefer-assert-is-false-over-assert-not-ok.d.mts","sourceRoot":"","sources":["../../../../src/plugins/vitest-coding-style/rules/prefer-assert-is-false-over-assert-not-ok.mts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAEzE,KAAK,UAAU,GAAG,oCAAoC,CAAC;AAEvD,KAAK,OAAO,GAAG,SAAS,EAAE,CAAC;AAE3B,eAAO,MAAM,sCAAsC,EAAE,QAAQ,CAAC,UAAU,CACtE,UAAU,EACV,OAAO,CAkCR,CAAC"}
@@ -1,15 +1,15 @@
1
1
  import { AST_NODE_TYPES } from '@typescript-eslint/utils';
2
2
 
3
- const preferAssertNotOkOverAssertIsNotOkRule = {
3
+ const preferAssertIsFalseOverAssertNotOkRule = {
4
4
  meta: {
5
5
  type: 'suggestion',
6
6
  docs: {
7
- description: 'Prefer assert.notOk(X) over assert.isNotOk(X).',
7
+ description: 'Prefer assert.isFalse(X) over assert.isNotOk(X), assert.notOk(X).',
8
8
  },
9
9
  fixable: 'code',
10
10
  schema: [],
11
11
  messages: {
12
- preferAssertOverAssertNotOk: 'Use assert.notOk(X) instead of assert.isNotOk(X).',
12
+ preferAssertIsFalseOverAssertNotOk: 'Use assert.isFalse(X) instead of assert.isNotOk(X), assert.notOk(X).',
13
13
  },
14
14
  },
15
15
  defaultOptions: [],
@@ -18,18 +18,18 @@ const preferAssertNotOkOverAssertIsNotOkRule = {
18
18
  if (node.object.type === AST_NODE_TYPES.Identifier &&
19
19
  node.object.name === 'assert' &&
20
20
  node.property.type === AST_NODE_TYPES.Identifier &&
21
- node.property.name === 'isNotOk' &&
21
+ (node.property.name === 'isNotOk' || node.property.name === 'notOk') &&
22
22
  node.parent.type === AST_NODE_TYPES.CallExpression &&
23
23
  node.parent.callee === node) {
24
24
  context.report({
25
25
  node,
26
- messageId: 'preferAssertOverAssertNotOk',
27
- fix: (fixer) => fixer.replaceText(node, 'assert.notOk'),
26
+ messageId: 'preferAssertIsFalseOverAssertNotOk',
27
+ fix: (fixer) => fixer.replaceText(node, 'assert.isFalse'),
28
28
  });
29
29
  }
30
30
  },
31
31
  }),
32
32
  };
33
33
 
34
- export { preferAssertNotOkOverAssertIsNotOkRule };
35
- //# sourceMappingURL=prefer-assert-not-ok-over-assert-is-not-ok.mjs.map
34
+ export { preferAssertIsFalseOverAssertNotOkRule };
35
+ //# sourceMappingURL=prefer-assert-is-false-over-assert-not-ok.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prefer-assert-is-false-over-assert-not-ok.mjs","sources":["../../../../src/plugins/vitest-coding-style/rules/prefer-assert-is-false-over-assert-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,EACT,mEAAmE;AACtE,SAAA;AACD,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,MAAM,EAAE,EAAE;AACV,QAAA,QAAQ,EAAE;AACR,YAAA,kCAAkC,EAChC,sEAAsE;AACzE,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,SAAS,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,OAAO,CAAC;AACpE,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,oCAAoC;AAC/C,oBAAA,GAAG,EAAE,CAAC,KAAK,KAAK,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,gBAAgB,CAAC;AAC1D,iBAAA,CAAC;YACJ;QACF,CAAC;KACF,CAAC;;;;;"}
@@ -0,0 +1,6 @@
1
+ import { type TSESLint } from '@typescript-eslint/utils';
2
+ type MessageIds = 'preferAssertIsFalseOverExpectFalse';
3
+ type Options = readonly [];
4
+ export declare const preferAssertIsFalseOverExpectFalseRule: TSESLint.RuleModule<MessageIds, Options>;
5
+ export {};
6
+ //# sourceMappingURL=prefer-assert-is-false-over-expect-false.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prefer-assert-is-false-over-expect-false.d.mts","sourceRoot":"","sources":["../../../../src/plugins/vitest-coding-style/rules/prefer-assert-is-false-over-expect-false.mts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,QAAQ,EACd,MAAM,0BAA0B,CAAC;AAIlC,KAAK,UAAU,GAAG,oCAAoC,CAAC;AAEvD,KAAK,OAAO,GAAG,SAAS,EAAE,CAAC;AAE3B,eAAO,MAAM,sCAAsC,EAAE,QAAQ,CAAC,UAAU,CACtE,UAAU,EACV,OAAO,CA4DR,CAAC"}
@@ -2,16 +2,16 @@ import { ESLintUtils, AST_NODE_TYPES } from '@typescript-eslint/utils';
2
2
  import { Arr } from 'ts-data-forge';
3
3
  import * as ts from 'typescript';
4
4
 
5
- const preferAssertNotOkOverExpectFalseRule = {
5
+ const preferAssertIsFalseOverExpectFalseRule = {
6
6
  meta: {
7
7
  type: 'suggestion',
8
8
  docs: {
9
- description: 'Prefer assert.notOk(X) over expect(X).toBe(false) (only if X is boolean)',
9
+ description: 'Prefer assert.isFalse(X) over expect(X).toBe(false) (only if X is boolean)',
10
10
  },
11
11
  fixable: 'code',
12
12
  schema: [],
13
13
  messages: {
14
- preferAssertNotOkOverExpectFalse: 'Use assert.notOk(X) instead of expect(X).toBe(false)',
14
+ preferAssertIsFalseOverExpectFalse: 'Use assert.isFalse(X) instead of expect(X).toBe(false)',
15
15
  },
16
16
  },
17
17
  defaultOptions: [],
@@ -41,8 +41,8 @@ const preferAssertNotOkOverExpectFalseRule = {
41
41
  const argText = context.sourceCode.getText(arg);
42
42
  context.report({
43
43
  node,
44
- messageId: 'preferAssertNotOkOverExpectFalse',
45
- fix: (fixer) => fixer.replaceText(node, `assert.notOk(${argText})`),
44
+ messageId: 'preferAssertIsFalseOverExpectFalse',
45
+ fix: (fixer) => fixer.replaceText(node, `assert.isFalse(${argText})`),
46
46
  });
47
47
  }
48
48
  },
@@ -50,5 +50,5 @@ const preferAssertNotOkOverExpectFalseRule = {
50
50
  },
51
51
  };
52
52
 
53
- export { preferAssertNotOkOverExpectFalseRule };
54
- //# sourceMappingURL=prefer-assert-not-ok-over-expect-false.mjs.map
53
+ export { preferAssertIsFalseOverExpectFalseRule };
54
+ //# sourceMappingURL=prefer-assert-is-false-over-expect-false.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prefer-assert-is-false-over-expect-false.mjs","sources":["../../../../src/plugins/vitest-coding-style/rules/prefer-assert-is-false-over-expect-false.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAYO,MAAM,sCAAsC,GAG/C;AACF,IAAA,IAAI,EAAE;AACJ,QAAA,IAAI,EAAE,YAAY;AAClB,QAAA,IAAI,EAAE;AACJ,YAAA,WAAW,EACT,4EAA4E;AAC/E,SAAA;AACD,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,MAAM,EAAE,EAAE;AACV,QAAA,QAAQ,EAAE;AACR,YAAA,kCAAkC,EAChC,wDAAwD;AAC3D,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,oCAAoC;AAC/C,wBAAA,GAAG,EAAE,CAAC,KAAK,KACT,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,CAAA,eAAA,EAAkB,OAAO,GAAG,CAAC;AACxD,qBAAA,CAAC;gBACJ;YACF,CAAC;SACF;IACH,CAAC;;;;;"}
@@ -0,0 +1,6 @@
1
+ import { type TSESLint } from '@typescript-eslint/utils';
2
+ type MessageIds = 'preferAssertIsTrueOverNegatedAssertIsFalse';
3
+ type Options = readonly [];
4
+ export declare const preferAssertIsTrueOverNegatedAssertIsFalseRule: TSESLint.RuleModule<MessageIds, Options>;
5
+ export {};
6
+ //# sourceMappingURL=prefer-assert-is-true-over-assert-negated-is-false.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prefer-assert-is-true-over-assert-negated-is-false.d.mts","sourceRoot":"","sources":["../../../../src/plugins/vitest-coding-style/rules/prefer-assert-is-true-over-assert-negated-is-false.mts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAGzE,KAAK,UAAU,GAAG,4CAA4C,CAAC;AAE/D,KAAK,OAAO,GAAG,SAAS,EAAE,CAAC;AAE3B,eAAO,MAAM,8CAA8C,EAAE,QAAQ,CAAC,UAAU,CAC9E,UAAU,EACV,OAAO,CA2CR,CAAC"}
@@ -0,0 +1,41 @@
1
+ import { AST_NODE_TYPES } from '@typescript-eslint/utils';
2
+ import { Arr } from 'ts-data-forge';
3
+
4
+ const preferAssertIsTrueOverNegatedAssertIsFalseRule = {
5
+ meta: {
6
+ type: 'suggestion',
7
+ docs: {
8
+ description: 'Prefer assert.isTrue(X) over assert.isFalse(!X).',
9
+ },
10
+ fixable: 'code',
11
+ schema: [],
12
+ messages: {
13
+ preferAssertIsTrueOverNegatedAssertIsFalse: 'Use assert.isTrue(X) instead of assert.isFalse(!X).',
14
+ },
15
+ },
16
+ defaultOptions: [],
17
+ create: (context) => ({
18
+ CallExpression: (node) => {
19
+ if (node.callee.type === AST_NODE_TYPES.MemberExpression &&
20
+ node.callee.object.type === AST_NODE_TYPES.Identifier &&
21
+ node.callee.object.name === 'assert' &&
22
+ node.callee.property.type === AST_NODE_TYPES.Identifier &&
23
+ node.callee.property.name === 'isFalse' &&
24
+ Arr.isArrayOfLength(node.arguments, 1)) {
25
+ const [arg] = node.arguments;
26
+ if (arg.type === AST_NODE_TYPES.UnaryExpression &&
27
+ arg.operator === '!') {
28
+ const targetText = context.sourceCode.getText(arg.argument);
29
+ context.report({
30
+ node: arg,
31
+ messageId: 'preferAssertIsTrueOverNegatedAssertIsFalse',
32
+ fix: (fixer) => fixer.replaceText(node, `assert.isTrue(${targetText})`),
33
+ });
34
+ }
35
+ }
36
+ },
37
+ }),
38
+ };
39
+
40
+ export { preferAssertIsTrueOverNegatedAssertIsFalseRule };
41
+ //# sourceMappingURL=prefer-assert-is-true-over-assert-negated-is-false.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prefer-assert-is-true-over-assert-negated-is-false.mjs","sources":["../../../../src/plugins/vitest-coding-style/rules/prefer-assert-is-true-over-assert-negated-is-false.mts"],"sourcesContent":[null],"names":[],"mappings":";;;AAOO,MAAM,8CAA8C,GAGvD;AACF,IAAA,IAAI,EAAE;AACJ,QAAA,IAAI,EAAE,YAAY;AAClB,QAAA,IAAI,EAAE;AACJ,YAAA,WAAW,EAAE,kDAAkD;AAChE,SAAA;AACD,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,MAAM,EAAE,EAAE;AACV,QAAA,QAAQ,EAAE;AACR,YAAA,0CAA0C,EACxC,qDAAqD;AACxD,SAAA;AACF,KAAA;AACD,IAAA,cAAc,EAAE,EAAE;AAClB,IAAA,MAAM,EAAE,CAAC,OAAO,MAAM;AACpB,QAAA,cAAc,EAAE,CAAC,IAAI,KAAI;YACvB,IACE,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,cAAc,CAAC,gBAAgB;gBACpD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,cAAc,CAAC,UAAU;AACrD,gBAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ;gBACpC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,KAAK,cAAc,CAAC,UAAU;AACvD,gBAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,KAAK,SAAS;gBACvC,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,EACtC;AACA,gBAAA,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS;AAE5B,gBAAA,IACE,GAAG,CAAC,IAAI,KAAK,cAAc,CAAC,eAAe;AAC3C,oBAAA,GAAG,CAAC,QAAQ,KAAK,GAAG,EACpB;AACA,oBAAA,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;oBAE3D,OAAO,CAAC,MAAM,CAAC;AACb,wBAAA,IAAI,EAAE,GAAG;AACT,wBAAA,SAAS,EAAE,4CAA4C;AACvD,wBAAA,GAAG,EAAE,CAAC,KAAK,KACT,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,CAAA,cAAA,EAAiB,UAAU,GAAG,CAAC;AAC1D,qBAAA,CAAC;gBACJ;YACF;QACF,CAAC;KACF,CAAC;;;;;"}
@@ -0,0 +1,6 @@
1
+ import { type TSESLint } from '@typescript-eslint/utils';
2
+ type MessageIds = 'preferAssertIsTrueOverAssert';
3
+ type Options = readonly [];
4
+ export declare const preferAssertIsTrueOverAssertRule: TSESLint.RuleModule<MessageIds, Options>;
5
+ export {};
6
+ //# sourceMappingURL=prefer-assert-is-true-over-assert.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prefer-assert-is-true-over-assert.d.mts","sourceRoot":"","sources":["../../../../src/plugins/vitest-coding-style/rules/prefer-assert-is-true-over-assert.mts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAEzE,KAAK,UAAU,GAAG,8BAA8B,CAAC;AAEjD,KAAK,OAAO,GAAG,SAAS,EAAE,CAAC;AAE3B,eAAO,MAAM,gCAAgC,EAAE,QAAQ,CAAC,UAAU,CAChE,UAAU,EACV,OAAO,CA0DR,CAAC"}
@@ -0,0 +1,52 @@
1
+ import { AST_NODE_TYPES } from '@typescript-eslint/utils';
2
+
3
+ const preferAssertIsTrueOverAssertRule = {
4
+ meta: {
5
+ type: 'suggestion',
6
+ docs: {
7
+ description: 'Prefer assert.isTrue(X) over assert(X), assert.isOk(X), assert.ok(X).',
8
+ },
9
+ fixable: 'code',
10
+ schema: [],
11
+ messages: {
12
+ preferAssertIsTrueOverAssert: 'Use assert.isTrue(X) instead of {{method}}(X).',
13
+ },
14
+ },
15
+ defaultOptions: [],
16
+ create: (context) => ({
17
+ CallExpression: (node) => {
18
+ // assert(X) -> assert.isTrue(X)
19
+ if (node.callee.type === AST_NODE_TYPES.Identifier &&
20
+ node.callee.name === 'assert') {
21
+ if (node.arguments.length === 0) {
22
+ return;
23
+ }
24
+ context.report({
25
+ node: node.callee,
26
+ messageId: 'preferAssertIsTrueOverAssert',
27
+ data: { method: 'assert' },
28
+ fix: (fixer) => fixer.replaceText(node.callee, 'assert.isTrue'),
29
+ });
30
+ return;
31
+ }
32
+ // assert.isOk(X) -> assert.isTrue(X)
33
+ if (node.callee.type === AST_NODE_TYPES.MemberExpression) {
34
+ const callee = node.callee;
35
+ if (callee.object.type === AST_NODE_TYPES.Identifier &&
36
+ callee.object.name === 'assert' &&
37
+ callee.property.type === AST_NODE_TYPES.Identifier &&
38
+ (callee.property.name === 'isOk' || callee.property.name === 'ok')) {
39
+ context.report({
40
+ node: callee,
41
+ messageId: 'preferAssertIsTrueOverAssert',
42
+ data: { method: `assert.${callee.property.name}` },
43
+ fix: (fixer) => fixer.replaceText(callee, 'assert.isTrue'),
44
+ });
45
+ }
46
+ }
47
+ },
48
+ }),
49
+ };
50
+
51
+ export { preferAssertIsTrueOverAssertRule };
52
+ //# sourceMappingURL=prefer-assert-is-true-over-assert.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prefer-assert-is-true-over-assert.mjs","sources":["../../../../src/plugins/vitest-coding-style/rules/prefer-assert-is-true-over-assert.mts"],"sourcesContent":[null],"names":[],"mappings":";;AAMO,MAAM,gCAAgC,GAGzC;AACF,IAAA,IAAI,EAAE;AACJ,QAAA,IAAI,EAAE,YAAY;AAClB,QAAA,IAAI,EAAE;AACJ,YAAA,WAAW,EACT,uEAAuE;AAC1E,SAAA;AACD,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,MAAM,EAAE,EAAE;AACV,QAAA,QAAQ,EAAE;AACR,YAAA,4BAA4B,EAC1B,gDAAgD;AACnD,SAAA;AACF,KAAA;AACD,IAAA,cAAc,EAAE,EAAE;AAClB,IAAA,MAAM,EAAE,CAAC,OAAO,MAAM;AACpB,QAAA,cAAc,EAAE,CAAC,IAAI,KAAI;;YAEvB,IACE,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,cAAc,CAAC,UAAU;AAC9C,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,EAC7B;gBACA,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;oBAC/B;gBACF;gBAEA,OAAO,CAAC,MAAM,CAAC;oBACb,IAAI,EAAE,IAAI,CAAC,MAAM;AACjB,oBAAA,SAAS,EAAE,8BAA8B;AACzC,oBAAA,IAAI,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE;AAC1B,oBAAA,GAAG,EAAE,CAAC,KAAK,KAAK,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,eAAe,CAAC;AAChE,iBAAA,CAAC;gBAEF;YACF;;YAIA,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,cAAc,CAAC,gBAAgB,EAAE;AACxD,gBAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM;gBAE1B,IACE,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,cAAc,CAAC,UAAU;AAChD,oBAAA,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ;AAC/B,oBAAA,MAAM,CAAC,QAAQ,CAAC,IAAI,KAAK,cAAc,CAAC,UAAU;AAClD,qBAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,KAAK,MAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,KAAK,IAAI,CAAC,EAClE;oBACA,OAAO,CAAC,MAAM,CAAC;AACb,wBAAA,IAAI,EAAE,MAAM;AACZ,wBAAA,SAAS,EAAE,8BAA8B;wBACzC,IAAI,EAAE,EAAE,MAAM,EAAE,CAAA,OAAA,EAAU,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAA,CAAE,EAAE;AAClD,wBAAA,GAAG,EAAE,CAAC,KAAK,KAAK,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,eAAe,CAAC;AAC3D,qBAAA,CAAC;gBACJ;YACF;QACF,CAAC;KACF,CAAC;;;;;"}
@@ -0,0 +1,6 @@
1
+ import { type TSESLint } from '@typescript-eslint/utils';
2
+ type MessageIds = 'preferAssertIsTrueOverExpectTrue';
3
+ type Options = readonly [];
4
+ export declare const preferAssertIsTrueOverExpectTrueRule: TSESLint.RuleModule<MessageIds, Options>;
5
+ export {};
6
+ //# sourceMappingURL=prefer-assert-is-true-over-expect-true.d.mts.map
@@ -1 +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"}
1
+ {"version":3,"file":"prefer-assert-is-true-over-expect-true.d.mts","sourceRoot":"","sources":["../../../../src/plugins/vitest-coding-style/rules/prefer-assert-is-true-over-expect-true.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,CA4DR,CAAC"}
@@ -2,16 +2,16 @@ import { ESLintUtils, AST_NODE_TYPES } from '@typescript-eslint/utils';
2
2
  import { Arr } from 'ts-data-forge';
3
3
  import * as ts from 'typescript';
4
4
 
5
- const preferAssertOverExpectTrueRule = {
5
+ const preferAssertIsTrueOverExpectTrueRule = {
6
6
  meta: {
7
7
  type: 'suggestion',
8
8
  docs: {
9
- description: 'Prefer assert(X) over expect(X).toBe(true) (only if X is boolean)',
9
+ description: 'Prefer assert.isTrue(X) over expect(X).toBe(true) (only if X is boolean)',
10
10
  },
11
11
  fixable: 'code',
12
12
  schema: [],
13
13
  messages: {
14
- preferAssertOverExpectTrue: 'Use assert(X) instead of expect(X).toBe(true)',
14
+ preferAssertIsTrueOverExpectTrue: 'Use assert.isTrue(X) instead of expect(X).toBe(true)',
15
15
  },
16
16
  },
17
17
  defaultOptions: [],
@@ -41,8 +41,8 @@ const preferAssertOverExpectTrueRule = {
41
41
  const argText = context.sourceCode.getText(arg);
42
42
  context.report({
43
43
  node,
44
- messageId: 'preferAssertOverExpectTrue',
45
- fix: (fixer) => fixer.replaceText(node, `assert(${argText})`),
44
+ messageId: 'preferAssertIsTrueOverExpectTrue',
45
+ fix: (fixer) => fixer.replaceText(node, `assert.isTrue(${argText})`),
46
46
  });
47
47
  }
48
48
  },
@@ -50,5 +50,5 @@ const preferAssertOverExpectTrueRule = {
50
50
  },
51
51
  };
52
52
 
53
- export { preferAssertOverExpectTrueRule };
54
- //# sourceMappingURL=prefer-assert-over-expect-true.mjs.map
53
+ export { preferAssertIsTrueOverExpectTrueRule };
54
+ //# sourceMappingURL=prefer-assert-is-true-over-expect-true.mjs.map
@@ -1 +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;;;;;"}
1
+ {"version":3,"file":"prefer-assert-is-true-over-expect-true.mjs","sources":["../../../../src/plugins/vitest-coding-style/rules/prefer-assert-is-true-over-expect-true.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,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,kCAAkC;AAC7C,wBAAA,GAAG,EAAE,CAAC,KAAK,KACT,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,CAAA,cAAA,EAAiB,OAAO,GAAG,CAAC;AACvD,qBAAA,CAAC;gBACJ;YACF,CAAC;SACF;IACH,CAAC;;;;;"}
@@ -1,8 +1,11 @@
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
+ readonly 'prefer-assert-deep-strict-equal-over-deep-equal': import("@typescript-eslint/utils/ts-eslint").RuleModule<"preferAssertDeepStrictEqual", readonly [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
4
+ readonly 'prefer-assert-is-true-over-assert': import("@typescript-eslint/utils/ts-eslint").RuleModule<"preferAssertIsTrueOverAssert", readonly [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
5
+ readonly 'prefer-assert-is-false-over-assert-not-ok': import("@typescript-eslint/utils/ts-eslint").RuleModule<"preferAssertIsFalseOverAssertNotOk", readonly [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
6
+ readonly 'prefer-assert-is-true-over-expect-true': import("@typescript-eslint/utils/ts-eslint").RuleModule<"preferAssertIsTrueOverExpectTrue", readonly [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
7
+ readonly 'prefer-assert-is-false-over-expect-false': import("@typescript-eslint/utils/ts-eslint").RuleModule<"preferAssertIsFalseOverExpectFalse", readonly [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
8
+ readonly 'prefer-assert-is-false-over-negated-assert-is-true': import("@typescript-eslint/utils/ts-eslint").RuleModule<"preferAssertIsFalseOverAssertNegation", readonly [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
9
+ readonly 'prefer-assert-is-true-over-negated-assert-is-false': import("@typescript-eslint/utils/ts-eslint").RuleModule<"preferAssertIsTrueOverNegatedAssertIsFalse", readonly [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
7
10
  };
8
11
  //# 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":"AAOA,eAAO,MAAM,sBAAsB;;;;;;CAUO,CAAC"}
1
+ {"version":3,"file":"rules.d.mts","sourceRoot":"","sources":["../../../../src/plugins/vitest-coding-style/rules/rules.mts"],"names":[],"mappings":"AAUA,eAAO,MAAM,sBAAsB;;;;;;;;;CAmBO,CAAC"}