
    !<i=                        d Z ddlZddlmZ ddlmZmZmZmZm	Z	m
Z
 erddlmZ ddded	efd
Zded	efdZded	efdZdedeeedf         ef         d	ee         fdZded	efdZdeeedf         ef         dedeedf         deedf         d	ee         f
dZdeeedf         ef         deedf         dedeedf         deedf         d	ee         fdZdedeedf         deded	ee         f
dZdeedf         d	ee         fdZdededeedf         deedf         d	ee         f
dZdedededed	ee         f
dZd edededed	ee         f
d!Zdeedf         ded	efd"Zd#dded	efd$ZdS )%zFish completion script generator.

Generates static fish completion scripts using `complete -c COMMAND` statements.
Completions auto-load from ~/.config/fish/completions/PROGNAME.fish.
    N)TYPE_CHECKING)CompletionActionCompletionDataclean_choice_textextract_completion_dataget_completion_actionstrip_markup)Appappr
   	prog_namereturnc                 <   |rt          j        d|          st          d|d          t          |           }d| ddg}t	          d |                                D                       }|r8|                    t          ||                     |                    d           | j	        rt          | j	                  nd}| j        rt          | j                  nd}|                    t          ||||                     d	                    |          d	z   S )
a  Generate fish completion script.

    Parameters
    ----------
    app : App
        The Cyclopts application to generate completion for.
    prog_name : str
        Program name for completion (alphanumeric with hyphens/underscores).

    Returns
    -------
    str
        Complete fish completion script.

    Raises
    ------
    ValueError
        If prog_name contains invalid characters.
    z^[a-zA-Z0-9_-]+$zInvalid prog_name: z0. Must be alphanumeric with hyphens/underscores.z# Fish completion for z# Generated by Cyclopts c              3   <   K   | ]}t          |          d k    V  dS )r   N)len).0paths     /Users/kimhansen/Desktop/03 Workspace/ceo-agents/chl-effectiveness/mcp-servers/whoop/.venv/lib/python3.11/site-packages/cyclopts/completion/fish.py	<genexpr>z-generate_completion_script.<locals>.<genexpr>6   s,      OOc$ii!mOOOOOO     
)rematch
ValueErrorr   anykeysextend_generate_helper_functionsappend
help_flagstupleversion_flags_generate_completionsjoin)r   r   completion_datalineshas_nested_commandsr!   r#   s          r   generate_completion_scriptr)      s5   (  nBH%8)DD nlylllmmm-c22O 	-,,!
E OO8L8L8N8NOOOOO /	?KKLLLR*-.@s~&&&bJ030AIE#+,,,rM	LL&	:}]]^^^99Ud""r   textc                 .    |                      dd          S )z&Escape single quotes for fish strings.'z'\'')replacer*   s    r   _escape_fish_stringr/   C   s    <<W%%%r   c                 x    |                      dd          } |                      dd          } t          |           S )z!Escape description text for fish.r    )r-   r/   r.   s    r   _escape_fish_descriptionr3   H   s6    <<c""D<<c""Dt$$$r   r&   .c                    t                      }|                                D ]e}|j        D ][}|                                sE|j        j        r9|j        j        D ],}|                    d          r|                    |           -\fd|  d}dd| ddg}|rFd                    d	 t          |          D                       }|
                    d
| d           n|
                    d           |                    g d           |S )a3  Generate helper function for command path detection.

    Parameters
    ----------
    prog_name : str
        Program name.
    completion_data : dict
        Completion data used to identify options that take values.

    Returns
    -------
    list[str]
        Lines defining the helper function.
    -__fish__using_commandz6# Helper function to check exact command path sequencez	function z!    set -l cmd (commandline -opc)z    set -l subcommandsr1   c              3   4   K   | ]}t          |          V  d S Nr/   )r   opts     r   r   z-_generate_helper_functions.<locals>.<genexpr>r   s+      ``S 3C 8 8``````r   z     set -l options_with_values 'r,   z!    set -l options_with_values '')z    set -l skip_next 0z;    # Extract non-option words (commands) from command linez!    for i in (seq 2 (count $cmd))z        set -l word $cmd[$i]z         if test $skip_next -eq 1z            set skip_next 0z            continue        endz)        if string match -qr -- '^-' $wordz>            # Check if this option takes a value (exact match)zF            if string match -q -- "* $word *" " $options_with_values "z                set skip_next 1z            endz        elsez*            # Non-option word is a commandz$            set -a subcommands $wordr<       endz8    # Check if subcommand sequence matches expected pathz2    if test (count $subcommands) -ne (count $argv)z        return 1r=   z"    for i in (seq 1 (count $argv))z-        if test $subcommands[$i] != $argv[$i]z            return 1r<   r=   z    return 0end)setvalues	argumentsis_flag	parametername
