UNPKG

1.9 kBJavaScriptView Raw
1'use strict'
2
3const getDocsUrl = require('./lib/get-docs-url')
4const isPromise = require('./lib/is-promise')
5
6module.exports = {
7 meta: {
8 type: 'problem',
9 docs: {
10 description:
11 'Ensures the proper number of arguments are passed to Promise functions',
12 url: getDocsUrl('valid-params'),
13 },
14 schema: [],
15 },
16 create(context) {
17 return {
18 CallExpression(node) {
19 if (!isPromise(node)) {
20 return
21 }
22
23 const name = node.callee.property.name
24 const numArgs = node.arguments.length
25
26 // istanbul ignore next -- `isPromise` filters out others
27 switch (name) {
28 case 'resolve':
29 case 'reject':
30 if (numArgs > 1) {
31 context.report({
32 node,
33 message:
34 'Promise.{{ name }}() requires 0 or 1 arguments, but received {{ numArgs }}',
35 data: { name, numArgs },
36 })
37 }
38 break
39 case 'then':
40 if (numArgs < 1 || numArgs > 2) {
41 context.report({
42 node,
43 message:
44 'Promise.{{ name }}() requires 1 or 2 arguments, but received {{ numArgs }}',
45 data: { name, numArgs },
46 })
47 }
48 break
49 case 'race':
50 case 'all':
51 case 'allSettled':
52 case 'any':
53 case 'catch':
54 case 'finally':
55 if (numArgs !== 1) {
56 context.report({
57 node,
58 message:
59 'Promise.{{ name }}() requires 1 argument, but received {{ numArgs }}',
60 data: { name, numArgs },
61 })
62 }
63 break
64 default:
65 // istanbul ignore next -- `isPromise` filters out others
66 break
67 }
68 },
69 }
70 },
71}