o
    ï›h  ã                   @   s�   d Z ddlZddlmZ ddlmZ ddlmZ ddlm	Z	 e
ƒ ZG dd„ deƒZd	d
„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zddd„ZdS )ap  
This module is here for string completions. This means mostly stuff where
strings are returned, like `foo = dict(bar=3); foo["ba` would complete to
`"bar"]`.

It however does the same for numbers. The difference between string completions
and other completions is mostly that this module doesn't return defined
names in a module, but pretty much an arbitrary string.
é    N)ÚAbstractArbitraryName)Úinfer_call_of_leaf)Ú
Completion)Úcut_value_at_positionc                   @   s   e Zd ZdZdZdS )Ú
StringNameÚstringFN)Ú__name__Ú
__module__Ú__qualname__Zapi_typeZis_value_name© r   r   úFc:\Users\shubh\Videos\agent\nova\Lib\site-packages\jedi/api/strings.pyr      s    r   c                 C   s®   |}|dkr
|  ¡ }d}|rt|||dd�}|dkrU|d u r'||ur't||ƒ}|  |¡}|  ¡  }	}
|	dv r9|	j}	|	jdv rUt||
ƒ}tt| j	||d u rNdn|||d�ƒS g S )Nú[Ú T)Úinvert_result)ú)ú]Ú})ZatomÚtrailerÚname)Úfuzzy)
Zget_previous_leafÚget_quote_endingr   Zcreate_contextÚparentÚtyper   ÚlistÚ_completions_for_dictsÚinference_state)Zmodule_contextÚ
code_linesÚleafÚpositionr   r   Zbracket_leafÚcut_end_quoteÚcontextZbefore_nodeZbefore_bracket_leafÚvaluesr   r   r   Úcomplete_dict   s.   



ûr"   c                 c   sh   � t t|ƒdd„ d�D ]&}t||ƒ}| |¡r1t| |d t|ƒ p!d … ƒ}t| |d t|ƒ|d�V  qd S )Nc                 S   s   t | ƒS )N)Úrepr)Úxr   r   r   Ú<lambda>8   s    z(_completions_for_dicts.<locals>.<lambda>)Úkey)ÚstackZlike_name_lengthZis_fuzzy)ÚsortedÚ_get_python_keysÚ_create_repr_stringÚ
startswithr   Úlenr   )r   ÚdictsÚliteral_stringr   r   Údict_keyZdict_key_strr   r   r   r   r   7   s   €

û€ür   c                 C   sf   t |ttfƒr	| st|ƒS t|ƒ}t| ƒ\}}|d u r|S ||d kr'|| S || |dd…  | S )Nr   é   éÿÿÿÿ)Ú
isinstanceÚstrÚbytesr#   Ú_get_string_prefix_and_quote)r.   r/   ÚrÚprefixÚquoter   r   r   r*   E   s   r*   c                 c   sB   � | D ]}|j dkr| ¡ D ]}|jtd�}|tur|V  qqd S )NÚdict)Údefault)Z
array_typeZget_key_valuesZget_safe_valueÚ	_sentinel)r-   Údctr&   r/   r   r   r   r)   R   s   €
€ûr)   c                 C   s,   t  d| ¡}|d u rdS | d¡| d¡fS )Nz(\w*)("""|\'{3}|"|\'))NNr0   é   )ÚreÚmatchÚgroup)r   r?   r   r   r   r5   [   s   r5   c                 C   s0   | |d d  |d |d t |ƒ … }||kS )Nr   r0   )r,   )r   r8   r   r   r   r   r   Ú_matches_quote_at_positionb   s   (rA   Fc                 C   s0   t | ƒ\}}|d u rdS t|||ƒ|krdS |S )Nr   )r5   rA   )r   r   r   r   Ú_r8   r   r   r   r   g   s   r   )F)Ú__doc__r>   Zjedi.inference.namesr   Zjedi.inference.helpersr   Zjedi.api.classesr   Zjedi.parser_utilsr   Úobjectr;   r   r"   r   r*   r)   r5   rA   r   r   r   r   r   Ú<module>   s    		