valid-params.js 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  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. description:
  9. 'Ensures the proper number of arguments are passed to Promise functions',
  10. url: getDocsUrl('valid-params'),
  11. },
  12. },
  13. create(context) {
  14. return {
  15. CallExpression(node) {
  16. if (!isPromise(node)) {
  17. return
  18. }
  19. const name = node.callee.property.name
  20. const numArgs = node.arguments.length
  21. switch (name) {
  22. case 'resolve':
  23. case 'reject':
  24. if (numArgs > 1) {
  25. context.report({
  26. node,
  27. message:
  28. 'Promise.{{ name }}() requires 0 or 1 arguments, but received {{ numArgs }}',
  29. data: { name, numArgs },
  30. })
  31. }
  32. break
  33. case 'then':
  34. if (numArgs < 1 || numArgs > 2) {
  35. context.report({
  36. node,
  37. message:
  38. 'Promise.{{ name }}() requires 1 or 2 arguments, but received {{ numArgs }}',
  39. data: { name, numArgs },
  40. })
  41. }
  42. break
  43. case 'race':
  44. case 'all':
  45. case 'catch':
  46. case 'finally':
  47. if (numArgs !== 1) {
  48. context.report({
  49. node,
  50. message:
  51. 'Promise.{{ name }}() requires 1 argument, but received {{ numArgs }}',
  52. data: { name, numArgs },
  53. })
  54. }
  55. break
  56. default:
  57. break
  58. }
  59. },
  60. }
  61. },
  62. }