Skip to content

Commit 66fc380

Browse files
committed
fix: make rules comply with TestingLibraryRuleMeta
1 parent e27403f commit 66fc380

27 files changed

+157
-33
lines changed

lib/create-testing-library-rule/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ export function createTestingLibraryRule<
1919
...remainingConfig
2020
}: Readonly<{
2121
name: string;
22-
meta: TestingLibraryRuleMeta<TMessageIds>;
22+
meta: TestingLibraryRuleMeta<TMessageIds, TOptions>;
2323
defaultOptions: Readonly<TOptions>;
2424
detectionOptions?: Partial<DetectionOptions>;
2525
create: EnhancedRuleCreate<TOptions, TMessageIds, TRuleListener>;

lib/rules/await-async-query.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,12 @@ export default createTestingLibraryRule<Options, MessageIds>({
1919
docs: {
2020
description: 'Enforce promises from async queries to be handled',
2121
category: 'Best Practices',
22-
recommended: 'warn',
22+
recommended: {
23+
dom: 'error',
24+
angular: 'error',
25+
react: 'error',
26+
vue: 'error',
27+
},
2328
},
2429
messages: {
2530
awaitAsyncQuery: 'promise returned from {{ name }} query must be handled',

lib/rules/await-async-utils.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,12 @@ export default createTestingLibraryRule<Options, MessageIds>({
1919
docs: {
2020
description: 'Enforce promises from async utils to be handled',
2121
category: 'Best Practices',
22-
recommended: 'warn',
22+
recommended: {
23+
dom: 'error',
24+
angular: 'error',
25+
react: 'error',
26+
vue: 'error',
27+
},
2328
},
2429
messages: {
2530
awaitAsyncUtil: 'Promise returned from `{{ name }}` must be handled',

lib/rules/await-fire-event.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,12 @@ export default createTestingLibraryRule<Options, MessageIds>({
1919
docs: {
2020
description: 'Enforce promises from fire event methods to be handled',
2121
category: 'Best Practices',
22-
recommended: false,
22+
recommended: {
23+
dom: false,
24+
angular: false,
25+
react: false,
26+
vue: 'error',
27+
},
2328
},
2429
messages: {
2530
awaitFireEvent:

lib/rules/consistent-data-testid.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,12 @@ export default createTestingLibraryRule<Options, MessageIds>({
1919
docs: {
2020
description: 'Ensures consistent usage of `data-testid`',
2121
category: 'Best Practices',
22-
recommended: false,
22+
recommended: {
23+
dom: false,
24+
angular: false,
25+
react: false,
26+
vue: false,
27+
},
2328
},
2429
messages: {
2530
consistentDataTestId: '`{{attr}}` "{{value}}" should match `{{regex}}`',

lib/rules/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { TSESLint } from '@typescript-eslint/experimental-utils';
66
import { importDefault, TestingLibraryRuleMeta } from '../utils';
77

88
type RuleModule = TSESLint.RuleModule<string, unknown[]> & {
9-
meta: TestingLibraryRuleMeta<string>;
9+
meta: TestingLibraryRuleMeta<string, unknown[]>;
1010
};
1111

1212
const rulesDir = __dirname;

lib/rules/no-await-sync-events.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,12 @@ export default createTestingLibraryRule<Options, MessageIds>({
2121
docs: {
2222
description: 'Disallow unnecessary `await` for sync events',
2323
category: 'Best Practices',
24-
recommended: 'error',
24+
recommended: {
25+
dom: false,
26+
angular: false,
27+
react: false,
28+
vue: false,
29+
},
2530
},
2631
messages: {
2732
noAwaitSyncEvents:

lib/rules/no-await-sync-query.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,12 @@ export default createTestingLibraryRule<Options, MessageIds>({
1313
docs: {
1414
description: 'Disallow unnecessary `await` for sync queries',
1515
category: 'Best Practices',
16-
recommended: 'error',
16+
recommended: {
17+
dom: 'error',
18+
angular: 'error',
19+
react: 'error',
20+
vue: 'error',
21+
},
1722
},
1823
messages: {
1924
noAwaitSyncQuery:

lib/rules/no-container.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,12 @@ export default createTestingLibraryRule<Options, MessageIds>({
2020
docs: {
2121
description: 'Disallow the use of container methods',
2222
category: 'Best Practices',
23-
recommended: 'error',
23+
recommended: {
24+
dom: false,
25+
angular: 'error',
26+
react: 'error',
27+
vue: 'error',
28+
},
2429
},
2530
messages: {
2631
noContainer:

lib/rules/no-debug.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,12 @@ export default createTestingLibraryRule<Options, MessageIds>({
2222
docs: {
2323
description: 'Disallow unnecessary debug usages in the tests',
2424
category: 'Best Practices',
25-
recommended: 'warn',
25+
recommended: {
26+
dom: false,
27+
angular: 'error',
28+
react: 'error',
29+
vue: 'error',
30+
},
2631
},
2732
messages: {
2833
noDebug: 'Unexpected debug statement',

lib/rules/no-dom-import.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,12 @@ export default createTestingLibraryRule<Options, MessageIds>({
1818
docs: {
1919
description: 'Disallow importing from DOM Testing Library',
2020
category: 'Best Practices',
21-
recommended: false,
21+
recommended: {
22+
dom: false,
23+
angular: ['error', 'angular'],
24+
react: ['error', 'react'],
25+
vue: ['error', 'vue'],
26+
},
2227
},
2328
messages: {
2429
noDomImport:

lib/rules/no-manual-cleanup.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,12 @@ export default createTestingLibraryRule<Options, MessageIds>({
2828
docs: {
2929
description: 'Disallow the use of `cleanup`',
3030
category: 'Best Practices',
31-
recommended: false,
31+
recommended: {
32+
dom: false,
33+
angular: false,
34+
react: false,
35+
vue: false,
36+
},
3237
},
3338
messages: {
3439
noManualCleanup:

lib/rules/no-node-access.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,12 @@ export default createTestingLibraryRule<Options, MessageIds>({
1313
docs: {
1414
description: 'Disallow direct Node access',
1515
category: 'Best Practices',
16-
recommended: 'error',
16+
recommended: {
17+
dom: false,
18+
angular: 'error',
19+
react: 'error',
20+
vue: 'error',
21+
},
1722
},
1823
messages: {
1924
noNodeAccess:

lib/rules/no-promise-in-fire-event.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,12 @@ export default createTestingLibraryRule<Options, MessageIds>({
2020
description:
2121
'Disallow the use of promises passed to a `fireEvent` method',
2222
category: 'Best Practices',
23-
recommended: false,
23+
recommended: {
24+
dom: 'error',
25+
angular: 'error',
26+
react: 'error',
27+
vue: 'error',
28+
},
2429
},
2530
messages: {
2631
noPromiseInFireEvent:

lib/rules/no-render-in-setup.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,12 @@ export default createTestingLibraryRule<Options, MessageIds>({
5050
description:
5151
'Disallow the use of `render` in testing frameworks setup functions',
5252
category: 'Best Practices',
53-
recommended: false,
53+
recommended: {
54+
dom: false,
55+
angular: false,
56+
react: false,
57+
vue: false,
58+
},
5459
},
5560
messages: {
5661
noRenderInSetup:

lib/rules/no-wait-for-empty-callback.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,12 @@ export default createTestingLibraryRule<Options, MessageIds>({
1818
description:
1919
"It's preferred to avoid empty callbacks in `waitFor` and `waitForElementToBeRemoved`",
2020
category: 'Best Practices',
21-
recommended: 'error',
21+
recommended: {
22+
dom: 'error',
23+
angular: 'error',
24+
react: 'error',
25+
vue: 'error',
26+
},
2227
},
2328
messages: {
2429
noWaitForEmptyCallback:

lib/rules/no-wait-for-multiple-assertions.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,12 @@ export default createTestingLibraryRule<Options, MessageIds>({
1616
docs: {
1717
description: "It's preferred to avoid multiple assertions in `waitFor`",
1818
category: 'Best Practices',
19-
recommended: false,
19+
recommended: {
20+
dom: false,
21+
angular: false,
22+
react: false,
23+
vue: false,
24+
},
2025
},
2126
messages: {
2227
noWaitForMultipleAssertion:

lib/rules/no-wait-for-side-effects.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,12 @@ export default createTestingLibraryRule<Options, MessageIds>({
1616
docs: {
1717
description: "It's preferred to avoid side effects in `waitFor`",
1818
category: 'Best Practices',
19-
recommended: false,
19+
recommended: {
20+
dom: false,
21+
angular: false,
22+
react: false,
23+
vue: false,
24+
},
2025
},
2126
messages: {
2227
noSideEffectsWaitFor:

lib/rules/no-wait-for-snapshot.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,12 @@ export default createTestingLibraryRule<Options, MessageIds>({
1919
description:
2020
'Ensures no snapshot is generated inside of a `waitFor` call',
2121
category: 'Best Practices',
22-
recommended: 'warn',
22+
recommended: {
23+
dom: false,
24+
angular: false,
25+
react: false,
26+
vue: false,
27+
},
2328
},
2429
messages: {
2530
noWaitForSnapshot:

lib/rules/prefer-explicit-assert.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,12 @@ export default createTestingLibraryRule<Options, MessageIds>({
2525
description:
2626
'Suggest using explicit assertions rather than just `getBy*` queries',
2727
category: 'Best Practices',
28-
recommended: false,
28+
recommended: {
29+
dom: false,
30+
angular: false,
31+
react: false,
32+
vue: false,
33+
},
2934
},
3035
messages: {
3136
preferExplicitAssert:

lib/rules/prefer-find-by.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,12 @@ export default createTestingLibraryRule<Options, MessageIds>({
5656
description:
5757
'Suggest using `find*` query instead of `waitFor` + `get*` to wait for elements',
5858
category: 'Best Practices',
59-
recommended: 'warn',
59+
recommended: {
60+
dom: 'error',
61+
angular: 'error',
62+
react: 'error',
63+
vue: 'error',
64+
},
6065
},
6166
messages: {
6267
preferFindBy:

lib/rules/prefer-presence-queries.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,12 @@ export default createTestingLibraryRule<Options, MessageIds>({
1313
category: 'Best Practices',
1414
description:
1515
'Ensure appropriate get*/query* queries are used with their respective matchers',
16-
recommended: 'error',
16+
recommended: {
17+
dom: false,
18+
angular: false,
19+
react: false,
20+
vue: false,
21+
},
1722
},
1823
messages: {
1924
wrongPresenceQuery:

lib/rules/prefer-screen-queries.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,12 @@ export default createTestingLibraryRule<Options, MessageIds>({
3737
docs: {
3838
description: 'Suggest using screen while querying',
3939
category: 'Best Practices',
40-
recommended: 'error',
40+
recommended: {
41+
dom: 'error',
42+
angular: 'error',
43+
react: 'error',
44+
vue: 'error',
45+
},
4146
},
4247
messages: {
4348
preferScreenQueries:

lib/rules/prefer-user-event.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,12 @@ export default createTestingLibraryRule<Options, MessageIds>({
6666
docs: {
6767
description: 'Suggest using userEvent over fireEvent',
6868
category: 'Best Practices',
69-
recommended: 'warn',
69+
recommended: {
70+
dom: false,
71+
angular: false,
72+
react: false,
73+
vue: false,
74+
},
7075
},
7176
messages: {
7277
preferUserEvent:

lib/rules/prefer-wait-for.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,12 @@ export default createTestingLibraryRule<Options, MessageIds>({
2626
docs: {
2727
description: 'Use `waitFor` instead of deprecated wait methods',
2828
category: 'Best Practices',
29-
recommended: false,
29+
recommended: {
30+
dom: false,
31+
angular: false,
32+
react: false,
33+
vue: false,
34+
},
3035
},
3136
messages: {
3237
preferWaitForMethod:

lib/rules/render-result-naming-convention.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,12 @@ export default createTestingLibraryRule<Options, MessageIds>({
2424
docs: {
2525
description: 'Enforce a valid naming for return value from `render`',
2626
category: 'Best Practices',
27-
recommended: false,
27+
recommended: {
28+
dom: false,
29+
angular: 'error',
30+
react: 'error',
31+
vue: 'error',
32+
},
2833
},
2934
messages: {
3035
renderResultNamingConvention: `\`{{ renderResultName }}\` is not a recommended name for \`render\` returned value. Instead, you should destructure it, or name it using one of: ${ALLOWED_VAR_NAMES_TEXT}`,

lib/utils/types.ts

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,22 @@
11
import type { TSESLint } from '@typescript-eslint/experimental-utils';
22

3+
type RecommendedConfig<TOptions extends readonly unknown[]> =
4+
| TSESLint.RuleMetaDataDocs['recommended']
5+
| [TSESLint.RuleMetaDataDocs['recommended'], ...TOptions];
6+
37
// These 2 types are copied from @typescript-eslint/experimental-utils' CreateRuleMeta
48
// and modified to our needs
5-
type TestingLibraryRuleMetaDocs = Omit<
9+
type TestingLibraryRuleMetaDocs<TOptions extends readonly unknown[]> = Omit<
610
TSESLint.RuleMetaDataDocs,
711
'recommended' | 'url'
812
> & {
9-
recommended: Record<
10-
SupportedTestingFramework,
11-
TSESLint.RuleMetaDataDocs['recommended']
12-
>;
13+
recommended: Record<SupportedTestingFramework, RecommendedConfig<TOptions>>;
1314
};
14-
export type TestingLibraryRuleMeta<TMessageIds extends string> = {
15-
docs: TestingLibraryRuleMetaDocs;
15+
export type TestingLibraryRuleMeta<
16+
TMessageIds extends string,
17+
TOptions extends readonly unknown[]
18+
> = {
19+
docs: TestingLibraryRuleMetaDocs<TOptions>;
1620
} & Omit<TSESLint.RuleMetaData<TMessageIds>, 'docs'>;
1721

1822
export const SUPPORTED_TESTING_FRAMEWORKS = [

0 commit comments

Comments
 (0)