function reportFunctionComponent(componentNode, declaredPropTypes, defaultProps) {
      if (defaultProps) {
        report(context, messages.noDefaultPropsWithFunction, 'noDefaultPropsWithFunction', {
          node: componentNode,
        });
      }

      const props = componentNode.params[0];
      const propTypes = declaredPropTypes;

      if (!props) {
        return;
      }

      if (props.type === 'Identifier') {
        const hasOptionalProp = values(propTypes).some((propType) => !propType.isRequired);
        if (hasOptionalProp) {
          report(context, messages.destructureInSignature, 'destructureInSignature', {
            node: props,
          });
        }
      } else if (props.type === 'ObjectPattern') {
        // Filter required props with default value and report error
        props.properties.filter((prop) => {
          const propName = prop && prop.key && prop.key.name;
          const isPropRequired = propTypes[propName] && propTypes[propName].isRequired;
          return propTypes[propName] && isPropRequired && !isPropWithNoDefaulVal(prop);
        }).forEach((prop) => {
          report(context, messages.noDefaultWithRequired, 'noDefaultWithRequired', {
            node: prop,
            data: { name: prop.key.name },
          });
        });

        // Filter non required props with no default value and report error
        props.properties.filter((prop) => {
          const propName = prop && prop.key && prop.key.name;
          const isPropRequired = propTypes[propName] && propTypes[propName].isRequired;
          return propTypes[propName] && !isPropRequired && isPropWithNoDefaulVal(prop);
        }).forEach((prop) => {
          report(context, messages.shouldAssignObjectDefault, 'shouldAssignObjectDefault', {
            node: prop,
            data: { name: prop.key.name },
          });
        });
      }
    }
If functions option is 'defaultArguments', reports defaultProps is used and all params that doesn't initialized.
@param {Object} componentNode Node of component.
@param {Object[]} declaredPropTypes List of propTypes to check `isRequired`.
@param {Object} defaultProps Object of defaultProps to check used.