
    k7i              	       V   S r SSKrSSKrSSKrSSKJr  SSKJr  SSKJ	r	J
r
JrJr  SSKJr  SSKJr  SSKJr  SS	KJr  SS
KJrJr  SSKJrJr  \	(       a  SSKJr   " S S\5      r\ " S S5      5       rSSS\\ \!S4   \4   4S jr"S\
S\4S jr#S\!S\!4S jr$SS\!S\!S\%S\!4S jjr&g)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_union)ArgumentCollection)CycloptsError)RegisteredCommandgroups_from_app)frozenis_class_and_subclass)Appc                   $    \ rS rSrSrSrSrSrSrg)CompletionAction   z'Shell-agnostic completion action types.nonefilesdirectories N)	__name__
__module____qualname____firstlineno____doc__NONEFILESDIRECTORIES__static_attributes__r       S/home/james-whalen/.local/lib/python3.13/site-packages/cyclopts/completion/_base.pyr   r      s    1DEKr"   r   c                   >    \ rS rSr% SrS\S'   \\   \S'   \\S'   Sr	g)	CompletionData    z#Completion data for a command path.r   	argumentscommandshelp_formatr   N)
r   r   r   r   r   __annotations__listr   strr!   r   r"   r#   r%   r%       s    -##$%%r"   r%   appr   return.c                 T   ^ ^^ 0 mSS[         [        S4   4UU U4S jjjmT" 5         T$ )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                   >  TR                  [        U 5      5      u  pnUS   n[        5       nTR                  U5      nTR                  U5         U H6  nUR                  (       d  M  UR!                  SS9n	UR#                  U	5        M8     SSS5        / n
[%        U5       HV  u  pUR&                  (       d  M  U H8  nUR(                  R&                  (       d  M   X;  d  M'  U
R+                  U5        M:     MX     UR                  R                  SSS	9n[        XjUS
9TU '   U
 H9  nUR,                   H&  nUR/                  S5      (       a  M  T" X4-   5        M(     M;     g! [        [        [        4 a{  n[
        R                  R                  S5      (       a  e [        R                  " SU < SU 3SS9  TR                  R                  SSS	9n[        [        5       / US
9TU '    SnAgSnAff = f! , (       d  f       GNp= f)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-)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)r0   _execution_pathcommand_apper)   r'   apps_for_paramssubappapp_argumentsr(   groupregistered_commandsregistered_commandcmd_name_extractr-   completion_datas                  r#   rW   )extract_completion_data.<locals>._extract8   s   	#&#5#5d<6H#I Aq(,K '(	55nE]]>*))))$*$G$GX\$G$]M$$]3 * + *9+*F&Ezzz*=&)--2227I7Y (:; +> +G "++33MJ3W(6kv(w%"*.44**3//\K78 5 #+; z95 	zz~~9::MMOP\O__abcaderst--//
/SK,:,.-OL) 	 +*s*   "E$ G7*$G7$G49A1G//G47
H)r   )tupler,   )r-   rW   rX   s   `@@r#   extract_completion_datar[   )   s2     >@O%9uS#X %9 %9N Jr"   	type_hintc                    [        U 5      (       aU  [        U 5       H6  nU[        S5      Ld  M  [        U5      nU[        R
                  :w  d  M4  Us  $    [        R
                  $ [        U 5      n[        U[        [        5      5      (       a/  [        U 5      nU(       a  [        U5      S:  a  [        US   5      $ U=(       d    U nU[        L d  [        U[        5      (       a  [        R                  $ [        R
                  $ )zGet completion action from type hint.

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

Returns
-------
CompletionAction
    Completion action for type.
N   r   )r
   r   typeget_completion_actionr   r   r   r   rZ   r	   lenr   r   )r\   argactionoriginargstarget_types         r#   r`   r`   c   s     	I&C$t*$.s3-222!M	 '
  $$$	"F VU>%:;;	"CIN(a11%IKd3KFF%%%   r"   textc                     [         R                  " SSU 5      n [         R                  " SSU 5      R                  5       n U $ )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)rg   s    r#   clean_choice_textrp      s7     66$b$/D66&#t$**,DKr"   format
max_lengthc                     SSK Jn  SSKJn  UR	                  XS9nU" U5      n [
        R                  " SSU 5      n [
        R                  " SSU 5      R                  5       n [        U 5      U:  a  U S	US
-
   S-   n U $ )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)rq   ri   rj   rk   rl   Nr^   u   …)	cyclopts._markuprt   cyclopts.help.inline_textru   from_formatrm   rn   ro   ra   )rg   rq   rr   rt   ru   inlines         r#   strip_markuprz      s|    * .4##D#8FD66$b$/D66&#t$**,D
4y:$j1n%-Kr"   )r6   P   )'r   r=   rm   r@   enumr   pathlibr   typingr   r   r   r   cyclopts._convertr	   cyclopts.annotationsr
   cyclopts.argumentr   cyclopts.exceptionsr   cyclopts.group_extractorsr   r   cyclopts.utilsr   r   cycloptsr   r   r%   dictrZ   r,   r[   r`   rp   intrz   r   r"   r#   <module>r      s   
 
 	    ; ; , ) 0 - H 8 t     7 74c3h0O+P 7t#!S #!-= #!LC C $!s !C !# !s !r"   