eslint-config-typed 3.4.0 → 3.5.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/dist/configs/plugins.d.mts +1 -1
- package/dist/configs/plugins.d.mts.map +1 -1
- package/dist/configs/plugins.mjs +6 -4
- package/dist/configs/plugins.mjs.map +1 -1
- package/dist/configs/typescript-without-rules.mjs +1 -0
- package/dist/configs/typescript-without-rules.mjs.map +1 -1
- package/dist/configs/vitest.d.mts.map +1 -1
- package/dist/configs/vitest.mjs +2 -1
- package/dist/configs/vitest.mjs.map +1 -1
- package/dist/entry-point.mjs +1 -0
- package/dist/entry-point.mjs.map +1 -1
- package/dist/index.mjs +2 -0
- package/dist/index.mjs.map +1 -1
- package/dist/plugins/index.d.mts +1 -0
- package/dist/plugins/index.d.mts.map +1 -1
- package/dist/plugins/index.mjs +1 -0
- package/dist/plugins/index.mjs.map +1 -1
- package/dist/plugins/vitest-coding-style/index.d.mts +2 -0
- package/dist/plugins/vitest-coding-style/index.d.mts.map +1 -0
- package/dist/plugins/vitest-coding-style/index.mjs +2 -0
- package/dist/plugins/vitest-coding-style/index.mjs.map +1 -0
- package/dist/plugins/vitest-coding-style/plugin.d.mts +3 -0
- package/dist/plugins/vitest-coding-style/plugin.d.mts.map +1 -0
- package/dist/plugins/vitest-coding-style/plugin.mjs +8 -0
- package/dist/plugins/vitest-coding-style/plugin.mjs.map +1 -0
- package/dist/plugins/vitest-coding-style/rules/index.d.mts +2 -0
- package/dist/plugins/vitest-coding-style/rules/index.d.mts.map +1 -0
- package/dist/plugins/vitest-coding-style/rules/index.mjs +2 -0
- package/dist/plugins/vitest-coding-style/rules/index.mjs.map +1 -0
- package/dist/plugins/vitest-coding-style/rules/no-expect-to-strict-equal.d.mts +5 -0
- package/dist/plugins/vitest-coding-style/rules/no-expect-to-strict-equal.d.mts.map +1 -0
- package/dist/plugins/vitest-coding-style/rules/no-expect-to-strict-equal.mjs +103 -0
- package/dist/plugins/vitest-coding-style/rules/no-expect-to-strict-equal.mjs.map +1 -0
- package/dist/plugins/vitest-coding-style/rules/rules.d.mts +4 -0
- package/dist/plugins/vitest-coding-style/rules/rules.d.mts.map +1 -0
- package/dist/plugins/vitest-coding-style/rules/rules.mjs +8 -0
- package/dist/plugins/vitest-coding-style/rules/rules.mjs.map +1 -0
- package/dist/rules/eslint-vitest-coding-style-rules.d.mts +4 -0
- package/dist/rules/eslint-vitest-coding-style-rules.d.mts.map +1 -0
- package/dist/rules/eslint-vitest-coding-style-rules.mjs +6 -0
- package/dist/rules/eslint-vitest-coding-style-rules.mjs.map +1 -0
- package/dist/rules/eslint-vitest-rules.d.mts +1 -1
- package/dist/rules/eslint-vitest-rules.mjs +1 -1
- package/dist/rules/eslint-vitest-rules.mjs.map +1 -1
- package/dist/rules/index.d.mts +1 -0
- package/dist/rules/index.d.mts.map +1 -1
- package/dist/rules/index.mjs +1 -0
- package/dist/rules/index.mjs.map +1 -1
- package/dist/types/rules/eslint-vitest-coding-style-rules.d.mts +20 -0
- package/dist/types/rules/eslint-vitest-coding-style-rules.d.mts.map +1 -0
- package/dist/types/rules/eslint-vitest-coding-style-rules.mjs +2 -0
- package/dist/types/rules/eslint-vitest-coding-style-rules.mjs.map +1 -0
- package/dist/types/rules/index.d.mts +1 -0
- package/dist/types/rules/index.d.mts.map +1 -1
- package/package.json +1 -1
- package/src/configs/plugins.mts +12 -9
- package/src/configs/typescript-without-rules.mts +2 -0
- package/src/configs/vitest.mts +5 -2
- package/src/plugins/index.mts +1 -0
- package/src/plugins/vitest-coding-style/index.mts +1 -0
- package/src/plugins/vitest-coding-style/plugin.mts +6 -0
- package/src/plugins/vitest-coding-style/rules/index.mts +1 -0
- package/src/plugins/vitest-coding-style/rules/no-expect-to-strict-equal.mts +160 -0
- package/src/plugins/vitest-coding-style/rules/no-expect-to-strict-equal.test.mts +48 -0
- package/src/plugins/vitest-coding-style/rules/rules.mts +6 -0
- package/src/rules/eslint-vitest-coding-style-rules.mts +5 -0
- package/src/rules/eslint-vitest-rules.mts +1 -1
- package/src/rules/index.mts +1 -0
- package/src/types/rules/eslint-vitest-coding-style-rules.mts +21 -0
- package/src/types/rules/index.mts +1 -0
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { type ESLintPlugin } from '../types/index.mjs';
|
|
2
|
-
export declare const plugins: Record<'@typescript-eslint' | '@stylistic' | 'array-func' | 'cypress' | 'playwright' | 'functional' | 'import-x' | 'jest' | 'vitest' | 'jsx-a11y' | 'prefer-arrow-functions' | 'promise' | 'react' | 'react-hooks' | 'react-refresh' | 'react-perf' | '
|
|
2
|
+
export declare const plugins: Record<'@typescript-eslint' | '@stylistic' | 'array-func' | 'cypress' | 'playwright' | 'functional' | 'import-x' | 'jest' | 'vitest' | 'jsx-a11y' | 'prefer-arrow-functions' | 'promise' | 'react' | 'react-hooks' | 'react-refresh' | 'react-perf' | 'security' | 'testing-library' | 'unicorn' | 'sort-destructure-keys' | 'eslint-plugin' | 'tree-shakable' | 'total-functions' | 'strict-dependencies' | 'custom' | 'react-coding-style' | 'vitest-coding-style', Omit<ESLintPlugin, 'configs'>>;
|
|
3
3
|
//# sourceMappingURL=plugins.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugins.d.mts","sourceRoot":"","sources":["../../src/configs/plugins.mts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"plugins.d.mts","sourceRoot":"","sources":["../../src/configs/plugins.mts"],"names":[],"mappings":"AA4DA,OAAO,EAAE,KAAK,YAAY,EAAmB,MAAM,oBAAoB,CAAC;AAExE,eAAO,MAAM,OAAO,EAAE,MAAM,CACxB,oBAAoB,GACpB,YAAY,GACZ,YAAY,GACZ,SAAS,GACT,YAAY,GACZ,YAAY,GACZ,UAAU,GACV,MAAM,GACN,QAAQ,GACR,UAAU,GACV,wBAAwB,GACxB,SAAS,GACT,OAAO,GACP,aAAa,GACb,eAAe,GACf,YAAY,GACZ,UAAU,GACV,iBAAiB,GACjB,SAAS,GACT,uBAAuB,GACvB,eAAe,GACf,eAAe,GACf,iBAAiB,GACjB,qBAAqB,GACrB,QAAQ,GACR,oBAAoB,GACpB,qBAAqB,EACvB,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC,CAoCW,CAAC"}
|
package/dist/configs/plugins.mjs
CHANGED
|
@@ -24,6 +24,7 @@ import { eslintPluginReactCodingStyle } from '../plugins/react-coding-style/plug
|
|
|
24
24
|
import { eslintPluginStrictDependencies } from '../plugins/strict-dependencies/plugin.mjs';
|
|
25
25
|
import { eslintPluginTotalFunctions } from '../plugins/total-functions/plugin.mjs';
|
|
26
26
|
import { eslintPluginTreeShakable } from '../plugins/tree-shakable/plugin.mjs';
|
|
27
|
+
import { eslintPluginVitestCodingStyle } from '../plugins/vitest-coding-style/plugin.mjs';
|
|
27
28
|
|
|
28
29
|
/* eslint-disable import-x/no-rename-default */
|
|
29
30
|
const plugins = {
|
|
@@ -50,16 +51,17 @@ const plugins = {
|
|
|
50
51
|
'react-refresh': eslintPluginReactRefresh,
|
|
51
52
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
52
53
|
'react-perf': eslintPluginReactPerf,
|
|
53
|
-
'react-coding-style': eslintPluginReactCodingStyle,
|
|
54
54
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
55
55
|
security: eslintPluginSecurity,
|
|
56
|
-
'strict-dependencies': eslintPluginStrictDependencies,
|
|
57
56
|
'testing-library': eslintPluginTestingLibrary,
|
|
58
|
-
'total-functions': eslintPluginTotalFunctions,
|
|
59
57
|
unicorn: eslintPluginUnicorn,
|
|
60
|
-
'tree-shakable': eslintPluginTreeShakable,
|
|
61
58
|
'eslint-plugin': eslintPluginEslintPlugin,
|
|
59
|
+
'tree-shakable': eslintPluginTreeShakable,
|
|
60
|
+
'total-functions': eslintPluginTotalFunctions,
|
|
61
|
+
'strict-dependencies': eslintPluginStrictDependencies,
|
|
62
62
|
custom: eslintPluginCustom,
|
|
63
|
+
'react-coding-style': eslintPluginReactCodingStyle,
|
|
64
|
+
'vitest-coding-style': eslintPluginVitestCodingStyle,
|
|
63
65
|
};
|
|
64
66
|
|
|
65
67
|
export { plugins };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugins.mjs","sources":["../../src/configs/plugins.mts"],"sourcesContent":[null],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"plugins.mjs","sources":["../../src/configs/plugins.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AA8DO,MAAM,OAAO,GA6BhB;AACF,IAAA,oBAAoB,EAAE,gBAAgB;AACtC,IAAA,YAAY,EAAE,SAAS;;AAEvB,IAAA,YAAY,EAAE,qBAAqB;AACnC,IAAA,OAAO,EAAE,mBAAmB;AAC5B,IAAA,UAAU,EAAE,sBAAsB;AAClC,IAAA,UAAU,EAAE,sBAAsB;;AAElC,IAAA,uBAAuB,EAAE,+BAA+B;AACxD,IAAA,UAAU,EAAE,kBAAkB;AAC9B,IAAA,IAAI,EAAE,gBAAgB;AACtB,IAAA,MAAM,EAAE,kBAAkB;;AAE1B,IAAA,UAAU,EAAE,mBAAmB;AAC/B,IAAA,wBAAwB,EAAE,gCAAgC;;AAE1D,IAAA,OAAO,EAAE,mBAAmB;AAC5B,IAAA,KAAK,EAAE,iBAAiB;;AAExB,IAAA,aAAa,EAAE,sBAAiD;AAChE,IAAA,eAAe,EAAE,wBAAwB;;AAEzC,IAAA,YAAY,EAAE,qBAAqB;;AAEnC,IAAA,QAAQ,EAAE,oBAAoB;AAC9B,IAAA,iBAAiB,EAAE,0BAA0B;AAC7C,IAAA,OAAO,EAAE,mBAAmB;AAC5B,IAAA,eAAe,EAAE,wBAAwB;AACzC,IAAA,eAAe,EAAE,wBAAwB;AACzC,IAAA,iBAAiB,EAAE,0BAA0B;AAC7C,IAAA,qBAAqB,EAAE,8BAA8B;AACrD,IAAA,MAAM,EAAE,kBAAkB;AAC1B,IAAA,oBAAoB,EAAE,4BAA4B;AAClD,IAAA,qBAAqB,EAAE,6BAA6B;;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typescript-without-rules.mjs","sources":["../../src/configs/typescript-without-rules.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAKO,MAAM,qCAAqC,GAAG,CAAC,EACpD,gBAAgB,EAChB,eAAe,GAIf,KACA;AACE,IAAA;AACE,QAAA,OAAO,EAAE;YACP,0CAA0C;YAC1C,4CAA4C;YAC5C,4CAA4C;YAC5C,iBAAiB;YACjB,SAAS;YACT,UAAU;YACV,aAAa;AACd,SAAA;AACF,KAAA;AACD,IAAA;AACE,QAAA,eAAe,EAAE;AACf,YAAA,WAAW,EAAE,QAAQ;AACrB,YAAA,MAAM,EAAE,sBAAsB;AAC9B,YAAA,aAAa,EAAE;AACb,gBAAA,OAAO,EAAE,gBAAgB;gBACzB,eAAe;AACf,gBAAA,WAAW,EAAE,QAAQ;AACrB,gBAAA,YAAY,EAAE;AACZ,oBAAA,OAAO,EAAE,IAAI;AACb,oBAAA,aAAa,EAAE,IAAI;AACnB,oBAAA,GAAG,EAAE,IAAI;AACV,iBAAA;gBACD,SAAS,EAAE,IAAI;AACf,gBAAA,UAAU,EAAE,QAAQ;AACrB,aAAA;AACD,YAAA,OAAO,EAAE;gBACP,GAAG,OAAO,CAAC,MAAM;AAClB,aAAA;AACF,SAAA;AACD,QAAA,aAAa,EAAE;AACb,YAAA,cAAc,EAAE,KAAK;AACrB,YAAA,6BAA6B,EAAE,IAAI;AACpC,SAAA;QACD,OAAO;AACP,QAAA,QAAQ,EAAE;AACR,YAAA,GAAG,2BAA2B;AAC/B,SAAA;AACF,KAAA;;AAGL;AACA;AACA;AACA,MAAM,oBAAoB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAU;AAErE,MAAM,aAAa,GAAG;AACpB,IAAA,GAAG,oBAAoB;IACvB,KAAK;IACL,MAAM;IACN,MAAM;IACN,MAAM;CACE;AAEV;;;;;AAKG;AACH,MAAM,2BAA2B,GAAG;AAClC,IAAA,qBAAqB,EAAE,aAAa;AACpC,IAAA,kCAAkC,EAAE,CAAC,cAAc,EAAE,qBAAqB,CAAC;AAC3E,IAAA,kBAAkB,EAAE;AAClB,QAAA,2BAA2B,EAAE,oBAAoB;AAClD,KAAA;AACD,IAAA,mBAAmB,EAAE;AACnB,QAAA,UAAU,EAAE,IAAI;;;;;;;;;;;;;;;;;;;AAoBjB,KAAA;CACO;;;;"}
|
|
1
|
+
{"version":3,"file":"typescript-without-rules.mjs","sources":["../../src/configs/typescript-without-rules.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAKO,MAAM,qCAAqC,GAAG,CAAC,EACpD,gBAAgB,EAChB,eAAe,GAIf,KACA;AACE,IAAA;AACE,QAAA,OAAO,EAAE;YACP,0CAA0C;YAC1C,4CAA4C;YAC5C,4CAA4C;YAC5C,iBAAiB;YACjB,SAAS;YACT,UAAU;YACV,aAAa;AACd,SAAA;AACF,KAAA;AACD,IAAA;AACE,QAAA,eAAe,EAAE;AACf,YAAA,WAAW,EAAE,QAAQ;AACrB,YAAA,MAAM,EAAE,sBAAsB;AAC9B,YAAA,aAAa,EAAE;AACb,gBAAA,OAAO,EAAE,gBAAgB;gBACzB,eAAe;AACf,gBAAA,WAAW,EAAE,QAAQ;AACrB,gBAAA,YAAY,EAAE;AACZ,oBAAA,OAAO,EAAE,IAAI;AACb,oBAAA,aAAa,EAAE,IAAI;AACnB,oBAAA,GAAG,EAAE,IAAI;AACV,iBAAA;gBACD,SAAS,EAAE,IAAI;AACf,gBAAA,UAAU,EAAE,QAAQ;AACrB,aAAA;AACD,YAAA,OAAO,EAAE;gBACP,GAAG,OAAO,CAAC,MAAM;AAClB,aAAA;AACF,SAAA;AACD,QAAA,aAAa,EAAE;AACb,YAAA,cAAc,EAAE,KAAK;AACrB,YAAA,6BAA6B,EAAE,IAAI;AACpC,SAAA;QACD,OAAO;AACP,QAAA,QAAQ,EAAE;AACR,YAAA,GAAG,2BAA2B;AAC/B,SAAA;AACF,KAAA;;AAGL;AACA;AACA;AACA,MAAM,oBAAoB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAU;AAErE,MAAM,aAAa,GAAG;AACpB,IAAA,GAAG,oBAAoB;IACvB,KAAK;IACL,MAAM;IACN,MAAM;IACN,MAAM;CACE;AAEV;AAEA;;;;;AAKG;AACH,MAAM,2BAA2B,GAAG;AAClC,IAAA,qBAAqB,EAAE,aAAa;AACpC,IAAA,kCAAkC,EAAE,CAAC,cAAc,EAAE,qBAAqB,CAAC;AAC3E,IAAA,kBAAkB,EAAE;AAClB,QAAA,2BAA2B,EAAE,oBAAoB;AAClD,KAAA;AACD,IAAA,mBAAmB,EAAE;AACnB,QAAA,UAAU,EAAE,IAAI;;;;;;;;;;;;;;;;;;;AAoBjB,KAAA;CACO;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vitest.d.mts","sourceRoot":"","sources":["../../src/configs/vitest.mts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"vitest.d.mts","sourceRoot":"","sources":["../../src/configs/vitest.mts"],"names":[],"mappings":"AAIA,OAAO,EAAoB,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEvE,eAAO,MAAM,qBAAqB,GAAI,QAAQ,SAAS,MAAM,EAAE,KAAG,UAarD,CAAC"}
|
package/dist/configs/vitest.mjs
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { defineKnownRules } from '../types/define-known-rules.mjs';
|
|
2
2
|
import '../rules/eslint-rules.mjs';
|
|
3
|
+
import { eslintVitestCodingStyleRules } from '../rules/eslint-vitest-coding-style-rules.mjs';
|
|
3
4
|
import { eslintVitestRules } from '../rules/eslint-vitest-rules.mjs';
|
|
4
5
|
|
|
5
|
-
// import vitest from 'eslint-plugin-vitest';
|
|
6
6
|
const eslintConfigForVitest = (files) => ({
|
|
7
7
|
...(files === undefined ? {} : { files }),
|
|
8
8
|
languageOptions: {
|
|
@@ -13,6 +13,7 @@ const eslintConfigForVitest = (files) => ({
|
|
|
13
13
|
},
|
|
14
14
|
rules: defineKnownRules({
|
|
15
15
|
...eslintVitestRules,
|
|
16
|
+
...eslintVitestCodingStyleRules,
|
|
16
17
|
}),
|
|
17
18
|
});
|
|
18
19
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vitest.mjs","sources":["../../src/configs/vitest.mts"],"sourcesContent":[null],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"vitest.mjs","sources":["../../src/configs/vitest.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;;MAMa,qBAAqB,GAAG,CAAC,KAAyB,MAC5D;AACC,IAAA,IAAI,KAAK,KAAK,SAAS,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;AACzC,IAAA,eAAe,EAAE;;AAEf,QAAA,OAAO,EAAE;;AAER,SAAA;AACF,KAAA;IACD,KAAK,EAAE,gBAAgB,CAAC;AACtB,QAAA,GAAG,iBAAiB;AACpB,QAAA,GAAG,4BAA4B;KAChC,CAAC;AACH,CAAA;;;;"}
|
package/dist/entry-point.mjs
CHANGED
|
@@ -45,4 +45,5 @@ import 'ts-data-forge';
|
|
|
45
45
|
import 'typescript';
|
|
46
46
|
export { eslintPluginTotalFunctions } from './plugins/total-functions/plugin.mjs';
|
|
47
47
|
export { eslintPluginTreeShakable } from './plugins/tree-shakable/plugin.mjs';
|
|
48
|
+
import '@typescript-eslint/utils';
|
|
48
49
|
//# sourceMappingURL=entry-point.mjs.map
|
package/dist/entry-point.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entry-point.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"entry-point.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/dist/index.mjs
CHANGED
|
@@ -16,6 +16,7 @@ export { eslintPluginReactCodingStyle } from './plugins/react-coding-style/plugi
|
|
|
16
16
|
export { eslintPluginStrictDependencies } from './plugins/strict-dependencies/plugin.mjs';
|
|
17
17
|
export { eslintPluginTotalFunctions } from './plugins/total-functions/plugin.mjs';
|
|
18
18
|
export { eslintPluginTreeShakable } from './plugins/tree-shakable/plugin.mjs';
|
|
19
|
+
export { eslintPluginVitestCodingStyle } from './plugins/vitest-coding-style/plugin.mjs';
|
|
19
20
|
export { allExtensionsRegexUnionStr, allExtensionsStr } from './rules/all-extensions.mjs';
|
|
20
21
|
export { eslintArrayFuncRules } from './rules/eslint-array-func-rules.mjs';
|
|
21
22
|
export { eslintCypressRules } from './rules/eslint-cypress-rules.mjs';
|
|
@@ -40,6 +41,7 @@ export { eslintTestingLibraryRules } from './rules/eslint-testing-library-rules.
|
|
|
40
41
|
export { eslintTotalFunctionsRules } from './rules/eslint-total-functions-rules.mjs';
|
|
41
42
|
export { eslintTreeShakableRules } from './rules/eslint-tree-shakable-rules.mjs';
|
|
42
43
|
export { eslintUnicornRules } from './rules/eslint-unicorn-rules.mjs';
|
|
44
|
+
export { eslintVitestCodingStyleRules } from './rules/eslint-vitest-coding-style-rules.mjs';
|
|
43
45
|
export { eslintVitestRules } from './rules/eslint-vitest-rules.mjs';
|
|
44
46
|
export { typescriptEslintRules } from './rules/typescript-eslint-rules.mjs';
|
|
45
47
|
export { defineConfig } from './types/define-config.mjs';
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/dist/plugins/index.d.mts
CHANGED
|
@@ -3,4 +3,5 @@ export * from './react-coding-style/index.mjs';
|
|
|
3
3
|
export * from './strict-dependencies/index.mjs';
|
|
4
4
|
export * from './total-functions/index.mjs';
|
|
5
5
|
export * from './tree-shakable/index.mjs';
|
|
6
|
+
export * from './vitest-coding-style/index.mjs';
|
|
6
7
|
//# sourceMappingURL=index.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../../src/plugins/index.mts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iCAAiC,CAAC;AAChD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,2BAA2B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../../src/plugins/index.mts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iCAAiC,CAAC;AAChD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,iCAAiC,CAAC"}
|
package/dist/plugins/index.mjs
CHANGED
|
@@ -3,4 +3,5 @@ export { eslintPluginReactCodingStyle } from './react-coding-style/plugin.mjs';
|
|
|
3
3
|
export { eslintPluginStrictDependencies } from './strict-dependencies/plugin.mjs';
|
|
4
4
|
export { eslintPluginTotalFunctions } from './total-functions/plugin.mjs';
|
|
5
5
|
export { eslintPluginTreeShakable } from './tree-shakable/plugin.mjs';
|
|
6
|
+
export { eslintPluginVitestCodingStyle } from './vitest-coding-style/plugin.mjs';
|
|
6
7
|
//# sourceMappingURL=index.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../../../src/plugins/vitest-coding-style/index.mts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.d.mts","sourceRoot":"","sources":["../../../src/plugins/vitest-coding-style/plugin.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAG1D,eAAO,MAAM,6BAA6B,EAAE,IAAI,CAAC,YAAY,EAAE,SAAS,CAE9D,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.mjs","sources":["../../../src/plugins/vitest-coding-style/plugin.mts"],"sourcesContent":[null],"names":[],"mappings":";;AAGO,MAAM,6BAA6B,GAAkC;AAC1E,IAAA,KAAK,EAAE,sBAAsB;;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../../../../src/plugins/vitest-coding-style/rules/index.mts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"no-expect-to-strict-equal.d.mts","sourceRoot":"","sources":["../../../../src/plugins/vitest-coding-style/rules/no-expect-to-strict-equal.mts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,QAAQ,EAEd,MAAM,0BAA0B,CAAC;AAGlC,KAAK,UAAU,GAAG,WAAW,CAAC;AAO9B,eAAO,MAAM,yBAAyB,EAAE,QAAQ,CAAC,UAAU,CAAC,UAAU,CAmErE,CAAC"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { AST_NODE_TYPES } from '@typescript-eslint/utils';
|
|
2
|
+
import { isRecord, hasKey } from 'ts-data-forge';
|
|
3
|
+
|
|
4
|
+
const noExpectToStrictEqualRule = {
|
|
5
|
+
meta: {
|
|
6
|
+
type: 'suggestion',
|
|
7
|
+
docs: {
|
|
8
|
+
description: 'Disallow `expect().toStrictEqual()` in favor of `assert.deepStrictEqual()`.',
|
|
9
|
+
},
|
|
10
|
+
fixable: 'code',
|
|
11
|
+
schema: [],
|
|
12
|
+
messages: {
|
|
13
|
+
useAssert: 'Use `assert.deepStrictEqual()` instead of `expect().toStrictEqual()`.',
|
|
14
|
+
},
|
|
15
|
+
},
|
|
16
|
+
defaultOptions: [],
|
|
17
|
+
create: (context) => {
|
|
18
|
+
const sourceCode = context.sourceCode;
|
|
19
|
+
return {
|
|
20
|
+
CallExpression: (node) => {
|
|
21
|
+
if (!isToStrictEqualInvocation(node)) {
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
const expectCall = node.callee.object;
|
|
25
|
+
if (!isExpectCall(expectCall)) {
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
if (expectCall.arguments.length !== 1 ||
|
|
29
|
+
node.arguments.length !== 1 ||
|
|
30
|
+
expectCall.arguments[0]?.type === AST_NODE_TYPES.SpreadElement ||
|
|
31
|
+
node.arguments[0]?.type === AST_NODE_TYPES.SpreadElement) {
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
const actualArgument = expectCall.arguments[0];
|
|
35
|
+
const expectedArgument = node.arguments[0];
|
|
36
|
+
if (actualArgument === undefined || expectedArgument === undefined) {
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
const actualText = sourceCode.getText(actualArgument);
|
|
40
|
+
const expectedText = sourceCode.getText(expectedArgument);
|
|
41
|
+
const typeArgumentText = getTypeArgumentText(node, sourceCode);
|
|
42
|
+
const expectedWithCast = typeArgumentText === undefined
|
|
43
|
+
? expectedText
|
|
44
|
+
: `(${expectedText}) as ${typeArgumentText}`;
|
|
45
|
+
context.report({
|
|
46
|
+
node,
|
|
47
|
+
messageId: 'useAssert',
|
|
48
|
+
fix: (fixer) => fixer.replaceText(node, `assert.deepStrictEqual(${actualText}, ${expectedWithCast})`),
|
|
49
|
+
});
|
|
50
|
+
},
|
|
51
|
+
};
|
|
52
|
+
},
|
|
53
|
+
};
|
|
54
|
+
const isToStrictEqualInvocation = (
|
|
55
|
+
// eslint-disable-next-line @typescript-eslint/prefer-readonly-parameter-types
|
|
56
|
+
node) => {
|
|
57
|
+
if (node.callee.type !== AST_NODE_TYPES.MemberExpression ||
|
|
58
|
+
node.optional ||
|
|
59
|
+
node.callee.optional ||
|
|
60
|
+
node.callee.computed) {
|
|
61
|
+
return false;
|
|
62
|
+
}
|
|
63
|
+
return (node.callee.property.type === AST_NODE_TYPES.Identifier &&
|
|
64
|
+
node.callee.property.name === 'toStrictEqual' &&
|
|
65
|
+
node.callee.object.type === AST_NODE_TYPES.CallExpression);
|
|
66
|
+
};
|
|
67
|
+
const isExpectCall = (
|
|
68
|
+
// eslint-disable-next-line @typescript-eslint/prefer-readonly-parameter-types
|
|
69
|
+
node) => node.callee.type === AST_NODE_TYPES.Identifier &&
|
|
70
|
+
node.callee.name === 'expect';
|
|
71
|
+
const getTypeArgumentText = (
|
|
72
|
+
// eslint-disable-next-line @typescript-eslint/prefer-readonly-parameter-types
|
|
73
|
+
node,
|
|
74
|
+
// eslint-disable-next-line @typescript-eslint/prefer-readonly-parameter-types
|
|
75
|
+
sourceCode) => {
|
|
76
|
+
const typeArguments = getModernTypeArguments(node) ?? getLegacyTypeParameters(node);
|
|
77
|
+
if (typeArguments === undefined) {
|
|
78
|
+
return undefined;
|
|
79
|
+
}
|
|
80
|
+
const rawText = sourceCode.getText(typeArguments).trim();
|
|
81
|
+
if (rawText.length < 2) {
|
|
82
|
+
return undefined;
|
|
83
|
+
}
|
|
84
|
+
const withoutAngles = rawText
|
|
85
|
+
.replace(/^\s*</u, '')
|
|
86
|
+
.replace(/>\s*$/u, '')
|
|
87
|
+
.trim();
|
|
88
|
+
return withoutAngles.length === 0 ? undefined : withoutAngles;
|
|
89
|
+
};
|
|
90
|
+
const getModernTypeArguments = (
|
|
91
|
+
// eslint-disable-next-line @typescript-eslint/prefer-readonly-parameter-types
|
|
92
|
+
node) => isRecord(node) && hasKey(node, 'typeArguments')
|
|
93
|
+
? node.typeArguments
|
|
94
|
+
: undefined;
|
|
95
|
+
const getLegacyTypeParameters = (
|
|
96
|
+
// eslint-disable-next-line @typescript-eslint/prefer-readonly-parameter-types
|
|
97
|
+
node) => isRecord(node) && hasKey(node, 'typeParameters')
|
|
98
|
+
? // eslint-disable-next-line total-functions/no-unsafe-type-assertion
|
|
99
|
+
node.typeParameters
|
|
100
|
+
: undefined;
|
|
101
|
+
|
|
102
|
+
export { noExpectToStrictEqualRule };
|
|
103
|
+
//# sourceMappingURL=no-expect-to-strict-equal.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"no-expect-to-strict-equal.mjs","sources":["../../../../src/plugins/vitest-coding-style/rules/no-expect-to-strict-equal.mts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rules.d.mts","sourceRoot":"","sources":["../../../../src/plugins/vitest-coding-style/rules/rules.mts"],"names":[],"mappings":"AAGA,eAAO,MAAM,sBAAsB;;CAEO,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rules.mjs","sources":["../../../../src/plugins/vitest-coding-style/rules/rules.mts"],"sourcesContent":[null],"names":[],"mappings":";;AAGO,MAAM,sBAAsB,GAAG;AACpC,IAAA,2BAA2B,EAAE,yBAAyB;;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eslint-vitest-coding-style-rules.d.mts","sourceRoot":"","sources":["../../src/rules/eslint-vitest-coding-style-rules.mts"],"names":[],"mappings":"AAEA,eAAO,MAAM,4BAA4B;;CAEQ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eslint-vitest-coding-style-rules.mjs","sources":["../../src/rules/eslint-vitest-coding-style-rules.mts"],"sourcesContent":[null],"names":[],"mappings":"AAEO,MAAM,4BAA4B,GAAG;AAC1C,IAAA,+CAA+C,EAAE,OAAO;;;;;"}
|
|
@@ -72,7 +72,7 @@ export declare const eslintVitestRules: {
|
|
|
72
72
|
readonly 'vitest/padding-around-test-blocks': "error";
|
|
73
73
|
readonly 'vitest/prefer-called-exactly-once-with': "error";
|
|
74
74
|
readonly 'vitest/prefer-called-once': "error";
|
|
75
|
-
readonly 'vitest/prefer-called-times': "
|
|
75
|
+
readonly 'vitest/prefer-called-times': "off";
|
|
76
76
|
readonly 'vitest/prefer-describe-function-title': "error";
|
|
77
77
|
readonly 'vitest/prefer-expect-type-of': "error";
|
|
78
78
|
readonly 'vitest/prefer-import-in-mock': "error";
|
|
@@ -83,7 +83,7 @@ const eslintVitestRules = {
|
|
|
83
83
|
'vitest/padding-around-test-blocks': 'error',
|
|
84
84
|
'vitest/prefer-called-exactly-once-with': 'error',
|
|
85
85
|
'vitest/prefer-called-once': 'error',
|
|
86
|
-
'vitest/prefer-called-times': '
|
|
86
|
+
'vitest/prefer-called-times': 'off',
|
|
87
87
|
'vitest/prefer-describe-function-title': 'error',
|
|
88
88
|
'vitest/prefer-expect-type-of': 'error',
|
|
89
89
|
'vitest/prefer-import-in-mock': 'error',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eslint-vitest-rules.mjs","sources":["../../src/rules/eslint-vitest-rules.mts"],"sourcesContent":[null],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"eslint-vitest-rules.mjs","sources":["../../src/rules/eslint-vitest-rules.mts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
package/dist/rules/index.d.mts
CHANGED
|
@@ -22,6 +22,7 @@ export * from './eslint-testing-library-rules.mjs';
|
|
|
22
22
|
export * from './eslint-total-functions-rules.mjs';
|
|
23
23
|
export * from './eslint-tree-shakable-rules.mjs';
|
|
24
24
|
export * from './eslint-unicorn-rules.mjs';
|
|
25
|
+
export * from './eslint-vitest-coding-style-rules.mjs';
|
|
25
26
|
export * from './eslint-vitest-rules.mjs';
|
|
26
27
|
export * from './typescript-eslint-rules.mjs';
|
|
27
28
|
//# sourceMappingURL=index.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../../src/rules/index.mts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,iDAAiD,CAAC;AAChE,cAAc,2CAA2C,CAAC;AAC1D,cAAc,4BAA4B,CAAC;AAC3C,cAAc,uCAAuC,CAAC;AACtD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,kCAAkC,CAAC;AACjD,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,oCAAoC,CAAC;AACnD,cAAc,oCAAoC,CAAC;AACnD,cAAc,kCAAkC,CAAC;AACjD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,+BAA+B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../../src/rules/index.mts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,iDAAiD,CAAC;AAChE,cAAc,2CAA2C,CAAC;AAC1D,cAAc,4BAA4B,CAAC;AAC3C,cAAc,uCAAuC,CAAC;AACtD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,kCAAkC,CAAC;AACjD,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,oCAAoC,CAAC;AACnD,cAAc,oCAAoC,CAAC;AACnD,cAAc,kCAAkC,CAAC;AACjD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,wCAAwC,CAAC;AACvD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,+BAA+B,CAAC"}
|
package/dist/rules/index.mjs
CHANGED
|
@@ -22,6 +22,7 @@ export { eslintTestingLibraryRules } from './eslint-testing-library-rules.mjs';
|
|
|
22
22
|
export { eslintTotalFunctionsRules } from './eslint-total-functions-rules.mjs';
|
|
23
23
|
export { eslintTreeShakableRules } from './eslint-tree-shakable-rules.mjs';
|
|
24
24
|
export { eslintUnicornRules } from './eslint-unicorn-rules.mjs';
|
|
25
|
+
export { eslintVitestCodingStyleRules } from './eslint-vitest-coding-style-rules.mjs';
|
|
25
26
|
export { eslintVitestRules } from './eslint-vitest-rules.mjs';
|
|
26
27
|
export { typescriptEslintRules } from './typescript-eslint-rules.mjs';
|
|
27
28
|
//# sourceMappingURL=index.mjs.map
|
package/dist/rules/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { type Linter } from 'eslint';
|
|
2
|
+
/**
|
|
3
|
+
* Disallow `expect().toStrictEqual()` in favor of `assert.deepStrictEqual()`.
|
|
4
|
+
*
|
|
5
|
+
* ```md
|
|
6
|
+
* | key | value |
|
|
7
|
+
* | :--------- | :--------- |
|
|
8
|
+
* | type | suggestion |
|
|
9
|
+
* | deprecated | false |
|
|
10
|
+
* | fixable | code |
|
|
11
|
+
* ```
|
|
12
|
+
*/
|
|
13
|
+
declare namespace NoExpectToStrictEqual {
|
|
14
|
+
type RuleEntry = Linter.StringSeverity;
|
|
15
|
+
}
|
|
16
|
+
export type EslintVitestCodingStyleRules = {
|
|
17
|
+
readonly 'vitest-coding-style/no-expect-to-strict-equal': NoExpectToStrictEqual.RuleEntry;
|
|
18
|
+
};
|
|
19
|
+
export {};
|
|
20
|
+
//# sourceMappingURL=eslint-vitest-coding-style-rules.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eslint-vitest-coding-style-rules.d.mts","sourceRoot":"","sources":["../../../src/types/rules/eslint-vitest-coding-style-rules.mts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,QAAQ,CAAC;AAErC;;;;;;;;;;GAUG;AACH,kBAAU,qBAAqB,CAAC;IAC9B,KAAY,SAAS,GAAG,MAAM,CAAC,cAAc,CAAC;CAC/C;AAED,MAAM,MAAM,4BAA4B,GAAG;IACzC,QAAQ,CAAC,+CAA+C,EAAE,qBAAqB,CAAC,SAAS,CAAC;CAC3F,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eslint-vitest-coding-style-rules.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -23,6 +23,7 @@ export * from './eslint-testing-library-rules.mjs';
|
|
|
23
23
|
export * from './eslint-total-functions-rules.mjs';
|
|
24
24
|
export * from './eslint-tree-shakable-rules.mjs';
|
|
25
25
|
export * from './eslint-unicorn-rules.mjs';
|
|
26
|
+
export * from './eslint-vitest-coding-style-rules.mjs';
|
|
26
27
|
export * from './eslint-vitest-rules.mjs';
|
|
27
28
|
export * from './typescript-eslint-rules.mjs';
|
|
28
29
|
//# sourceMappingURL=index.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../../../src/types/rules/index.mts"],"names":[],"mappings":"AAAA,cAAc,+BAA+B,CAAC;AAC9C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,iDAAiD,CAAC;AAChE,cAAc,2CAA2C,CAAC;AAC1D,cAAc,4BAA4B,CAAC;AAC3C,cAAc,uCAAuC,CAAC;AACtD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,kCAAkC,CAAC;AACjD,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,wCAAwC,CAAC;AACvD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,oCAAoC,CAAC;AACnD,cAAc,oCAAoC,CAAC;AACnD,cAAc,kCAAkC,CAAC;AACjD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,+BAA+B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../../../src/types/rules/index.mts"],"names":[],"mappings":"AAAA,cAAc,+BAA+B,CAAC;AAC9C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,iDAAiD,CAAC;AAChE,cAAc,2CAA2C,CAAC;AAC1D,cAAc,4BAA4B,CAAC;AAC3C,cAAc,uCAAuC,CAAC;AACtD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,kCAAkC,CAAC;AACjD,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,wCAAwC,CAAC;AACvD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,oCAAoC,CAAC;AACnD,cAAc,oCAAoC,CAAC;AACnD,cAAc,kCAAkC,CAAC;AACjD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,wCAAwC,CAAC;AACvD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,+BAA+B,CAAC"}
|
package/package.json
CHANGED
package/src/configs/plugins.mts
CHANGED
|
@@ -55,6 +55,7 @@ import {
|
|
|
55
55
|
eslintPluginStrictDependencies,
|
|
56
56
|
eslintPluginTotalFunctions,
|
|
57
57
|
eslintPluginTreeShakable,
|
|
58
|
+
eslintPluginVitestCodingStyle,
|
|
58
59
|
} from '../plugins/index.mjs';
|
|
59
60
|
|
|
60
61
|
import { type ESLintPlugin, type FlatConfig } from '../types/index.mjs';
|
|
@@ -76,16 +77,17 @@ export const plugins: Record<
|
|
|
76
77
|
| 'react-hooks'
|
|
77
78
|
| 'react-refresh'
|
|
78
79
|
| 'react-perf'
|
|
79
|
-
| 'react-coding-style'
|
|
80
80
|
| 'security'
|
|
81
|
-
| 'strict-dependencies'
|
|
82
81
|
| 'testing-library'
|
|
83
|
-
| 'total-functions'
|
|
84
82
|
| 'unicorn'
|
|
85
83
|
| 'sort-destructure-keys'
|
|
86
|
-
| 'tree-shakable'
|
|
87
84
|
| 'eslint-plugin'
|
|
88
|
-
| '
|
|
85
|
+
| 'tree-shakable'
|
|
86
|
+
| 'total-functions'
|
|
87
|
+
| 'strict-dependencies'
|
|
88
|
+
| 'custom'
|
|
89
|
+
| 'react-coding-style'
|
|
90
|
+
| 'vitest-coding-style',
|
|
89
91
|
Omit<ESLintPlugin, 'configs'>
|
|
90
92
|
> = {
|
|
91
93
|
'@typescript-eslint': typescriptEslint,
|
|
@@ -111,14 +113,15 @@ export const plugins: Record<
|
|
|
111
113
|
'react-refresh': eslintPluginReactRefresh,
|
|
112
114
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
113
115
|
'react-perf': eslintPluginReactPerf,
|
|
114
|
-
'react-coding-style': eslintPluginReactCodingStyle,
|
|
115
116
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
116
117
|
security: eslintPluginSecurity,
|
|
117
|
-
'strict-dependencies': eslintPluginStrictDependencies,
|
|
118
118
|
'testing-library': eslintPluginTestingLibrary,
|
|
119
|
-
'total-functions': eslintPluginTotalFunctions,
|
|
120
119
|
unicorn: eslintPluginUnicorn,
|
|
121
|
-
'tree-shakable': eslintPluginTreeShakable,
|
|
122
120
|
'eslint-plugin': eslintPluginEslintPlugin,
|
|
121
|
+
'tree-shakable': eslintPluginTreeShakable,
|
|
122
|
+
'total-functions': eslintPluginTotalFunctions,
|
|
123
|
+
'strict-dependencies': eslintPluginStrictDependencies,
|
|
123
124
|
custom: eslintPluginCustom,
|
|
125
|
+
'react-coding-style': eslintPluginReactCodingStyle,
|
|
126
|
+
'vitest-coding-style': eslintPluginVitestCodingStyle,
|
|
124
127
|
} as const satisfies FlatConfig['plugins'];
|
package/src/configs/vitest.mts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import {
|
|
2
|
+
eslintVitestCodingStyleRules,
|
|
3
|
+
eslintVitestRules,
|
|
4
|
+
} from '../rules/index.mjs';
|
|
3
5
|
import { defineKnownRules, type FlatConfig } from '../types/index.mjs';
|
|
4
6
|
|
|
5
7
|
export const eslintConfigForVitest = (files?: readonly string[]): FlatConfig =>
|
|
@@ -13,5 +15,6 @@ export const eslintConfigForVitest = (files?: readonly string[]): FlatConfig =>
|
|
|
13
15
|
},
|
|
14
16
|
rules: defineKnownRules({
|
|
15
17
|
...eslintVitestRules,
|
|
18
|
+
...eslintVitestCodingStyleRules,
|
|
16
19
|
}),
|
|
17
20
|
}) as const;
|
package/src/plugins/index.mts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './plugin.mjs';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './rules.mjs';
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
import {
|
|
2
|
+
AST_NODE_TYPES,
|
|
3
|
+
type TSESLint,
|
|
4
|
+
type TSESTree,
|
|
5
|
+
} from '@typescript-eslint/utils';
|
|
6
|
+
import { hasKey, isRecord } from 'ts-data-forge';
|
|
7
|
+
|
|
8
|
+
type MessageIds = 'useAssert';
|
|
9
|
+
|
|
10
|
+
type CallExpressionWithLegacyTypeParameters = TSESTree.CallExpression &
|
|
11
|
+
Readonly<{
|
|
12
|
+
typeParameters?: TSESTree.TSTypeParameterInstantiation;
|
|
13
|
+
}>;
|
|
14
|
+
|
|
15
|
+
export const noExpectToStrictEqualRule: TSESLint.RuleModule<MessageIds> = {
|
|
16
|
+
meta: {
|
|
17
|
+
type: 'suggestion',
|
|
18
|
+
docs: {
|
|
19
|
+
description:
|
|
20
|
+
'Disallow `expect().toStrictEqual()` in favor of `assert.deepStrictEqual()`.',
|
|
21
|
+
},
|
|
22
|
+
fixable: 'code',
|
|
23
|
+
schema: [],
|
|
24
|
+
messages: {
|
|
25
|
+
useAssert:
|
|
26
|
+
'Use `assert.deepStrictEqual()` instead of `expect().toStrictEqual()`.',
|
|
27
|
+
},
|
|
28
|
+
},
|
|
29
|
+
defaultOptions: [],
|
|
30
|
+
create: (context) => {
|
|
31
|
+
const sourceCode = context.sourceCode;
|
|
32
|
+
|
|
33
|
+
return {
|
|
34
|
+
CallExpression: (node) => {
|
|
35
|
+
if (!isToStrictEqualInvocation(node)) {
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
const expectCall = node.callee.object;
|
|
40
|
+
|
|
41
|
+
if (!isExpectCall(expectCall)) {
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
if (
|
|
46
|
+
expectCall.arguments.length !== 1 ||
|
|
47
|
+
node.arguments.length !== 1 ||
|
|
48
|
+
expectCall.arguments[0]?.type === AST_NODE_TYPES.SpreadElement ||
|
|
49
|
+
node.arguments[0]?.type === AST_NODE_TYPES.SpreadElement
|
|
50
|
+
) {
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
const actualArgument = expectCall.arguments[0];
|
|
55
|
+
const expectedArgument = node.arguments[0];
|
|
56
|
+
|
|
57
|
+
if (actualArgument === undefined || expectedArgument === undefined) {
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
const actualText = sourceCode.getText(actualArgument);
|
|
62
|
+
const expectedText = sourceCode.getText(expectedArgument);
|
|
63
|
+
const typeArgumentText = getTypeArgumentText(node, sourceCode);
|
|
64
|
+
|
|
65
|
+
const expectedWithCast =
|
|
66
|
+
typeArgumentText === undefined
|
|
67
|
+
? expectedText
|
|
68
|
+
: `(${expectedText}) as ${typeArgumentText}`;
|
|
69
|
+
|
|
70
|
+
context.report({
|
|
71
|
+
node,
|
|
72
|
+
messageId: 'useAssert',
|
|
73
|
+
fix: (fixer) =>
|
|
74
|
+
fixer.replaceText(
|
|
75
|
+
node,
|
|
76
|
+
`assert.deepStrictEqual(${actualText}, ${expectedWithCast})`,
|
|
77
|
+
),
|
|
78
|
+
});
|
|
79
|
+
},
|
|
80
|
+
};
|
|
81
|
+
},
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
const isToStrictEqualInvocation = (
|
|
85
|
+
// eslint-disable-next-line @typescript-eslint/prefer-readonly-parameter-types
|
|
86
|
+
node: TSESTree.CallExpression,
|
|
87
|
+
): node is TSESTree.CallExpression & {
|
|
88
|
+
callee: TSESTree.MemberExpression & {
|
|
89
|
+
object: TSESTree.CallExpression;
|
|
90
|
+
property: TSESTree.Identifier;
|
|
91
|
+
};
|
|
92
|
+
} => {
|
|
93
|
+
if (
|
|
94
|
+
node.callee.type !== AST_NODE_TYPES.MemberExpression ||
|
|
95
|
+
node.optional ||
|
|
96
|
+
node.callee.optional ||
|
|
97
|
+
node.callee.computed
|
|
98
|
+
) {
|
|
99
|
+
return false;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
return (
|
|
103
|
+
node.callee.property.type === AST_NODE_TYPES.Identifier &&
|
|
104
|
+
node.callee.property.name === 'toStrictEqual' &&
|
|
105
|
+
node.callee.object.type === AST_NODE_TYPES.CallExpression
|
|
106
|
+
);
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
const isExpectCall = (
|
|
110
|
+
// eslint-disable-next-line @typescript-eslint/prefer-readonly-parameter-types
|
|
111
|
+
node: TSESTree.CallExpression,
|
|
112
|
+
): node is TSESTree.CallExpression & {
|
|
113
|
+
callee: TSESTree.Identifier;
|
|
114
|
+
} =>
|
|
115
|
+
node.callee.type === AST_NODE_TYPES.Identifier &&
|
|
116
|
+
node.callee.name === 'expect';
|
|
117
|
+
|
|
118
|
+
const getTypeArgumentText = (
|
|
119
|
+
// eslint-disable-next-line @typescript-eslint/prefer-readonly-parameter-types
|
|
120
|
+
node: TSESTree.CallExpression,
|
|
121
|
+
// eslint-disable-next-line @typescript-eslint/prefer-readonly-parameter-types
|
|
122
|
+
sourceCode: TSESLint.SourceCode,
|
|
123
|
+
): string | undefined => {
|
|
124
|
+
const typeArguments =
|
|
125
|
+
getModernTypeArguments(node) ?? getLegacyTypeParameters(node);
|
|
126
|
+
|
|
127
|
+
if (typeArguments === undefined) {
|
|
128
|
+
return undefined;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
const rawText = sourceCode.getText(typeArguments).trim();
|
|
132
|
+
|
|
133
|
+
if (rawText.length < 2) {
|
|
134
|
+
return undefined;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
const withoutAngles = rawText
|
|
138
|
+
.replace(/^\s*</u, '')
|
|
139
|
+
.replace(/>\s*$/u, '')
|
|
140
|
+
.trim();
|
|
141
|
+
|
|
142
|
+
return withoutAngles.length === 0 ? undefined : withoutAngles;
|
|
143
|
+
};
|
|
144
|
+
|
|
145
|
+
const getModernTypeArguments = (
|
|
146
|
+
// eslint-disable-next-line @typescript-eslint/prefer-readonly-parameter-types
|
|
147
|
+
node: TSESTree.CallExpression,
|
|
148
|
+
): TSESTree.TSTypeParameterInstantiation | undefined =>
|
|
149
|
+
isRecord(node) && hasKey(node, 'typeArguments')
|
|
150
|
+
? node.typeArguments
|
|
151
|
+
: undefined;
|
|
152
|
+
|
|
153
|
+
const getLegacyTypeParameters = (
|
|
154
|
+
// eslint-disable-next-line @typescript-eslint/prefer-readonly-parameter-types
|
|
155
|
+
node: TSESTree.CallExpression,
|
|
156
|
+
): TSESTree.TSTypeParameterInstantiation | undefined =>
|
|
157
|
+
isRecord(node) && hasKey(node, 'typeParameters')
|
|
158
|
+
? // eslint-disable-next-line total-functions/no-unsafe-type-assertion
|
|
159
|
+
(node as CallExpressionWithLegacyTypeParameters).typeParameters
|
|
160
|
+
: undefined;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import parser from '@typescript-eslint/parser';
|
|
2
|
+
import { RuleTester } from '@typescript-eslint/rule-tester';
|
|
3
|
+
import dedent from 'dedent';
|
|
4
|
+
import { noExpectToStrictEqualRule } from './no-expect-to-strict-equal.mjs';
|
|
5
|
+
|
|
6
|
+
const tester = new RuleTester({
|
|
7
|
+
languageOptions: {
|
|
8
|
+
parser,
|
|
9
|
+
parserOptions: {
|
|
10
|
+
ecmaVersion: 2020,
|
|
11
|
+
sourceType: 'module',
|
|
12
|
+
},
|
|
13
|
+
},
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
tester.run('no-expect-to-strict-equal', noExpectToStrictEqualRule, {
|
|
17
|
+
valid: [
|
|
18
|
+
{
|
|
19
|
+
code: 'assert.deepStrictEqual(actual, expected);',
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
code: 'expect(actual).toBe(expected);',
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
code: 'something.expect(actual).toStrictEqual(expected);',
|
|
26
|
+
},
|
|
27
|
+
],
|
|
28
|
+
invalid: [
|
|
29
|
+
{
|
|
30
|
+
code: 'expect(actual).toStrictEqual(expected);',
|
|
31
|
+
output: 'assert.deepStrictEqual(actual, expected);',
|
|
32
|
+
errors: [{ messageId: 'useAssert' }],
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
code: dedent`
|
|
36
|
+
expect(resultError[0]).toStrictEqual<ValidationError>({
|
|
37
|
+
foo: 'bar',
|
|
38
|
+
});
|
|
39
|
+
`,
|
|
40
|
+
output: dedent`
|
|
41
|
+
assert.deepStrictEqual(resultError[0], ({
|
|
42
|
+
foo: 'bar',
|
|
43
|
+
}) as ValidationError);
|
|
44
|
+
`,
|
|
45
|
+
errors: [{ messageId: 'useAssert' }],
|
|
46
|
+
},
|
|
47
|
+
],
|
|
48
|
+
});
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { type ESLintPlugin } from '../../../types/index.mjs';
|
|
2
|
+
import { noExpectToStrictEqualRule } from './no-expect-to-strict-equal.mjs';
|
|
3
|
+
|
|
4
|
+
export const vitestCodingStyleRules = {
|
|
5
|
+
'no-expect-to-strict-equal': noExpectToStrictEqualRule,
|
|
6
|
+
} as const satisfies ESLintPlugin['rules'];
|
|
@@ -92,7 +92,7 @@ export const eslintVitestRules = {
|
|
|
92
92
|
'vitest/padding-around-test-blocks': 'error',
|
|
93
93
|
'vitest/prefer-called-exactly-once-with': 'error',
|
|
94
94
|
'vitest/prefer-called-once': 'error',
|
|
95
|
-
'vitest/prefer-called-times': '
|
|
95
|
+
'vitest/prefer-called-times': 'off',
|
|
96
96
|
'vitest/prefer-describe-function-title': 'error',
|
|
97
97
|
'vitest/prefer-expect-type-of': 'error',
|
|
98
98
|
'vitest/prefer-import-in-mock': 'error',
|
package/src/rules/index.mts
CHANGED
|
@@ -22,5 +22,6 @@ export * from './eslint-testing-library-rules.mjs';
|
|
|
22
22
|
export * from './eslint-total-functions-rules.mjs';
|
|
23
23
|
export * from './eslint-tree-shakable-rules.mjs';
|
|
24
24
|
export * from './eslint-unicorn-rules.mjs';
|
|
25
|
+
export * from './eslint-vitest-coding-style-rules.mjs';
|
|
25
26
|
export * from './eslint-vitest-rules.mjs';
|
|
26
27
|
export * from './typescript-eslint-rules.mjs';
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/* cSpell:disable */
|
|
2
|
+
import { type Linter } from 'eslint';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Disallow `expect().toStrictEqual()` in favor of `assert.deepStrictEqual()`.
|
|
6
|
+
*
|
|
7
|
+
* ```md
|
|
8
|
+
* | key | value |
|
|
9
|
+
* | :--------- | :--------- |
|
|
10
|
+
* | type | suggestion |
|
|
11
|
+
* | deprecated | false |
|
|
12
|
+
* | fixable | code |
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
namespace NoExpectToStrictEqual {
|
|
16
|
+
export type RuleEntry = Linter.StringSeverity;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export type EslintVitestCodingStyleRules = {
|
|
20
|
+
readonly 'vitest-coding-style/no-expect-to-strict-equal': NoExpectToStrictEqual.RuleEntry;
|
|
21
|
+
};
|
|
@@ -23,5 +23,6 @@ export * from './eslint-testing-library-rules.mjs';
|
|
|
23
23
|
export * from './eslint-total-functions-rules.mjs';
|
|
24
24
|
export * from './eslint-tree-shakable-rules.mjs';
|
|
25
25
|
export * from './eslint-unicorn-rules.mjs';
|
|
26
|
+
export * from './eslint-vitest-coding-style-rules.mjs';
|
|
26
27
|
export * from './eslint-vitest-rules.mjs';
|
|
27
28
|
export * from './typescript-eslint-rules.mjs';
|