no-return-in-finally.js 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. 'use strict'
  2. const getDocsUrl = require('./lib/get-docs-url')
  3. const isPromise = require('./lib/is-promise')
  4. module.exports = {
  5. meta: {
  6. type: 'problem',
  7. docs: {
  8. url: getDocsUrl('no-return-in-finally'),
  9. },
  10. },
  11. create(context) {
  12. return {
  13. CallExpression(node) {
  14. if (isPromise(node)) {
  15. if (
  16. node.callee &&
  17. node.callee.property &&
  18. node.callee.property.name === 'finally'
  19. ) {
  20. // istanbul ignore else -- passing `isPromise` means should have a body
  21. if (
  22. node.arguments &&
  23. node.arguments[0] &&
  24. node.arguments[0].body &&
  25. node.arguments[0].body.body
  26. ) {
  27. if (
  28. node.arguments[0].body.body.some((statement) => {
  29. return statement.type === 'ReturnStatement'
  30. })
  31. ) {
  32. context.report({
  33. node: node.callee.property,
  34. message: 'No return in finally',
  35. })
  36. }
  37. }
  38. }
  39. }
  40. },
  41. }
  42. },
  43. }