rule-hook-required-argument.js 1.64 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
/**
 * Copyright (c) Facebook, Inc. and its affiliates.
 *
 * This source code is licensed under the MIT license found in the
 * LICENSE file in the root directory of this source tree.
 */

'use strict';

const utils = require('./utils');
const shouldLint = utils.shouldLint;

function reportMissingKeyArgument(node, context, hookName) {
  context.report({
    node: node,
    message: `A fragment reference should be passed to the \`${hookName}\` hook`
  });
}

module.exports = {
  meta: {
    docs: {
      description:
        'Validates that the second argument is passed to relay hooks.'
    }
  },
  create(context) {
    if (!shouldLint(context)) {
      return {};
    }

    return {
      'CallExpression[callee.name=useFragment][arguments.length < 2]'(node) {
        reportMissingKeyArgument(node, context, 'useFragment');
      },
      'CallExpression[callee.name=usePaginationFragment][arguments.length < 2]'(
        node
      ) {
        reportMissingKeyArgument(node, context, 'usePaginationFragment');
      },

      'CallExpression[callee.name=useBlockingPaginationFragment][arguments.length < 2]'(
        node
      ) {
        reportMissingKeyArgument(
          node,
          context,
          'useBlockingPaginationFragment'
        );
      },

      'CallExpression[callee.name=useLegacyPaginationFragment][arguments.length < 2]'(
        node
      ) {
        reportMissingKeyArgument(node, context, 'useLegacyPaginationFragment');
      },

      'CallExpression[callee.name=useRefetchableFragment][arguments.length < 2]'(
        node
      ) {
        reportMissingKeyArgument(node, context, 'useRefetchableFragment');
      }
    };
  }
};