o
    MTh                     @   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__api_typeis_value_name r   r   S/home/air/segue/gemini/backup/venv/lib/python3.10/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))]})atomtrailername)fuzzy)
get_previous_leafget_quote_endingr   create_contextparenttyper   list_completions_for_dictsinference_state)module_context
code_linesleafpositionr   r   bracket_leafcut_end_quotecontextbefore_node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)stacklike_name_lengthis_fuzzy)sorted_get_python_keys_create_repr_string
startswithr   lenr   )r    dictsliteral_stringr&   r   dict_key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)r9   r:   rprefixquoter   r   r   r5   E   s   r5   c                 c   sB    | D ]}|j dkr| D ]}|jtd}|tur|V  qqd S )Ndict)default)
array_typeget_key_valuesget_safe_value	_sentinel)r8   dctr/   r:   r   r   r   r4   R   s   
r4   c                 C   s,   t d| }|d u rdS |d|dfS )Nz(\w*)("""|\'{3}|"|\'))NNr<      )rematchgroup)r   rN   r   r   r   rA   [   s   rA   c                 C   s0   | |d d  |d |d t |  }||kS )Nr   r<   )r7   )r"   rD   r$   r   r   r   r   _matches_quote_at_positionb   s   (rP   Fc                 C   s0   t | \}}|d u rdS t||||krdS |S )Nr   )rA   rP   )r   r"   r$   r   _rD   r   r   r   r   g   s   r   )F)__doc__rM   jedi.inference.namesr   jedi.inference.helpersr   jedi.api.classesr   jedi.parser_utilsr   objectrJ   r   r+   r   r5   r4   rA   rP   r   r   r   r   r   <module>   s    		