o
     JAf,                     @   s   	 d dl Z d dlZd dlZg dZi ZG dd dZG dd deZG dd deZdd
dZ	dddZ
dddZdddZdddZG dd de jZdd Zdd Zedkr]e  dS dS )    N)
readmodulereadmodule_exClassFunctionc                   @   s   e Zd Z	 dd ZdS )_Objectc                 C   sD   || _ || _|| _|| _|| _|| _i | _|d ur | |j|< d S d S N)modulenamefilelineno
end_linenoparentchildren)selfr   r	   r
   r   r   r    r   /usr/lib/python3.10/pyclbr.py__init__7   s   z_Object.__init__N)__name__
__module____qualname__r   r   r   r   r   r   5   s    r   c                       s(   e Zd Z	 	ddd fddZ  ZS )r   NFr   c                   s8   t  |||||| || _t|tr||j|< d S d S r   )superr   is_async
isinstancer   methods)r   r   r	   r
   r   r   r   r   	__class__r   r   r   F   s
   
zFunction.__init__)NFr   r   r   r   __classcell__r   r   r   r   r   D       r   c                       s(   e Zd Z	 	ddd fddZ  ZS )r   Nr   c                   s*   t  |||||| |pg | _ i | _d S r   )r   r   r   )r   r   r	   Zsuper_r
   r   r   r   r   r   r   r   P   s   

zClass.__init__r   r   r   r   r   r   r   N   r   r   Fc              	   C   s   	 t | j|| j|| ||dS )N)r   r   r   )r   r   r
   )ob	func_namer   r   r   r   r   r   _nest_functionY   s   r"   c              	   C   s   	 t | j||| j|| |dS )Nr   r   )r   r   r
   )r    
class_namer   r   r   r   r   r   _nest_class^   s   r%   c                 C   s8   	 i }t | |pg  D ]\}}t|tr|||< q|S r   )_readmoduleitemsr   r   )r   pathreskeyvaluer   r   r   r   d   s   
r   c                 C   s   	 t | |pg S r   )r&   )r   r(   r   r   r   r   p   s   r   c              	   C   sx  	 |d urd|| f }n| }|t v rt | S i }| tjv r'|d u r'|t | < |S | d}|dkra| d | }| |d d  }t|||}|d urNd||f }d|vrYtd|t||d |S d }	|d urj|}
n|tj }
tj	
||
}|d u rtd||d|t |< |jd ur|j|d< z|j|}W n ttfy   | Y S w |d u r|S |j|}t||||||S )	Nz%s.%s.r      __path__zNo package named {}zno module named )r	   )_modulessysbuiltin_module_namesrfindr&   ImportErrorformatr(   	importlibutil_find_spec_from_pathModuleNotFoundErrorsubmodule_search_locationsloader
get_sourceAttributeErrorget_filename_create_tree)r   r(   	inpackage
fullmoduletreeipackageZ	submoduler   fZsearch_pathspecsourcefnamer   r   r   r&   z   sN   



r&   c                   @   sB   e Zd Zdd Zdd ZddddZd	d
 Zdd Zdd ZdS )_ModuleBrowserc                 C   s(   || _ || _|| _|| _|| _g | _d S r   )r(   rA   r
   r   r?   stack)r   r   r(   r
   rA   r?   r   r   r   r      s   
z_ModuleBrowser.__init__c           
   	   C   s   g }|j D ];}t|}|| jv r|| j|  qt|d }dkr;|^ }}}|tv r:|t| || q|| q| j	rI| j	d nd }	t
| j|j|| j|j|	|jd}|	d u re|| j|j< | j	| | | | j	  d S )Nr,   r-   r#   )basesastZunparserA   appendlensplitr/   getrI   r   r   r	   r
   r   r   generic_visitpop)
r   noderK   baser	   names_r   class_r   r   r   r   visit_ClassDef   s(   



z_ModuleBrowser.visit_ClassDefFr   c             	   C   sl   | j r| j d nd }t| j|j| j|j|||jd}|d u r$|| j|j< | j | | 	| | j 
  d S )NrJ   r   )rI   r   r   r	   r
   r   r   rA   rM   rQ   rR   )r   rS   r   r   functionr   r   r   visit_FunctionDef   s   
z _ModuleBrowser.visit_FunctionDefc                 C   s   | j |dd d S )NTrY   )r[   )r   rS   r   r   r   visit_AsyncFunctionDef   s   z%_ModuleBrowser.visit_AsyncFunctionDefc              
   C   sn   |j dkrd S |jD ]*}zzt|j| j| j W n ty'   t|jg  Y nw W q
 ttfy4   Y q
w d S )Nr   )
col_offsetrU   r&   r	   r(   r?   r3   SyntaxError)r   rS   r   r   r   r   visit_Import   s   

z_ModuleBrowser.visit_Importc              	   C   s   |j dkrd S zd|j }|jr||j7 }t|| j| j}W n ttfy*   Y d S w |jD ]-}|j	|v rB||j	 | j
|jp@|j	< q.|j	dkr[| D ]\}}|drUqK|| j
|< qKq.d S )Nr   r,   *rV   )r]   levelr   r&   r(   r?   r3   r^   rU   r	   rA   asnamer'   
startswith)r   rS   r   r	   Zimport_nameZimport_valuer   r   r   visit_ImportFrom   s(   






z_ModuleBrowser.visit_ImportFromN)	r   r   r   r   rX   r[   r\   r_   rd   r   r   r   r   rH      s    
rH   c                 C   s&   t | ||||}|t| |jS r   )rH   ZvisitrL   parserA   )r@   r(   rG   rF   rA   r?   Zmbrowserr   r   r   r>     s   r>   c            
      C   sX  	 dd l } ztjd }W n   t}Y | j|r4| j|g}| j|}| 	dr3|d d }ng }t
||}dd }t| |dd}d	}|r| }t|trVqJt|d
s^d|_t|tr}t|j |dd}|D ]}	|j| |	_qo|| t|trtdd|j |j|j|j nt|trtdd|j |j|j |sLd S d S )Nr   r-   z.pyc                 S   s   t | ddS )Nr   r   )getattr)ar   r   r   <lambda>"  s    z_main.<locals>.<lambda>T)r*   reverse   indentz{}class {} {} {} z{}def {} {})osr0   argv__file__r(   existsdirnamebasenamelowerendswithr   sortedvaluesrR   r   listhasattrrl   r   r   extendr   printr4   r	   r   r   r   )
rn   modr(   rA   Z
lineno_keyZobjsZindent_levelobjZnew_objsr    r   r   r   _main  sJ   







r~   __main__)Fr   )rL   r0   importlib.utilr5   __all__r/   r   r   r   r"   r%   r   r   r&   ZNodeVisitorrH   r>   r~   r   r   r   r   r   <module>   s(    +






@S&
