text: /**
   * @fileoverview Utility functions for type annotation detection.
   * @author Yannick Croissant
   * @author Vitor Balocco
   */
  
  'use strict';
  
  /**
   * Checks if we are declaring a `props` argument with a flow type annotation.
   * @param {ASTNode} node The AST node being checked.
   * @param {Object} context
   * @returns {Boolean} True if the node is a type annotated props declaration, false if not.
   */
  function isAnnotatedFunctionPropsDeclaration(node, context) {
    if (!node || !node.params || !node.params.length) {
      return false;
    }
  
    const typeNode = node.params[0].type === 'AssignmentPattern' ? node.params[0].left : node.params[0];
  
    const tokens = context.getFirstTokens(typeNode, 2);
    const isAnnotated = typeNode.typeAnnotation;
    const isDestructuredProps = typeNode.type === 'ObjectPattern';
    const isProps = tokens[0].value === 'props' || (tokens[1] && tokens[1].value === 'props');
  
    return (isAnnotated && (isDestructuredProps || isProps));
  }
  
  module.exports = {
    isAnnotatedFunctionPropsDeclaration
  };
  