o
    ˷eg*                     @   s  d dl Z d dlZd dlmZ d dlmZ d dlmZmZ d dl	m
Z
 d dlmZ d dlmZ d dlmZ d	Zd
Z	 dZ	 d-ddZdd Zdd Zdd Zdd Zdd Zd.ddZdd Zdd Zd-d d!Zd-d"d#Zd$d% Zd&d' Z 	(d/d)d*Z!	d0d+d,Z"dS )1    N)python_bytes_to_unicode)dbg)KnownContentFileIOFolderIO)SubModuleName)load_module_from_path)ParserTreeFilter)convert_names)z.toxz.venvz.mypy_cachevenv__pycache__i      c                 c   sH    | D ]}||v r
qt |ts|V  |jdkr!t| | E d H  qd S )Nmodule)
isinstancer   api_type_resolve_namesgoto)definition_namesavoid_namesnamer   r   P/var/www/ideatree/venv/lib/python3.10/site-packages/jedi/inference/references.pyr      s   

r   c                 C   s   t dd | D S )Nc                 s   s(    | ]}|j d u r|n|j |fV  qd S N)	tree_name.0nr   r   r   	<genexpr>.   s
    
z _dictionarize.<locals>.<genexpr>)dict)namesr   r   r   _dictionarize-   s   r   c                 C   s   t | |}t|D ]}|tt|g|   ddO }q	|tt||jO }t|D ]}|jdks>|j	d u s>|j	j
jdkr?q+|tt|j|jO }q+tt|S )NF)
only_stubsprefer_stub_to_compiledparamtrailer)_find_nameslistsetr	   get_root_contextis_stub_find_global_variablesvaluer   r   parenttype_add_names_in_same_contextparent_contextstring_namer   )module_contextr   found_namesr   r   r   r   _find_defining_names4   s   
r2   c                 C   s,   |  |}t| }|| tt|S r   )create_namer&   r   addr   )r0   r   r   r1   r   r   r   r$   H   s   

r$   c                 c   s^    | j d u rd S d }	 t| |d}t||}|sd S |E d H  t|dd d}|d j}q)NT)r.   until_positionc                 S   s   | j S r   )	start_pos)xr   r   r   <lambda>^   s    z,_add_names_in_same_context.<locals>.<lambda>)keyr   )	tree_noder   r&   getsortedr6   )contextr/   r5   filter_r   orderedr   r   r   r-   P   s    


r-   c              	   c   sx    | D ]6}|j d u rq| }z|j}W n	 ty   Y qw | |D ]}|V  ||j }t||jE d H  q$qd S r   )r   r'   get_global_filterAttributeErrorr;   create_contextr-   r/   )r   search_namer   r0   methodglobal_namecr   r   r   r)   b   s    

r)   Fc                    s  j }|j}zd|_t|}W d|_nd|_w t| g}|sDtdd |D D ]}|krC|jd urC|jj|	 j
v rC|| q*|sOtdd |D rR|}nt|||}i }	|D ]Uj |g D ]I}
tt|
}t fdd|D r | |D ]}|	|g D ]} | qz|	|= W q ty   Y qw qg|D ]}|	|g | qqgq\  }|rfdd|D S |S )	NFTc                 s   s    | ]}|  V  qd S r   r'   )r   dr   r   r   r          z"find_references.<locals>.<genexpr>c                 s   s    | ]}|j d kV  qdS )r"   N)r   r   r   r   r   r          c                 3   s    | ]}| v V  qd S r   r   )r   r   )found_names_dctr   r   r      rI   c                    s   g | ]
}|   kr|qS r   rG   r   )r0   r   r   
<listcomp>   s    z#find_references.<locals>.<listcomp>)inference_stater*   flow_analysis_enabledr2   r   r&   r:   projectpath
py__file__parentsappendany#get_module_contexts_containing_nameget_used_namesr;   r$   updateKeyError
setdefaultvalues)r0   r   only_in_moduleinfrC   r1   module_contextsmpotential_modulesnon_matching_reference_maps	name_leafnewdctr   resultr   )rK   r0   r   find_referencesr   sX   



