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.
- package/README.md +90 -9
- package/dist/plugins/vitest-coding-style/rules/prefer-assert-deep-strict-equal-over-deep-equal.d.mts +6 -0
- package/dist/plugins/vitest-coding-style/rules/prefer-assert-deep-strict-equal-over-deep-equal.d.mts.map +1 -0
- package/dist/plugins/vitest-coding-style/rules/{prefer-assert-over-assert-ok.mjs → prefer-assert-deep-strict-equal-over-deep-equal.mjs} +8 -8
- package/dist/plugins/vitest-coding-style/rules/prefer-assert-deep-strict-equal-over-deep-equal.mjs.map +1 -0
- package/dist/plugins/vitest-coding-style/rules/prefer-assert-is-false-over-assert-negation.d.mts +6 -0
- package/dist/plugins/vitest-coding-style/rules/prefer-assert-is-false-over-assert-negation.d.mts.map +1 -0
- package/dist/plugins/vitest-coding-style/rules/prefer-assert-is-false-over-assert-negation.mjs +41 -0
- package/dist/plugins/vitest-coding-style/rules/prefer-assert-is-false-over-assert-negation.mjs.map +1 -0
- package/dist/plugins/vitest-coding-style/rules/prefer-assert-is-false-over-assert-not-ok.d.mts +6 -0
- package/dist/plugins/vitest-coding-style/rules/prefer-assert-is-false-over-assert-not-ok.d.mts.map +1 -0
- 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
- package/dist/plugins/vitest-coding-style/rules/prefer-assert-is-false-over-assert-not-ok.mjs.map +1 -0
- package/dist/plugins/vitest-coding-style/rules/prefer-assert-is-false-over-expect-false.d.mts +6 -0
- package/dist/plugins/vitest-coding-style/rules/prefer-assert-is-false-over-expect-false.d.mts.map +1 -0
- 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
- package/dist/plugins/vitest-coding-style/rules/prefer-assert-is-false-over-expect-false.mjs.map +1 -0
- package/dist/plugins/vitest-coding-style/rules/prefer-assert-is-true-over-assert-negated-is-false.d.mts +6 -0
- package/dist/plugins/vitest-coding-style/rules/prefer-assert-is-true-over-assert-negated-is-false.d.mts.map +1 -0
- package/dist/plugins/vitest-coding-style/rules/prefer-assert-is-true-over-assert-negated-is-false.mjs +41 -0
- package/dist/plugins/vitest-coding-style/rules/prefer-assert-is-true-over-assert-negated-is-false.mjs.map +1 -0
- package/dist/plugins/vitest-coding-style/rules/prefer-assert-is-true-over-assert.d.mts +6 -0
- package/dist/plugins/vitest-coding-style/rules/prefer-assert-is-true-over-assert.d.mts.map +1 -0
- package/dist/plugins/vitest-coding-style/rules/prefer-assert-is-true-over-assert.mjs +52 -0
- package/dist/plugins/vitest-coding-style/rules/prefer-assert-is-true-over-assert.mjs.map +1 -0
- package/dist/plugins/vitest-coding-style/rules/prefer-assert-is-true-over-expect-true.d.mts +6 -0
- 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
- package/dist/plugins/vitest-coding-style/rules/{prefer-assert-over-expect-true.mjs → prefer-assert-is-true-over-expect-true.mjs} +7 -7
- 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
- package/dist/plugins/vitest-coding-style/rules/rules.d.mts +7 -4
- package/dist/plugins/vitest-coding-style/rules/rules.d.mts.map +1 -1
- package/dist/plugins/vitest-coding-style/rules/rules.mjs +14 -8
- package/dist/plugins/vitest-coding-style/rules/rules.mjs.map +1 -1
- package/dist/rules/eslint-vitest-coding-style-rules.d.mts +7 -4
- package/dist/rules/eslint-vitest-coding-style-rules.d.mts.map +1 -1
- package/dist/rules/eslint-vitest-coding-style-rules.mjs +7 -4
- package/dist/rules/eslint-vitest-coding-style-rules.mjs.map +1 -1
- package/dist/types/rules/eslint-vitest-coding-style-rules.d.mts +57 -12
- package/dist/types/rules/eslint-vitest-coding-style-rules.d.mts.map +1 -1
- package/package.json +4 -1
- package/src/plugins/vitest-coding-style/rules/original-assert-api-type.test.mts +147 -0
- package/src/plugins/vitest-coding-style/rules/prefer-assert-coding-style-rules.test.mts +118 -40
- package/src/plugins/vitest-coding-style/rules/{prefer-assert-over-assert-ok.mts → prefer-assert-deep-strict-equal-over-deep-equal.mts} +8 -8
- package/src/plugins/vitest-coding-style/rules/prefer-assert-is-false-over-assert-negation.mts +53 -0
- 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
- 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
- package/src/plugins/vitest-coding-style/rules/prefer-assert-is-true-over-assert-negated-is-false.mts +53 -0
- package/src/plugins/vitest-coding-style/rules/prefer-assert-is-true-over-assert.mts +67 -0
- package/src/plugins/vitest-coding-style/rules/{prefer-assert-over-expect-true.mts → prefer-assert-is-true-over-expect-true.mts} +8 -7
- package/src/plugins/vitest-coding-style/rules/rules.mts +22 -10
- package/src/plugins/vitest-coding-style/rules/vitest-coding-style.d.mts +1614 -0
- package/src/rules/eslint-vitest-coding-style-rules.mts +10 -4
- package/src/types/rules/eslint-vitest-coding-style-rules.mts +60 -12
- package/dist/plugins/vitest-coding-style/rules/prefer-assert-not-ok-over-assert-is-not-ok.d.mts +0 -6
- package/dist/plugins/vitest-coding-style/rules/prefer-assert-not-ok-over-assert-is-not-ok.d.mts.map +0 -1
- package/dist/plugins/vitest-coding-style/rules/prefer-assert-not-ok-over-assert-is-not-ok.mjs.map +0 -1
- package/dist/plugins/vitest-coding-style/rules/prefer-assert-not-ok-over-expect-false.d.mts +0 -6
- package/dist/plugins/vitest-coding-style/rules/prefer-assert-over-assert-ok.d.mts +0 -6
- package/dist/plugins/vitest-coding-style/rules/prefer-assert-over-assert-ok.d.mts.map +0 -1
- package/dist/plugins/vitest-coding-style/rules/prefer-assert-over-assert-ok.mjs.map +0 -1
- package/dist/plugins/vitest-coding-style/rules/prefer-assert-over-expect-true.d.mts +0 -6
- package/dist/plugins/vitest-coding-style/rules/prefer-assert-over-expect-true.d.mts.map +0 -1
- 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`
|
|
547
|
+
- Flat Config version of `eslint-plugin-total-functions`
|
|
541
548
|
- **`eslintPluginTreeShakable`**
|
|
542
|
-
- `eslint-plugin-tree-shakable`
|
|
543
|
-
- **`
|
|
544
|
-
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
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:
|
package/dist/plugins/vitest-coding-style/rules/prefer-assert-deep-strict-equal-over-deep-equal.d.mts
ADDED
|
@@ -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
|
|
3
|
+
const preferAssertDeepStrictEqualOverDeepEqualRule = {
|
|
4
4
|
meta: {
|
|
5
5
|
type: 'suggestion',
|
|
6
6
|
docs: {
|
|
7
|
-
description: 'Prefer assert(X) over assert.
|
|
7
|
+
description: 'Prefer assert.deepStrictEqual(X) over assert.deepEqual(X).',
|
|
8
8
|
},
|
|
9
9
|
fixable: 'code',
|
|
10
10
|
schema: [],
|
|
11
11
|
messages: {
|
|
12
|
-
|
|
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
|
-
|
|
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: '
|
|
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 {
|
|
35
|
-
//# sourceMappingURL=prefer-assert-over-
|
|
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;;;;;"}
|
package/dist/plugins/vitest-coding-style/rules/prefer-assert-is-false-over-assert-negation.d.mts
ADDED
|
@@ -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
|
package/dist/plugins/vitest-coding-style/rules/prefer-assert-is-false-over-assert-negation.d.mts.map
ADDED
|
@@ -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"}
|
package/dist/plugins/vitest-coding-style/rules/prefer-assert-is-false-over-assert-negation.mjs
ADDED
|
@@ -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
|
package/dist/plugins/vitest-coding-style/rules/prefer-assert-is-false-over-assert-negation.mjs.map
ADDED
|
@@ -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;;;;;"}
|
package/dist/plugins/vitest-coding-style/rules/prefer-assert-is-false-over-assert-not-ok.d.mts
ADDED
|
@@ -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
|
package/dist/plugins/vitest-coding-style/rules/prefer-assert-is-false-over-assert-not-ok.d.mts.map
ADDED
|
@@ -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
|
|
3
|
+
const preferAssertIsFalseOverAssertNotOkRule = {
|
|
4
4
|
meta: {
|
|
5
5
|
type: 'suggestion',
|
|
6
6
|
docs: {
|
|
7
|
-
description: 'Prefer assert.
|
|
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
|
-
|
|
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: '
|
|
27
|
-
fix: (fixer) => fixer.replaceText(node, 'assert.
|
|
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 {
|
|
35
|
-
//# sourceMappingURL=prefer-assert-
|
|
34
|
+
export { preferAssertIsFalseOverAssertNotOkRule };
|
|
35
|
+
//# sourceMappingURL=prefer-assert-is-false-over-assert-not-ok.mjs.map
|
package/dist/plugins/vitest-coding-style/rules/prefer-assert-is-false-over-assert-not-ok.mjs.map
ADDED
|
@@ -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
|
package/dist/plugins/vitest-coding-style/rules/prefer-assert-is-false-over-expect-false.d.mts.map
ADDED
|
@@ -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
|
|
5
|
+
const preferAssertIsFalseOverExpectFalseRule = {
|
|
6
6
|
meta: {
|
|
7
7
|
type: 'suggestion',
|
|
8
8
|
docs: {
|
|
9
|
-
description: 'Prefer assert.
|
|
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
|
-
|
|
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: '
|
|
45
|
-
fix: (fixer) => fixer.replaceText(node, `assert.
|
|
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 {
|
|
54
|
-
//# sourceMappingURL=prefer-assert-
|
|
53
|
+
export { preferAssertIsFalseOverExpectFalseRule };
|
|
54
|
+
//# sourceMappingURL=prefer-assert-is-false-over-expect-false.mjs.map
|
package/dist/plugins/vitest-coding-style/rules/prefer-assert-is-false-over-expect-false.mjs.map
ADDED
|
@@ -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-
|
|
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
|
|
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
|
-
|
|
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: '
|
|
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 {
|
|
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-
|
|
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-
|
|
4
|
-
readonly 'prefer-assert-
|
|
5
|
-
readonly 'prefer-assert-over-
|
|
6
|
-
readonly 'prefer-assert-
|
|
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":"
|
|
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"}
|