Skip to content

Commit 76e8027

Browse files
authored
Add switchCallExpressionToNewExpression (#1435)
1 parent 3fcc4bb commit 76e8027

File tree

5 files changed

+32
-26
lines changed

5 files changed

+32
-26
lines changed

rules/fix/index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ module.exports = {
77
appendArgument: require('./append-argument.js'),
88
removeArgument: require('./remove-argument.js'),
99
switchNewExpressionToCallExpression: require('./switch-new-expression-to-call-expression.js'),
10+
switchCallExpressionToNewExpression: require('./switch-call-expression-to-new-expression.js'),
1011
removeMemberExpressionProperty: require('./remove-member-expression-property.js'),
1112
removeMethodCall: require('./remove-method-call.js'),
1213
replaceTemplateElement: require('./replace-template-element.js'),
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
'use strict';
2+
const {isParenthesized} = require('../utils/parentheses.js');
3+
const shouldAddParenthesesToNewExpressionCallee = require('../utils/should-add-parentheses-to-new-expression-callee.js');
4+
5+
function * switchCallExpressionToNewExpression(node, sourceCode, fixer) {
6+
yield fixer.insertTextBefore(node, 'new ');
7+
8+
const {callee} = node;
9+
if (
10+
!isParenthesized(callee, sourceCode) &&
11+
shouldAddParenthesesToNewExpressionCallee(callee)
12+
) {
13+
yield fixer.insertTextBefore(callee, '(');
14+
yield fixer.insertTextAfter(callee, ')');
15+
}
16+
}
17+
18+
module.exports = switchCallExpressionToNewExpression;

rules/new-for-builtins.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,10 @@
22
const builtins = require('./utils/builtins.js');
33
const isShadowed = require('./utils/is-shadowed.js');
44
const {callExpressionSelector, newExpressionSelector} = require('./selectors/index.js');
5-
const {switchNewExpressionToCallExpression} = require('./fix/index.js');
5+
const {
6+
switchCallExpressionToNewExpression,
7+
switchNewExpressionToCallExpression,
8+
} = require('./fix/index.js');
69

710
const messages = {
811
enforce: 'Use `new {{name}}()` instead of `{{name}}()`.',
@@ -35,7 +38,7 @@ const create = context => {
3538
node,
3639
messageId: 'enforce',
3740
data: {name},
38-
fix: fixer => fixer.insertTextBefore(node, 'new '),
41+
fix: fixer => switchCallExpressionToNewExpression(node, sourceCode, fixer),
3942
};
4043
},
4144
[newExpressionSelector(builtins.disallowNew)]: node => {

rules/throw-new-error.js

Lines changed: 6 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
'use strict';
22
const {matches} = require('./selectors/index.js');
3-
const {getParenthesizedRange, isParenthesized} = require('./utils/parentheses.js');
4-
const shouldAddParenthesesToNewExpressionCallee = require('./utils/should-add-parentheses-to-new-expression-callee.js');
3+
const {switchCallExpressionToNewExpression} = require('./fix/index.js');
54

65
const messageId = 'throw-new-error';
76
const messages = {
@@ -31,26 +30,11 @@ const selector = [
3130
].join('');
3231

3332
const create = context => ({
34-
[selector]: node => {
35-
return {
36-
node,
37-
messageId,
38-
* fix(fixer) {
39-
const errorConstructor = node.callee;
40-
const sourceCode = context.getSourceCode();
41-
const range = getParenthesizedRange(errorConstructor, sourceCode);
42-
yield fixer.insertTextBeforeRange(range, 'new ');
43-
44-
if (
45-
!isParenthesized(errorConstructor, sourceCode) &&
46-
shouldAddParenthesesToNewExpressionCallee(errorConstructor)
47-
) {
48-
yield fixer.insertTextBeforeRange(range, '(');
49-
yield fixer.insertTextAfterRange(range, ')');
50-
}
51-
},
52-
};
53-
},
33+
[selector]: node => ({
34+
node,
35+
messageId,
36+
fix: fixer => switchCallExpressionToNewExpression(node, context.getSourceCode(), fixer),
37+
}),
5438
});
5539

5640
module.exports = {

test/new-for-builtins.mjs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -194,9 +194,9 @@ test({
194194
output: 'const foo = new Int32Array()',
195195
},
196196
{
197-
code: 'const foo = Map()',
197+
code: 'const foo = (( Map ))()',
198198
errors: [enforceNewError('Map')],
199-
output: 'const foo = new Map()',
199+
output: 'const foo = new (( Map ))()',
200200
},
201201
{
202202
code: 'const foo = Map([[\'foo\', \'bar\'], [\'unicorn\', \'rainbow\']])',

0 commit comments

Comments
 (0)