re   c                 C   sf   z|  }W n
 ty   Y d S w t|dd}||sd S t|j|}t| |}| r/d S | S )Nreplace)errors)	readFileNotFoundErrorr   searchr   rP   r   is_compiled
as_context)rM   file_ioregexcodenew_file_ior^   r   r   r   	_check_fs   s   

rq   c                 C   s   t  }t  }|  D ]9}|r|drq|dd}|dr@|dd  }|tjjr4|d d }|	tj
| j| q|	| q||fS )N   #zutf-8ignore/   )r&   rh   
splitlines
startswithdecodeendswithosrP   sepr4   join)	folder_iorm   ignored_pathsignored_nameslpr   r   r   r   gitignored_lines   s   
r   c           	      #   s    t   |  D ]B\}}}|D ]#}|j}|jdv r#| vr#d |fV  |jdkr3t||\}} |O  q fdd|D |d d < |D ]} | d fV  qCq	d S )N)z.pyz.pyiz
.gitignorec                    s&   g | ]}|j  vr| tvr|qS r   )rP   get_base_name_IGNORE_FOLDERS)r   r~   except_pathsr   r   rL      s    
z9recurse_find_python_folders_and_files.<locals>.<listcomp>)r&   walkrP   suffixr   r   )	r~   r   root_folder_io
folder_iosfile_iosrm   rP   r   r   r   r   r   %recurse_find_python_folders_and_files   s(   



r   c                 c   s(    t | |D ]\} }|d ur|V  qd S r   )r   )r~   r   rm   r   r   r   recurse_find_python_files   s   r   c                 #   s    |   }t }dd |D }|D ]>}| j}|d u rq| }	 |j t fdd|D r4 |v r5nt||D ]
}|j|vrD|V  q:|  | }q"qd S )Nc                 S      g | ]}|  qS r   rQ   r   r^   r   r   r   rL          z2_find_python_files_in_sys_path.<locals>.<listcomp>Tc                 3   s    | ]}  |V  qd S r   )rx   )r   r   rP   r   r   r      rJ   z1_find_python_files_in_sys_path.<locals>.<genexpr>)	get_sys_pathr&   	get_valuerm   get_parent_folderrP   rT   r   r4   )rM   r]   sys_pathr   yielded_pathsr0   rm   r~   r   r   r   _find_python_files_in_sys_path   s,   


r   c                 c   s,    dd |D }t t| jj|E d H  d S )Nc                 S   r   r   r   r   r   r   r   rL      r   z)_find_project_modules.<locals>.<listcomp>)r   r   rO   rP   )rM   r]   except_r   r   r   _find_project_modules   s   r   ru   c                 c   sP    |D ]
}|  r
q|V  qt|dkrdS t| |}t| |||dE dH  dS )z
    Search a name in the directories of modules.

    :param limit_reduction: Divides the limits on opening/parsing files by this
        factor.
       N)limit_reduction)rk   lenr   search_in_file_ios)rM   r]   r   r   r0   file_io_iteratorr   r   r   rU     s   	
rU   c                 c   s    t | }t| }d}d}tdt| |rdnd }	|D ]/}
|d7 }t| |
|	}|d urB|d7 }|V  ||krBtd|  d S ||krNtd|  d S qd S )Nr   z\b ru   zHit limit of parsed files: %szHit limit of opened files: %s)_PARSED_FILE_LIMIT_OPENED_FILE_LIMITrecompileescaperq   r   )rM   r   r   r   completeparse_limit
open_limitfile_io_countparsed_file_countrn   rm   r^   r   r   r   r     s(    

r   )r   )F)ru   )ru   F)#r{   r   parsor   
jedi.debugr   jedi.file_ior   r   jedi.inference.namesr   jedi.inference.importsr   jedi.inference.filtersr   !jedi.inference.gradual.conversionr	   r   r   r   r   r   r2   r$   r-   r)   re   rq   r   r   r   r   r   rU   r   r   r   r   r   <module>   s>    

6


