
    d:                        d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlmZ d dlmZ d dlmZ erd dlmZ d dlmZ d dlmZ d d	lmZ  G d
 d          Z G d d          ZdS )    )annotationsN)TYPE_CHECKING)FrameCollection)	Formatter)Frame)SolutionProviderRepository)IO)Outputc                      e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zed
ededededede	de
dedi	Z eej                  Z e ee                    ZdddddddZd.d/dZ	 d0d1d&Zd2d'Zd2d(Zd3d4d-Zd)S )5Highlightertoken_defaulttoken_commenttoken_stringtoken_numbertoken_keywordtoken_builtintoken_opline_markerline_numberzfg=yellow;options=boldzfg=blue;options=boldzfg=default;options=dark,italiczfg=magenta;options=boldfg=default;options=boldz
fg=defaultzfg=default;options=darkzfg=red;options=bold>|)arrow	delimiteru   →u   │)FTTsupports_utf8boolreturnNonec                f    | j                                         | _        | j        |         | _        d S N)DEFAULT_THEMEcopy_themeUI_ui)selfr   s     [/home/feoh/.local/pipx/venvs/poetry/lib/python3.11/site-packages/cleo/ui/exception_trace.py__init__zHighlighter.__init__>   s*    (--//7=)       sourcestrlineintlines_beforelines_after	list[str]c                    |                      |          }|                     ||          }||z
  dz
  }t          |d          }||z   dz   }||||z            }|S )N   r   )highlighted_linesline_numbersmax)r&   r+   r-   r/   r0   token_linesoffsetlengths           r'   code_snippetzHighlighter.code_snippetB   sp     ,,V44''T::$q(VQ|+a/!&6F?":;r)   c                    |                     dd                               dd          }|                     |          S )Nz

)replacesplit_to_lines)r&   r+   s     r'   r4   zHighlighter.highlighted_linesO   s9    --55dDAA""6***r)   c           	        g }d}d}d}d }t          j        |                                          t                      dfd}t	          j        |          }d}	|D ]s}
|
\  }}}}}|d         }|dk    r|t          j        k    r8|| j        }|	d| j        |          d| d	z  }	|                    |	            n||k    ri|| j        }||z
  }|dk    r|dg|dz
  z  z  }|	                    d
          }|	d| j        |          d| d	z  }	|                    |	           d}	|}d}d}|| j
        v r| j        }n|| j        v s|dk    r| j        }ny|t          j        k    r| j        }na|t          j        k    r| j        }nI|t          j        k    r| j        }n1|t          j        k    r| j        }n|t          j        k    rk| j        }||}|d         |k    r||
j        ||d                  z  }||k    r|	d| j        |          d| d	z  }	d}|}||d         k     r|                    d
          }|	d| j        |          d|d          d	z  }	|                    |	           |dd         D ])}|                    d| j        |          d| d	           *|d         }|d         d |d                  }d}	d||z  }|d         }|}u|S )Nr3   r    r   bytesc                                                                                                                                                                                    S r    )formatescapereadlinedecodeencode)	formatter	source_ios   r'   rF   z,Highlighter.split_to_lines.<locals>.readline]   sM    ##  !3!3!5!5!<!<!>!>?? fhhr)   <r   </>r<   r&   )r   rB   )ioBytesIOrH   r   tokenize	ENDMARKERTOKEN_DEFAULTr#   appendrstripKEYWORDSTOKEN_KEYWORDBUILTINSTOKEN_BUILTINSTRINGTOKEN_STRINGNUMBERTOKEN_NUMBERCOMMENTTOKEN_COMMENTOPTOKEN_OPNEWLINEr-   split)r&   r+   linescurrent_linecurrent_colbuffercurrent_typerF   tokensr-   
token_info
token_typer   startend_linenodiffstripped_buffernew_typer7   
token_linerI   rJ   s                         @@r'   r?   zHighlighter.split_to_linesT   s   Jv}}//	KK		 	 	 	 	 	 	
 "8,,  M	" M	"J6@3JeS!1XF{{X///'#'#5LCDK5CCCCCCT"""$$'#'#5L,!88bTTAX..E"(--"5"5LDK5LLLLLL T"""%t},,-..,&2H2H-x..,x..,x///-x{**=x///-#'Qx+%%*/+a*@AAx''CDK5CCCCCC'A*0066KDK5KKAKKKKT""""-ad"3 R RJLL!PT[%>!P!P!P!P!PQQQQ"1v$R3q62l"Fa&K!LLr)   Nrc   	mark_line
int | Nonec                   t          dt          t          t          |                                        }g }d| j        | j                  d| j        d          d}d}t          |          D ]\  }}d}	|||dz   k    r|}	n|}	|dz   d| }
||dz   k    rd	n| j        | j                 }|	d| d|
 d
| j        | j                  d| j        d          d| 
z  }	|                    |	           |S )N   rK   r   r   z</> z  rA   r3   r   z</><r   )	r6   lenr,   r#   LINE_MARKERr%   	enumerateLINE_NUMBERrS   )r&   rc   rs   max_line_lengthsnippet_linesmarker	no_markerir-   snippetr   stylings               r'   r5   zHighlighter.line_numbers   s\   aSU__!5!566LT[!12LLTXg5FLLL	 '' 	* 	*GAtG$A%%$GG'GU7_777K A%% *)[!12 
 5G 5 55 5$(K0@$A5 58K(5 5.25 5G
   ))))r)   )T)r   r   r   r   )r*   r*   )
