Files

Return to Package Diff Home.
Brought to you by Intrinsic.

Package Diff: eslint-plugin-promise @ 4.0.1 .. 4.1.1

index.js

@@ -26,6 +26,7 @@
},
configs: {
recommended: {
+ plugins: ['promise'],
rules: {
'promise/always-return': 'error',
'promise/no-return-wrap': 'error',

package.json

@@ -1,6 +1,6 @@
{
"name": "eslint-plugin-promise",
- "version": "4.0.1",
+ "version": "4.1.1",
"description": "Enforce best practices for JavaScript promises",
"keywords": [
"eslint",
@@ -18,15 +18,15 @@
},
"devDependencies": {
"doctoc": "^1.3.0",
- "eslint": "^5.3.0",
+ "eslint": "^5.16.0",
"eslint-config-prettier": "^3.0.1",
"eslint-plugin-eslint-plugin": "^1.4.0",
"eslint-plugin-jest": "^21.21.0",
"eslint-plugin-node": "^7.0.1",
"eslint-plugin-prettier": "^2.6.2",
"husky": "^0.14.3",
- "jest": "^23.5.0",
- "jest-runner-eslint": "^0.6.0",
+ "jest": "^24.5.0",
+ "jest-runner-eslint": "^0.7.3",
"lint-staged": "^7.2.2",
"prettier": "^1.14.2"
},

rules/catch-or-return.js

@@ -21,45 +21,66 @@
create(context) {
const options = context.options[0] || {}
const allowThen = options.allowThen
+ const allowFinally = options.allowFinally
let terminationMethod = options.terminationMethod || 'catch'
if (typeof terminationMethod === 'string') {
terminationMethod = [terminationMethod]
}
- return {
- ExpressionStatement(node) {
- if (!isPromise(node.expression)) {
- return
- }
-
+ function isAllowedPromiseTermination(expression) {
// somePromise.then(a, b)
if (
allowThen &&
- node.expression.type === 'CallExpression' &&
- node.expression.callee.type === 'MemberExpression' &&
- node.expression.callee.property.name === 'then' &&
- node.expression.arguments.length === 2
+ expression.type === 'CallExpression' &&
+ expression.callee.type === 'MemberExpression' &&
+ expression.callee.property.name === 'then' &&
+ expression.arguments.length === 2
) {
- return
+ return true
+ }
+
+ // somePromise.catch().finally(fn)
+ if (
+ allowFinally &&
+ expression.type === 'CallExpression' &&
+ expression.callee.type === 'MemberExpression' &&
+ expression.callee.property.name === 'finally' &&
+ isPromise(expression.callee.object) &&
+ isAllowedPromiseTermination(expression.callee.object)
+ ) {
+ return true
}
// somePromise.catch()
if (
- node.expression.type === 'CallExpression' &&
- node.expression.callee.type === 'MemberExpression' &&
- terminationMethod.indexOf(node.expression.callee.property.name) !== -1
+ expression.type === 'CallExpression' &&
+ expression.callee.type === 'MemberExpression' &&
+ terminationMethod.indexOf(expression.callee.property.name) !== -1
) {
- return
+ return true
}
// somePromise['catch']()
if (
- node.expression.type === 'CallExpression' &&
- node.expression.callee.type === 'MemberExpression' &&
- node.expression.callee.property.type === 'Literal' &&
- node.expression.callee.property.value === 'catch'
+ expression.type === 'CallExpression' &&
+ expression.callee.type === 'MemberExpression' &&
+ expression.callee.property.type === 'Literal' &&
+ expression.callee.property.value === 'catch'
) {
+ return true
+ }
+
+ return false
+ }
+
+ return {
+ ExpressionStatement(node) {
+ if (!isPromise(node.expression)) {
+ return
+ }
+
+ if (isAllowedPromiseTermination(node.expression)) {
return
}