Hooks like `useEffect` or `useLayoutEffect` will _never_ have names, so if a the only hooks for a given source file are these "unnamed" built-in hooks, we should skip loading the source code.
hook: NodePath,
  isCustomHook: boolean = false,
): string | null {
  const nodeType = hook.node.id.type;
  switch (nodeType) {
    case AST_NODE_TYPES.ARRAY_PATTERN:
      return !isCustomHook ? hook.node.id.elements[0].name : null;
    case AST_NODE_TYPES.IDENTIFIER:
      return hook.node.id.name;
    default:
      throw new Error(`Invalid node type: ${nodeType}`);
  }
}
function getPotentialHookDeclarationsFromAST(sourceAST: File): NodePath[] {
  const potentialHooksFound: NodePath[] = [];
  traverse(sourceAST, {
    enter(path) {
      if (path.isVariableDeclarator() && isPotentialHookDeclaration(path)) {
        potentialHooksFound.push(path);
      }
    },
  });
  return potentialHooksFound;
}
function isConfirmedHookDeclaration(path: NodePath): boolean {