B
    0°zfX  ã               @   s¤   d Z ddlZddlmZ ddlZyddlmZ W n  ek
rP   ddl	m
Z Y nX dZdZdgdgdd	gd
gd
gdgdgdœZG dd„ dejƒZG dd„ deƒZdS )z6Extension for flake8 that finds usage of the debugger.é    N)Úchain)Úpep8)Úutilsz4.1.2ZT100Ú	set_traceZ
sset_traceZInteractiveShellEmbedÚ
breakpoint)ÚpdbZpudbZipdbzIPython.terminal.embedzIPython.frontend.terminal.embedzcelery.contrib.rdbÚbuiltinsc                   s4   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Z‡  ZS )	ÚDebuggerFinderc                s@   t t| ƒj||Ž i | _i | _i | _i | _i | _i | _i | _	d S )N)
Úsuperr	   Ú__init__Údebuggers_usedÚdebuggers_traces_redefinedÚdebuggers_traces_namesÚdebugger_traces_importedÚdebuggers_namesÚdebuggers_redefinedÚdebuggers_imported)ÚselfÚargsÚkwargs)Ú	__class__© úR/home/ankuromar296_gmail_com/.local/lib/python3.7/site-packages/flake8_debugger.pyr      s    zDebuggerFinder.__init__c                sv  t ˆ jdd ƒdkr8| j ˆ jˆ jfg ¡}| d t¡¡ t	t
| j ¡ ft ¡ žŽ ƒ}t ˆ jdd ƒ|k}|rêˆ jj| j ¡ krêt‡ fdd„| j ¡ D ƒƒ}| j ˆ jˆ jfg ¡}|ˆ jjkrÒ| d tˆ jj¡¡ n| d t|ˆ jj¡¡ t ˆ jdd ƒ|k}|rht ˆ jjdd ƒ}| j ˆ jˆ jfg ¡}|| j ¡ krR| d	 t|ˆ jj¡¡ n| d tˆ jj¡¡ |  ˆ ¡ d S )
NÚidr   z {0} trace found: breakpoint usedc             3   s&   | ]}|d  ˆ j jkr|d V  qdS )é   r   N)Úfuncr   )Ú.0Úitem)Únoder   r   ú	<genexpr>0   s    z,DebuggerFinder.visit_Call.<locals>.<genexpr>z{0} trace found: {1} usedz {0} trace found: {1} used as {2}Úattrz{0} trace found: {1}.{2} used)Úgetattrr   r   Ú
setdefaultÚlinenoÚ
col_offsetÚappendÚformatÚDEBUGGER_ERROR_CODEÚlistr   r   ÚvaluesÚ	debuggersr   ÚnextÚitemsÚvaluer   r    Úgeneric_visit)r   r   ÚentryZdebugger_method_namesZis_debugger_functionZdebugger_methodZis_debugger_attributeZcallerr   )r   r   Ú
visit_Call&   s,    zDebuggerFinder.visit_Callc             C   s°   xª|j D ] }|jtt ¡ ƒkr|jd k	rf|j| j|j< | j |j	|j
fg ¡}| d t|j|j¡¡ q|jdkr|j| j|j< | j |j	|j
fg ¡}| d t|j¡¡ qW d S )Nz{0} import for {1} found as {2}r   z{0} import for {1} found)ÚnamesÚnamer(   r*   ÚkeysÚasnamer   r   r"   r#   r$   r%   r&   r'   r   )r   r   Ú	name_noder/   r   r   r   Úvisit_ImportD   s    

zDebuggerFinder.visit_Importc             C   s¶   |j tt ¡ ƒkr²xž|jD ]”}|jt|j  kr|jd k	rv|j| j|j< | j 	|j
|jfg ¡}| d t|j|j¡¡ q|j| j|j< | j 	|j
|jfg ¡}| d t|j¡¡ qW d S )Nz{0} import for {1} found as {2}z{0} import for {1} found)Úmoduler(   r*   r3   r1   r2   r4   r   r   r"   r#   r$   r%   r&   r'   r   )r   r   r5   r/   r   r   r   Úvisit_ImportFromS   s    
zDebuggerFinder.visit_ImportFrom)Ú__name__Ú
__module__Ú__qualname__r   r0   r6   r8   Ú__classcell__r   r   )r   r   r	      s   
r	   c               @   s0   e Zd ZdZdZeZdd„ Zdd„ Zdd„ Z	dS )	ÚDebuggerCheckerNzflake8-debuggerc             C   s   || _ || _d | _d S )N)ÚtreeÚfilenameÚlines)r   r>   r?   r   r   r   r   j   s    zDebuggerChecker.__init__c             C   sN   | j dkr"d| _ t ¡  d¡| _nt | j ¡| _| jsJt 	d 
| j¡¡| _d S )N)Ústdinú-NrA   TÚ )r?   Ústdin_utilsZstdin_get_valueÚ
splitlinesr@   ÚpycodestyleÚ	readlinesr>   ÚastÚparseÚjoin)r   r   r   r   Ú	load_fileo   s    
zDebuggerChecker.load_filec             c   sø   | j r| js|  ¡  tƒ }| | j ¡ xR|j ¡ D ]D\}}t | j|d d  ¡s2x"|D ]}|d |d |t	fV  qXW q2W xxt
|j ¡ |j ¡ |j ¡ |j ¡ ƒD ]N\}}||jkr¢t | j|d d  ¡s¢x"|D ]}|d |d |t	fV  qÒW q¢W d S )Nr   r   )r>   r@   rK   r	   Úvisitr   r,   rF   Znoqar=   r   r   r   r   r   )r   ÚparserÚerrorÚmessagesÚmessager   r   r   Úruny   s"    


zDebuggerChecker.run)
r9   r:   r;   Úoptionsr2   Ú__version__Úversionr   rK   rQ   r   r   r   r   r=   e   s   
r=   )Ú__doc__rH   Ú	itertoolsr   rF   Zflake8.enginer   rD   ÚImportErrorZflake8r   rS   r'   r*   ÚNodeVisitorr	   Úobjectr=   r   r   r   r   Ú<module>   s$   
J