Skip to content

Commit 84138e2

Browse files
committed
fix(require-tothrow-message): rename rule to require-to-throw-message
1 parent a29f993 commit 84138e2

File tree

6 files changed

+77
-53
lines changed

6 files changed

+77
-53
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ installations requiring long-term consistency.
140140
| [prefer-to-contain][] | Suggest using `toContain()` | | ![fixable-green][] |
141141
| [prefer-to-have-length][] | Suggest using `toHaveLength()` | | ![fixable-green][] |
142142
| [prefer-todo][] | Suggest using `test.todo()` | | ![fixable-green][] |
143-
| [require-tothrow-message][] | Require that `toThrow()` and `toThrowError` includes a message | | |
143+
| [require-to-throw-message][] | Require that `toThrow()` and `toThrowError` includes a message | | |
144144
| [valid-describe][] | Enforce valid `describe()` callback | ![recommended][] | |
145145
| [valid-expect-in-promise][] | Enforce having return statement when testing with promises | ![recommended][] | |
146146
| [valid-expect][] | Enforce valid `expect()` usage | ![recommended][] | |
@@ -193,7 +193,7 @@ https://github.com/dangreenisrael/eslint-plugin-jest-formatting
193193
[prefer-to-contain]: docs/rules/prefer-to-contain.md
194194
[prefer-to-have-length]: docs/rules/prefer-to-have-length.md
195195
[prefer-todo]: docs/rules/prefer-todo.md
196-
[require-tothrow-message]: docs/rules/require-tothrow-message.md
196+
[require-to-throw-message]: docs/rules/require-to-throw-message.md
197197
[valid-describe]: docs/rules/valid-describe.md
198198
[valid-expect-in-promise]: docs/rules/valid-expect-in-promise.md
199199
[valid-expect]: docs/rules/valid-expect.md

src/__tests__/rules.test.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,15 @@ import { existsSync } from 'fs';
22
import { resolve } from 'path';
33
import plugin from '../';
44

5-
const ruleNames = Object.keys(plugin.rules);
5+
const excludeRules = [
6+
// require-tothrow-message has been renamed to require-to-throw-message, remove in major version bump
7+
'require-tothrow-message',
8+
];
9+
10+
const ruleNames = Object.keys(plugin.rules).filter(rule => {
11+
return excludeRules.includes(rule) === false;
12+
});
13+
614
const numberOfRules = 38;
715

816
describe('rules', () => {

src/rules/__tests__/require-tothrow-message.test.ts renamed to src/rules/__tests__/require-to-throw-message.test.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
import { TSESLint } from '@typescript-eslint/experimental-utils';
2-
import rule from '../require-tothrow-message';
2+
import rule from '../require-to-throw-message';
3+
import deprecatedRule from '../require-tothrow-message'; // remove in major version bump
34

45
const ruleTester = new TSESLint.RuleTester({
56
parserOptions: {
67
ecmaVersion: 8,
78
},
89
});
910

10-
ruleTester.run('require-tothrow-message', rule, {
11+
const tests = {
1112
valid: [
1213
// String
1314
"expect(() => { throw new Error('a'); }).toThrow('a');",
@@ -109,4 +110,7 @@ ruleTester.run('require-tothrow-message', rule, {
109110
],
110111
},
111112
],
112-
});
113+
};
114+
115+
ruleTester.run('require-to-throw-message', rule, tests);
116+
ruleTester.run('require-tothrow-message', deprecatedRule, tests); // remove in major version bump

src/rules/require-to-throw-message.ts

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
import {
2+
ModifierName,
3+
createRule,
4+
isExpectCall,
5+
parseExpectCall,
6+
} from './utils';
7+
8+
export default createRule({
9+
name: __filename,
10+
meta: {
11+
docs: {
12+
category: 'Best Practices',
13+
description: 'Require a message for `toThrow()`',
14+
recommended: false,
15+
},
16+
messages: {
17+
requireRethrow: 'Add an error message to {{ propertyName }}()',
18+
},
19+
type: 'suggestion',
20+
schema: [],
21+
},
22+
defaultOptions: [],
23+
create(context) {
24+
return {
25+
CallExpression(node) {
26+
if (!isExpectCall(node)) {
27+
return;
28+
}
29+
30+
const { matcher, modifier } = parseExpectCall(node);
31+
32+
if (
33+
matcher &&
34+
matcher.arguments &&
35+
matcher.arguments.length === 0 &&
36+
['toThrow', 'toThrowError'].includes(matcher.name) &&
37+
(!modifier ||
38+
!(modifier.name === ModifierName.not || modifier.negation))
39+
) {
40+
// Look for `toThrow` calls with no arguments.
41+
context.report({
42+
messageId: 'requireRethrow', // todo: rename to 'addErrorMessage'
43+
data: { propertyName: matcher.name }, // todo: rename to 'matcherName'
44+
node: matcher.node.property,
45+
});
46+
}
47+
},
48+
};
49+
},
50+
});

src/rules/require-tothrow-message.ts

Lines changed: 9 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -1,50 +1,12 @@
1-
import {
2-
ModifierName,
3-
createRule,
4-
isExpectCall,
5-
parseExpectCall,
6-
} from './utils';
1+
import requireToThrowMessage from './require-to-throw-message';
72

8-
export default createRule({
9-
name: __filename,
10-
meta: {
11-
docs: {
12-
category: 'Best Practices',
13-
description: 'Require a message for `toThrow()`',
14-
recommended: false,
15-
},
16-
messages: {
17-
requireRethrow: 'Add an error message to {{ propertyName }}()',
18-
},
19-
type: 'suggestion',
20-
schema: [],
21-
},
22-
defaultOptions: [],
23-
create(context) {
24-
return {
25-
CallExpression(node) {
26-
if (!isExpectCall(node)) {
27-
return;
28-
}
3+
// remove this file in major version bump
294

30-
const { matcher, modifier } = parseExpectCall(node);
31-
32-
if (
33-
matcher &&
34-
matcher.arguments &&
35-
matcher.arguments.length === 0 &&
36-
['toThrow', 'toThrowError'].includes(matcher.name) &&
37-
(!modifier ||
38-
!(modifier.name === ModifierName.not || modifier.negation))
39-
) {
40-
// Look for `toThrow` calls with no arguments.
41-
context.report({
42-
messageId: 'requireRethrow', // todo: rename to 'addErrorMessage'
43-
data: { propertyName: matcher.name }, // todo: rename to 'matcherName'
44-
node: matcher.node.property,
45-
});
46-
}
47-
},
48-
};
5+
export default {
6+
...requireToThrowMessage,
7+
meta: {
8+
...requireToThrowMessage.meta,
9+
deprecated: true,
10+
replacedBy: ['require-to-throw-message'],
4911
},
50-
});
12+
};

0 commit comments

Comments
 (0)