B
    b                  @   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   /lib/python3.7/site-packages/jedi/api/strings.pyr      s   r   c             C   s   |}|dkr|  }d}|r,t|||dd}|dkr|d krN||k	rNt||}| |}|  }	|	jdkrt||	}
tt| j|
|d krdn|||dS g S )N[ T)invert_result)ZatomZtrailername)fuzzy)	Zget_previous_leafget_quote_endingr   Zcreate_contexttyper   list_completions_for_dictsinference_state)Zmodule_context
code_linesZleafpositionr   r   Zbracket_leafcut_end_quotecontextZbefore_bracket_leafvaluesr   r   r   complete_dict   s(    




r   c             c   sj   xdt t|dd dD ]L}t||}||rt| |d t| pBd  }t| |d t||dV  qW d S )Nc             S   s   t | S )N)repr)xr   r   r   <lambda>5       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   4   s    

r   c             C   sf   t |ttfr| st|S t|}t| \}}|d kr:|S ||d krN|| S || |dd  | S )Nr      )
isinstancestrbytesr   _get_string_prefix_and_quote)r)   r*   rprefixquoter   r   r   r%   B   s    r%   c             c   sH   xB| D ]:}|j dkrx*| D ]}|jtd}|tk	r|V  qW qW d S )Ndict)default)Z
array_typeZget_key_valuesZget_safe_value	_sentinel)r(   Zdctr!   r*   r   r   r   r$   O   s    

r$   c             C   s,   t d| }|d krdS |d|dfS )Nz(\w*)("""|\'{3}|"|\'))NNr+      )rematchgroup)r   r9   r   r   r   r0   X   s    r0   c             C   s0   | |d d  |d |d t |  }||kS )Nr   r+   )r'   )r   r3   r   r   r   r   r   _matches_quote_at_position_   s    (r;   Fc             C   s0   t | \}}|d krdS t||||kr,dS |S )Nr   )r0   r;   )r   r   r   r   _r3   r   r   r   r   d   s    r   )F)__doc__r8   Zjedi.inference.namesr   Zjedi.inference.helpersr   Zjedi.api.classesr   Zjedi.parser_utilsr   objectr6   r   r   r   r%   r$   r0   r;   r   r   r   r   r   <module>	   s   	