Skip to content

Commit 6f20960

Browse files
author
Michał Sajnóg
authored
Fix named-functions-in-promises rule (#16)
1 parent 72e3146 commit 6f20960

File tree

2 files changed

+39
-11
lines changed

2 files changed

+39
-11
lines changed

lib/rules/named-functions-in-promises.js

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -14,24 +14,28 @@ module.exports = function(context) {
1414
context.report(node, message);
1515
};
1616

17-
var promisesMethods = ['then', 'catch', 'finally'];
18-
1917
return {
2018
CallExpression: function(node) {
21-
var callee = node.callee;
19+
var firstArg = node.arguments[0];
2220

2321
if (
24-
utils.isCallExpression(callee.object) &&
25-
utils.isIdentifier(callee.property) &&
26-
promisesMethods.indexOf(callee.property.name) > -1
22+
hasPromiseExpression(node) &&
23+
(
24+
utils.isFunctionExpression(firstArg) ||
25+
utils.isArrowFunctionExpression(firstArg)
26+
)
2727
) {
28-
node.arguments.forEach(function(argument) {
29-
if (!utils.isCallExpression(argument)) {
30-
report(node);
31-
}
32-
});
28+
report(node);
3329
}
3430
}
3531
};
3632

33+
function hasPromiseExpression(node) {
34+
var callee = node.callee;
35+
var promisesMethods = ['then', 'catch', 'finally'];
36+
37+
return utils.isCallExpression(callee.object) &&
38+
utils.isIdentifier(callee.property) &&
39+
promisesMethods.indexOf(callee.property.name) > -1;
40+
}
3741
};

tests/lib/rules/named-functions-in-promises.js

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,24 @@ eslintTester.run('named-functions-in-promises', rule, {
2323
}, {
2424
code: 'user.save().finally(this._finallyDo.bind(this));',
2525
parserOptions: {ecmaVersion: 6},
26+
}, {
27+
code: 'user.save().then(this._reloadUser);',
28+
parserOptions: {ecmaVersion: 6},
29+
}, {
30+
code: 'user.save().catch(this._handleError);',
31+
parserOptions: {ecmaVersion: 6},
32+
}, {
33+
code: 'user.save().finally(this._finallyDo);',
34+
parserOptions: {ecmaVersion: 6},
35+
}, {
36+
code: 'user.save().then(_reloadUser);',
37+
parserOptions: {ecmaVersion: 6},
38+
}, {
39+
code: 'user.save().catch(_handleError);',
40+
parserOptions: {ecmaVersion: 6},
41+
}, {
42+
code: 'user.save().finally(_finallyDo);',
43+
parserOptions: {ecmaVersion: 6},
2644
}
2745
],
2846
invalid: [
@@ -32,6 +50,12 @@ eslintTester.run('named-functions-in-promises', rule, {
3250
errors: [{
3351
message: 'Use named functions defined on objects to handle promises',
3452
}],
53+
}, {
54+
code: 'user.save().then(() => user.reload());',
55+
parserOptions: {ecmaVersion: 6},
56+
errors: [{
57+
message: 'Use named functions defined on objects to handle promises',
58+
}],
3559
}, {
3660
code: 'user.save().catch(() => {return error.handle();});',
3761
parserOptions: {ecmaVersion: 6},

0 commit comments

Comments
 (0)