r+   r,   r-   r.   r/   r.   r0   r.   r   r1   )r+   r,   r   r1   r    )rc   r1   rs   rt   r   r1   )__name__
__module____qualname__rR   r^   rZ   r\   rV   rX   r`   rx   rz   r!   setkeywordkwlistrU   dirbuiltinsrW   r$   r(   r:   r4   r?   r5    r)   r'   r   r      sL       #M#M!L!L#M#MHKK 	.,700|+*.
M s7>""Hs33x==!!H 3//E22
 
B
* * * * *
 QR    + + + +
_ _ _ _B      r)   r   c                      e Zd ZU dZdddddZ ee          d  ee          D             dZi Z	d	e
d
<   	 d-d.dZd/dZd0d1dZd2dZd3d Zd4d!Zd5d$Z	 d6d7d*Zd8d,ZdS )9ExceptionTracez,
    Renders the trace of an exception.
    z<fg=black;options=bold><fg=yellow>	<fg=blue>z<fg=magenta>)commentr   builtinliteralc                ,   g | ]}t          j        |                                          (t          j        t          t          |                    Ot          t          t          |          t          j                  |t          t          |          S r   )	r   	iskeywordlowerinspectisclassgetattrast
issubclassAST).0clss     r'   
<listcomp>zExceptionTrace.<listcomp>   s     
 
 
 --
 S 1 122	

 73,,cg66
C
 
 
r)   )r   keywordsz'dict[tuple[Frame, int, int], list[str]]_FRAME_SNIPPET_CACHEN	exception	Exceptionsolution_provider_repository!SolutionProviderRepository | Noner   r   c                `    || _         || _        t          j                    | _        d | _        d S r    )
_exception_solution_provider_repositorysysexc_info	_exc_info_ignore)r&   r   r   s      r'   r(   zExceptionTrace.__init__   s+    
 $-I*#'r)   ignorer,   c                    || _         | S r    )r   )r&   r   s     r'   ignore_files_inzExceptionTrace.ignore_files_in   s    r)   FrN   IO | Outputsimpler   c                    |rt          | j                  nd}|r% |j        d            |j        d| d           n|                     || j                   |                     || j                   d S )NrA   <error></error>)r,   r   
write_line_render_exception_render_solution)r&   rN   r   simple_strings       r'   renderzExceptionTrace.render   s    06>DO,,,B 	8BM"BM;M;;;<<<<""2t777b$/22222r)   BaseExceptionc                   ddl m}  ||          }|j        sd S |                                rT|j        J |                     ||j                    |j        d            |j        d            |j        d           |                     ||j                   |                     |d|j	         dd            |j        d           t                                          |j                                      dd	          }|                     |d
| d           |j        d         }|                     ||           d S )Nr   )	InspectorrA   z>The following error occurred when trying to handle this error:r   r   Tr<   z
  z<b>z</b>rM   )crashtest.inspectorr   frameshas_previous_exceptionprevious_exceptionr   r   _render_trace_render_lineexception_namer   rD   exception_messager>   _render_snippet)r&   rN   r   r   	inspectorr   current_frames          r'   r   z ExceptionTrace._render_exception  s{   111111Ii((	 	F++-- 	/;;;""2y'CDDDBM"BMP   BM"2y/000"J	(@JJJDQQQbKKy:;;CCD&QQ 	 	";$5;;;<<<!(,R/////r)   framer   c           
     @   |                      |d|                     |j                   d|j         d|j         dd           t           |j                                                  |j        |j        dd          }|D ]}|                      ||d           d S )	Nzat <fg=green>z</>:<b></b> in <fg=cyan>rL   Tr      indent)	r   _get_relative_file_pathfilenamern   functionr   r   r:   file_content)r&   rN   r   
code_lines	code_lines        r'   r   zExceptionTrace._render_snippet"  s    FD88HH F F<F F27.F F F		
 	
 	
 !/?r/?/A/ABBBOOa
 

 $ 	7 	7Ib)A6666	7 	7r)   c                   | j         d S | j                             |          }d} |j                    sd}|D ]}|j        }|j        }|j        }|                    dd                              d          }d                    d |D                       }	| 	                    |d| d	|
                    d
           d| |	 d           d S )Nu   •*r<   z
     ,c              3  "   K   | ]
}d | dV  dS )z
    <fg=blue>rL   Nr   )r   links     r'   	<genexpr>z2ExceptionTrace._render_solution.<locals>.<genexpr>C  s.      #R#RD$?d$?$?$?#R#R#R#R#R#Rr)   z<fg=blue;options=bold>z </><fg=default;options=bold>.z</>: T)r   get_solutions_for_exceptionr   solution_titlesolution_descriptiondocumentation_linksr>   stripjoinr   rT   )
