
    Ki]              	       T   d Z ddlZddlZddlZddlmZ ddlmZ ddlm	Z	m
Z
mZmZ ddlmZmZmZ ddlmZ ddlmZ dd	lmZmZ dd
lmZmZ e	rddlmZ  G d de      Ze G d d             Zdddee e!df   ef   fdZ"de
defdZ#de!de!fdZ$dde!de!de!fdZ%d de!de!de&de!fdZ'y)!zqShared shell completion infrastructure.

Provides data extraction, type analysis, and text processing utilities.
    N)Enum)Path)TYPE_CHECKINGAnyget_args
get_origin)ITERABLE_TYPESis_annotatedis_union)ArgumentCollection)CycloptsError)RegisteredCommandgroups_from_app)frozenis_class_and_subclass)Appc                       e Zd ZdZdZdZdZy)CompletionActionz'Shell-agnostic completion action types.nonefilesdirectoriesN)__name__
__module____qualname____doc__NONEFILESDIRECTORIES     e/home/jay/workspace/scripts/.codegraph-venv/lib/python3.12/site-packages/cyclopts/completion/_base.pyr   r      s    1DEKr    r   c                   6    e Zd ZU dZded<   ee   ed<   eed<   y)CompletionDataz#Completion data for a command path.r   	argumentscommandshelp_formatN)r   r   r   r   __annotations__listr   strr   r    r!   r#   r#      s    -##$%%r    r#   appr   return.c                 N     i ddt         t        df   f fd         S )a:  Recursively extract completion data for app and all subcommands.

    Parameters
    ----------
    app : App
        The Cyclopts application to extract completion data from.

    Returns
    -------
    dict[tuple[str, ...], CompletionData]
        Mapping from command path tuples to their completion data.
    command_path.c                    	 j                  t        |             \  }}}|d   }t               }j                  |      }j                  |      5  |D ]2  }|j                  s|j!                  d      }	|j#                  |	       4 	 ddd       g }
t%        |d      D ]F  \  }}|j&                  s|D ]/  }|j(                  j&                  s||
vs|
j+                  |       1 H |j                  j                  dd	      }t        ||
|
      | <   |
D ]1  }|j,                  D ]   }|j/                  d      r | |fz          " 3 y# t        t        t        f$ r}}t
        j                  j                  d      r t        j                  d| d| d       j                  j                  dd	      }t        t               g |
      | <   Y d}~yd}~ww xY w# 1 sw Y   [xY w)z@Recursively extract completion data for command and subcommands.CYCLOPTS_COMPLETION_DEBUGz3Failed to extract completion data for command path z:    )
stacklevelr&   markdown)fallback)r$   r%   r&   NT)parse_docstring)resolve_lazy-)parse_commandsr(   r   
ValueError	TypeErrorosenvirongetwarningswarn	app_stackresolver#   r   _get_resolution_contextdefault_commandassemble_argument_collectionextendr   showr*   appendnames
startswith)r-   _execution_pathcommand_apper&   r$   apps_for_paramssubappapp_argumentsr%   groupregistered_commandsregistered_commandcmd_name_extractr*   completion_datas                  r!   rU   z)extract_completion_data.<locals>._extract7   s   	#&#5#5d<6H#I A~q(,K '(	55nE]]>* 	4) 4))$*$G$GX\$G$]M$$]34	4 *9+TX*Y 	<&E&zz*= <&)--227IQY7Y (:;<	< "++33MJ3W(6U]kv(w%"* 	9.44 9**3/\XK789	9; z95 	zz~~9:MMOP\O__abcaderst--//
/SK,:,.-OL) 		4 	4s*   #E G$%%G$G!$A3GG!$G.)r   )tupler)   )r*   rU   rV   s   `@@r!   extract_completion_datarX   (   s-     >@O%9uS#X %9N Jr    	type_hintc                    t        |       rt        t        |       d         S t        |       rPt        |       D ]2  }|t	        d      ust        |      }|t
        j                  k7  s0|c S  t
        j                  S t        |       }t        |t        t                    r)t        |       }|rt        |      dk\  rt        |d         S |xs | }|t        u st        |t              rt
        j                  S t
        j                  S )zGet completion action from type hint.

    Parameters
    ----------
    type_hint : Any
        Type annotation.

    Returns
    -------
    CompletionAction
        Completion action for type.
    r   N   )r
   get_completion_actionr   r   typer   r   r   r   rW   r	   lenr   r   )rY   argactionoriginargstarget_types         r!   r\   r\   b   s     I$Xi%8%;<<	I& 	"C$t*$.s3-222!M		"
  $$$	"F VU>%:;	"CIN(a11%IKd3KF%%%   r    textc                 ~    t        j                  dd|       } t        j                  dd|       j                         } | S )zClean choice text without shell-specific escaping.

    Parameters
    ----------
    text : str
        Raw choice text.

    Returns
    -------
    str
        Cleaned text (not shell-escaped).
    [\x00-\x1f\x7f] \s+ )resubstrip)rd   s    r!   clean_choice_textrm      s7     66$b$/D66&#t$**,DKr    namecharsc                 b    | j                  dd      }|D ]  }|j                  |d|       } |S )a  Escape glob/pattern characters for shell case patterns.

    Both bash and zsh case patterns treat glob characters as special even inside
    quotes. This function escapes them with backslashes for literal matching.

    Parameters
    ----------
    name : str
        String to escape.
    chars : str
        Characters to escape. Default covers basic glob chars.
        For zsh, also pass "()|" for extended patterns.

    Returns
    -------
    str
        Escaped string safe for shell case patterns.
    \z\\)replace)rn   ro   resultchars       r!   escape_for_shell_patternru      s>    ( \\$'F 34&k23Mr    format
max_lengthc                     ddl m} ddlm} |j	                  | |      } ||      } t        j                  dd|       } t        j                  dd|       j                         } t        |       |kD  r| d	|d
z
   dz   } | S )a#  Strip markup and render to plain text for shell completions.

    Converts formatted text (markdown/RST/rich) to plain text suitable for
    shell completion descriptions. Removes control characters, normalizes
    whitespace, and truncates if needed.

    Parameters
    ----------
    text : str
        Text with markup.
    format : str
        Markup format: "markdown", "rst", "rich", or "plaintext".
    max_length : int
        Maximum length before truncation.

    Returns
    -------
    str
        Plain text (not shell-escaped).
    r   )extract_text)
InlineText)rv   rf   rg   rh   ri   Nr[   u   …)	cyclopts._markupry   cyclopts.help.inline_textrz   from_formatrj   rk   rl   r^   )rd   rv   rw   ry   rz   inlines         r!   strip_markupr      s~    * .4##D#8FD66$b$/D66&#t$**,D
4y:$j1n%-Kr    )z*?[])r3   P   )(r   r;   rj   r>   enumr   pathlibr   typingr   r   r   r   cyclopts.annotationsr	   r
   r   cyclopts.argumentr   cyclopts.exceptionsr   cyclopts.group_extractorsr   r   cyclopts.utilsr   r   cycloptsr   r   r#   dictrW   r)   rX   r\   rm   ru   intr   r   r    r!   <module>r      s   
 
 	    ; ; G G 0 - H 8 t     7 74c3h0O+P 7t&!S &!-= &!RC C $3 s  4!s !C !# !s !r    