startswithaddr%   sortedr    r   )	r   r&   options_with_valuesdataargumentrD   	func_namer'   escaped_optss	            r   r   r   O   s`   $ %%&&(( 6 6 	6 	6H##%% 6(*<*A 6$.3 6 6Ds++ 6+//555		6 4)333I@I+ 	E  :xx``FK^D_D_`````GGGGHHHH8999	LL	
 	
 	
     B Lr   actionc                 N    | t           j        k    rdS | t           j        k    rdS dS )a	  Map completion action to fish flags.

    Parameters
    ----------
    action : CompletionAction
        Completion action type.

    Returns
    -------
    str
        Fish completion flags ("-r -F" for files, "-r -a '(...)'" for directories, "" otherwise).
    z-r -Fz%-r -a '(__fish_complete_directories)'r   )r   FILESDIRECTORIES)rM   s    r   _map_completion_action_to_fishrQ      s2     !'''w!---662r   r!   r#   c           
      &   g }t          |                                           D ]l\  }}|                    t          | ||||                     |t	          |                                 t                    k    r|                    d           m|S )ak  Generate all fish completion commands.

    Parameters
    ----------
    completion_data : dict
        Extracted completion data.
    prog_name : str
        Program name.
    help_flags : tuple[str, ...]
        Help flags.
    version_flags : tuple[str, ...]
        Version flags.

    Returns
    -------
    list[str]
        Completion command lines.
    )keyr   )rG   itemsr   _generate_completions_for_pathmaxr   r   r    )r&   r   r!   r#   r'   command_path_datas          r   r$   r$      s    0 E%o&;&;&=&=>>  e* 	
 	
 	
 333553?????LLLr   rW   c                    || vrg S | |         }g }t          ||          }|                    t          ||||                     d |j        D             }|s|s|r|                    t	          |                     |                    t          ||||                     |                    t          ||||j                             |                    t          |j	        |||j                             |S )a  Generate completions for a specific command path.

    Parameters
    ----------
    completion_data : dict
        Extracted completion data.
    command_path : tuple[str, ...]
        Command path.
    prog_name : str
        Program name.
    help_flags : tuple[str, ...]
        Help flags.
    version_flags : tuple[str, ...]
        Version flags.

    Returns
    -------
    list[str]
        Completion command lines.
    c                 H    g | ]}|                                 |j        | S r   )is_positional_onlyshow)r   args     r   
<listcomp>z2_generate_completions_for_path.<locals>.<listcomp>   s2    ___C9O9O9Q9Q_VYV^_C___r   )
_get_condition_for_pathr    _generate_subcommand_completionsrA   _generate_option_section_header"_generate_help_version_completions!_generate_keyword_arg_completionshelp_format$_generate_command_option_completionscommands)	r&   rW   r   r!   r#   rI   r'   	conditionkeyword_argss	            r   rU   rU      s   6 ?**	<(DE'i@@I	LL1$iQZ[[\\\__4>___L rz r] r4\BBCCC7	9jZghhiii6|YPY[_[kllmmm9$-T]_c_oppqqqLr   rI   rg   c                    d | j         D             }|sg S g }|r,|                    dd                    |                      n|                    d           | j         D ]|}|j        D ]r}|                    d          rt          |j        | j                  }t          |          }	t          |          }
|                    d| d| d|
 d|	 d		           s}|S )
aT  Generate completions for subcommands.

    Parameters
    ----------
    data : CompletionData
        Completion data.
    command_path : tuple[str, ...]
        Command path.
    prog_name : str
        Program name.
    condition : str
        Fish condition.

    Returns
    -------
    list[str]
        Completion command lines.
    c                 P    g | ]#}|j         D ]}|                    d           |$S )r5   )namesrE   )r   registered_commandrD   s      r   r^   z4_generate_subcommand_completions.<locals>.<listcomp>  sU       #ASAY 9=aeapapqtauau   r   z# Subcommands for: r1   z# Root-level commandsr5   complete -c z -a '' -d 'r,   )
rf   r    r%   rk   rE   _get_description_from_appr   rd   r3   r/   )rI   rW   r   rg   rf   r'   rl   cmd_namedescescaped_descescaped_cmds              r   r`   r`     s3   0 '+}  H  	E .C388L+A+ACCDDDD,---"m 	h 	h*0 	h 	hH""3'' ,-?-CTEUVVD3D99L-h77KLLf	ffIffKffWcfffgggg	h Lr   c                 >    | rdd                     |            gS dgS )zGenerate section header comment for options.

    Parameters
    ----------
    command_path : tuple[str, ...]
        Command path.

    Returns
    -------
    list[str]
        Comment line.
    z# Options for: r1   z# Root-level optionsr%   )rW   s    r   ra   ra   9  s2      <:#((<"8"8::;;"##r   c           
      V   g }|D ]}|                     d          r*|dd         }|                    d|  d| d| d           A|                     d          r:t          |          dk    r'|d	         }|                    d|  d| d
| d           |D ]}|                     d          r*|dd         }|                    d|  d| d| d           A|                     d          r:t          |          dk    r'|d	         }|                    d|  d| d
| d           |S )ac  Generate completions for help and version flags.

    Parameters
    ----------
    prog_name : str
        Program name.
    condition : str
        Fish condition.
    help_flags : tuple[str, ...]
        Help flags.
    version_flags : tuple[str, ...]
        Version flags.

    Returns
    -------
    list[str]
        Completion command lines.
    --   Nrm   r1    -l z$ -d 'Display this message and exit.'r5       -s z" -d 'Display application version.')rE   r    r   )r   rg   r!   r#   r'   flag	long_name
short_names           r   rb   rb   K  s   0 E u u??4   	uQRRILLr	rrIrr9rrrssss__S!! 	uc$ii1nnaJLLs	ssIss:sssttt s s??4   	sQRRILLp	ppIpp9pppqqqq__S!! 	sc$ii1nnaJLLq	qqIqq:qqqrrrLr   rh   rd   c                    g }| D ]T}t          |j        j        pd|          }t          |          }|                                }|                    d          }	t          |j                  }
|j        j        pg D ]8}|	                    d          s|	                    d          r|dd         }d	| d
| d| g}n)t          |          dk    r|d         }d	| d
| d| g}nn|r|                    d| d           n|	r>d |	D             }d
                    |          }|                    d| d| d           nFt          |
          }|r|                    | d| d           n|                    d| d           |                    d
                    |                     :|j        D ]}|	                    d          s|	                    d          r-|dd         }|                    d	| d
| d| d| d	           Zt          |          dk    r*|d         }|                    d	| d
| d| d| d	           V|S )aQ  Generate completions for keyword arguments.

    Parameters
    ----------
    keyword_args : list
        Keyword arguments.
    prog_name : str
        Program name.
    condition : str
        Fish condition.
    help_format : str
        Help text format.

    Returns
    -------
    list[str]
        Completion command lines.
    r   formatT)forcer5   rw   rx   Nrm   r1   ry   rz   r{   z-d 'r,   c                 F    g | ]}t          t          |                    S r   )r/   r   )r   cs     r   r^   z5_generate_keyword_arg_completions.<locals>.<listcomp>  s+    "^"^"^QR#67H7K7K#L#L"^"^"^r   z-x -a 'rn    -d 'z-r -d ')r	   rC   helpr3   rB   get_choicesr   hintrD   rE   r   r    r%   rQ   	negatives)rh   r   rg   rd   r'   rJ   rq   rr   rB   choicesrM   rD   r}   
line_partsr~   escaped_choiceschoices_straction_flagss                     r   rc   rc   x  s   0 E  -i -iH.39r+NNN/55""$$&&T&22&x}55&+1r 	/ 	/D??3'' t$$  H	SYSSSS	SST

Ta!!W
TYTTTT
TTU

 A!!"8"8"8"89999 	A"^"^V]"^"^"^!hh77!!"NK"N"N|"N"N"NOOOO=fEE A%%&K&KL&K&K&KLLLL%%&?&?&?&?@@@LL*--....& 		i 		iD??3'' t$$ i H	fIff	ffyffWcfffggggTa!!W
gIgg	ggzggXdggghhh		i Lr   rf   c                    g }| D ]}|j         D ]}|                    d          st          |j        |          }t	          |          }|                    d          r-|dd         }	|                    d| d| d|	 d| d		           ~t          |          dk    r*|d
         }
|                    d| d| d|
 d| d		           |S )aj  Generate completions for commands that look like options.

    Parameters
    ----------
    commands : list
        List of RegisteredCommand tuples.
    prog_name : str
        Program name.
    condition : str
        Fish condition.
    help_format : str
        Help text format.

    Returns
    -------
    list[str]
        Completion command lines.
    r5   rw   rx   Nrm   r1   ry   r   r,   rz   r{   )rk   rE   ro   r   r3   r    r   )rf   r   rg   rd   r'   rl   rp   rq   rr   r}   r~   s              r   re   re     s%   0 E& i i*0 	i 	iH&&s++ ,-?-C[QQD3D99L""4(( i$QRRL	fIff	ffyffWcfffggggX!##%a[
gIgg	ggzggXdggghhh	i Lr   c                 f    | sdS d| d}d                     d | D                       }d| d| dS )a  Generate fish condition string for a command path.

    Parameters
    ----------
    command_path : tuple[str, ...]
        Command path (empty for root).
    prog_name : str
        Program name.

    Returns
    -------
    str
        Fish condition flag.
    z-n __fish_use_subcommandr6   r7   r1   c              3   4   K   | ]}t          |          V  d S r9   r:   )r   cmds     r   r   z*_get_condition_for_path.<locals>.<genexpr>  s+      QQS 3C 8 8QQQQQQr   z-n 'r,   ru   )rW   r   rK   escaped_commandss       r   r_   r_     s]      *))3)333IxxQQLQQQQQ1)11.1111r   cmd_appc                     ddl m} | j        sdS 	  || j        d          }|j        pd}n$# t          $ r t          | j                  }Y nw xY wt          ||          S )zExtract description from App.

    Parameters
    ----------
    cmd_app : App
        Command app.
    help_format : str
        Help text format.

    Returns
    -------
    str
        Description text.
    r   )docstring_parser   	plaintextr   )cyclopts.help.helpr   r   short_description	Exceptionstrr	   )r   rd   r   parsedr*   s        r   ro   ro     s     322222< r! {;;'-2 ! ! !7<  ! [1111s   , AA)__doc__r   typingr   cyclopts.completion._baser   r   r   r   r   r	   cycloptsr
   r   r)   r/   r3   dictr"   listr   rQ   r$   rU   r`   ra   rb   rc   re   r_   ro   r   r   r   <module>r      s(    
			                             )#E )#c )#c )# )# )# )#X&c &c & & & &
%3 %3 % % % %II%S/>9:I 
#YI I I IX+;     ('%S/>9:'' c3h' c?	'
 
#Y' ' ' 'T+%S/>9:+S/+ + c3h	+
 c?+ 
#Y+ + + +\/
/S// / 	/
 
#Y/ / / /d$%S/ $d3i $ $ $ $$*** c3h* c?	*
 
#Y* * * *ZIII I 	I
 
#YI I I IX))) ) 	)
 
#Y) ) ) )X2%S/ 2c 2c 2 2 2 2.2u 23 23 2 2 2 2 2 2r   