r&   rN   r   	solutionssymbolsolutiontitledescriptionlinksjoined_linkss
             r'   r   zExceptionTrace._render_solution1  s"   -5F6RR
 
	 r!! 	F! 	 	H+E"7K0E%--dH==CCCHHK88#R#RE#R#R#RRRL0 0 0,1LL,=,=0 00!-0 0    	 	r)   r   r   c                   t                      }|D ]M}| j        r/t          j        | j        |j                  r |j                    s8|                    |           Nt          |          dz
  } |j                    r|r| 	                    |dd           t          t          |                    }|                                }|}|D ]}	|	                                rst          |	          dk    rdt          |	           d}
nd}
| 	                    |ddd	| d
|
 d|	j        dz    dd           |t          |	          |	j        dz   z  z  }|	D ]}|                     |j                  }|                    t           j        j                  }dt'          j        t           j                   d                    |d d         d|d          dgz             }| 	                    |d|d	| d| d|j         d|j         d	d            |j                    r|ddf| j        vrHt3           |j                                                  |j        |j                  }|| j        |ddf<   | j        |ddf         }|D ]"}| 	                    |dd	| | d           #nt3           |j                              }	 |                    |j                                                  d         }n.# t@          j!        $ r |j                                        }Y nw xY w| 	                    |dd	| d|            |dz  }d S d S d S )Nr3   z<fg=yellow>Stack trace</>:Tr   z
</> framesr   r   z...r   z</>  Previous z repeated <fg=blue>z	</> timesz<fg=default;options=dark>rL   rM   z<fg=default;options=bold>z</>  z <fg=default;options=dark>:</><b>r   r*   r   r   rv   r   r   z    )"r   r   rematchr   is_debugrS   rw   is_very_verboser   r,   compactis_repeatedrepetitionsr   rb   ospathsepr   rE   r   rn   r   r   r   r   r:   r   r4   r-   r   rP   
TokenError)r&   rN   r   stack_framesr   remaining_frames_lengthmax_frame_lengthframe_collectionsr   
collectionframes_messagerelative_file_pathrelative_file_path_partsr   r   highlighters                   r'   r   zExceptionTrace._render_traceL  s   &(( 	' 	'EHT\5>:: $
 &&&&"%l"3"3a"72 J	$; J	b">EEE"3'>#?#?@@ , 4 4 6 6'A/ E E
))++ H:**)Rs:)R)R)R)0%%JE J,< JD J J$2J J$.$:Q$>J J J    ZJ,BQ,FGGA' 4 4E)-)E)Een)U)U&/A/G/G/T/T,QI4DRV4L4LQQQVV4SbS9!E#;B#?!E !E !E  ' %%Qa Q*: QB Q Q-Q Q#lQ Q=B^Q Q Q    #r{}} !1a=0III)4.>b.>.@.@* * **l % 2 %  ' HRD5uamD%)%>q!}%M
)3  I -- "#& G)9 G G GI G G'( .     '2@P@P@R@R&S&S&S;(3(E(E %
 0 0 2 2) ))!II  (2 ; ; ;(-
(8(8(:(:III; ))3 K)9 K K K K	 K K   FAAi4-J	 J	 J	 J	
E Es   2L(L.-L.r*   r-   new_liner   r.   c                X    |r |j         d            |j         |dz   |            d S )NrA   r   )r   )r&   rN   r-   r   r   s        r'   r   zExceptionTrace._render_line  sE      	BM"#-t--.....r)   filepathc                6   t          j                    }|r(|                    |t           j        j        z   d          }t           j                            d          }|r:|                    |t           j        j        z   dt           j        j        z             }|S )NrA   ~)r   getcwdr>   r   r   
expanduser)r&   r   cwdhomes       r'   r   z&ExceptionTrace._get_relative_file_path  s}    ikk 	?''bgk(92>>Hw!!#&& 	O''rw{(:C"'+<MNNHr)   r    )r   r   r   r   r   r   )r   r,   r   r   )F)rN   r   r   r   r   r   )rN   r   r   r   r   r   )rN   r   r   r   r   r   )rN   r   r   r   r   r   )rN   r   r   r   r   r   )Fr*   )
rN   r   r-   r,   r   r   r   r.   r   r   )r   r,   r   r,   )r   r   r   __doc__THEMEr   r   r   AST_ELEMENTSr   __annotations__r(   r   r   r   r   r   r   r   r   r   r)   r'   r   r      sc         
 - !	 E CMM
 
s3xx
 
 
	 	L EGFFFF
 KO( ( ( ( (   
	3 	3 	3 	3 	30 0 0 087 7 7 7   6W W W Wt QR/ / / / /
 
 
 
 
 
r)   r   )
__future__r   r   r   r   rN   r   r   r   r   rP   typingr   crashtest.frame_collectionr   cleo.formatters.formatterr   crashtest.framer   9crashtest.solution_providers.solution_provider_repositoryr   
cleo.io.ior	   cleo.io.outputs.outputr
   r   r   r   r)   r'   <module>r     sk   " " " " " " 



   				  				 				 



              6 6 6 6 6 6 / / / / / /  .%%%%%%      ------r r r r r r r rjd d d d d d d d d dr)   