o
    Zh                     @   s  U 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mZ dZdZd	Zd
ZdZdZdZdZdZeedf ed< ee7 ZdZdZG dd dZG dd deZG dd deZG dd deZG dd deZdd Z G d d! d!eZ!G d"d# d#eZ"G d$d% d%e	Z#dS )&    N)contextmanager)Tuple)ErrorFinderErrorFinderConfig)Rule)FlowScope)import_nameimport_from)classdeffuncdefZif_stmtZ
while_stmtZfor_stmttry_stmtZ	with_stmt)termr
   power)([{))]})+-~)*r   r   **/z//@)z<<z>>|&^)=%z-><>==z>=z<=z<>!=z+=z-=z*=z@=z/=z%=z&=z|=z^=z<<=z>>=z**=z//=._NEEDS_SPACE)dictorsetmakerargument)Z	subscriptZsubscriptlistZsliceopc                   @   s*   e Zd Ze Ze Ze Ze Ze ZdS )IndentationTypesN)	__name__
__module____qualname__objectVERTICAL_BRACKETHANGING_BRACKET	BACKSLASHSUITEIMPLICIT r3   r3   H/var/www/html/lang_env/lib/python3.10/site-packages/parso/python/pep8.pyr)      s    
r)   c                   @   s,   e Zd ZejZdddZdd Zdd ZdS )	IndentationNodeNc                 C   s   | | _ | _|| _d S N)bracket_indentationindentationparent)selfconfigr8   r9   r3   r3   r4   __init__(   s   
zIndentationNode.__init__c                 C   s   d| j j S )Nz<%s>)	__class__r*   )r:   r3   r3   r4   __repr__,   s   zIndentationNode.__repr__c                 C   s2   | }|d ur|j tjkr|S |j}|d usd S d S r6   )typer)   r1   r9   )r:   nr3   r3   r4   get_latest_suite_node/   s   z%IndentationNode.get_latest_suite_noder6   )	r*   r+   r,   r)   r1   r?   r<   r>   rA   r3   r3   r3   r4   r5   %   s
    
r5   c                   @   s   e Zd ZdddZdS )BracketNodeFc           
      C   s  || _ |}|}|jtjkr|j}	 t|dr|j|j jkrn| }t|t	r,||j kr-n|j}q|j
}| }d|jv sBd|jv rS||j | _||j
 | _
tj| _n|jd }	d|j
v rad | _
nd|	 | _
| j
| _tj| _|r|jtjkr| j
||j
 kr|  j
|j
7  _
| j
| _|| _d S )NTleaf
   	 )rC   r?   r)   r2   r9   hasattrlineget_previous_leaf
isinstancerB   r8   get_next_leafprefix#closing_bracket_hanging_indentationr7   r/   end_posr.   r1   )
r:   r;   rC   r9   in_suite_introducerZprevious_leafr@   parent_indentation	next_leafZexpected_end_indentr3   r3   r4   r<   9   s@   




zBracketNode.__init__NF)r*   r+   r,   r<   r3   r3   r3   r4   rB   8   s    rB   c                       s    e Zd ZdZ fddZ  ZS )ImplicitNodezk
    Implicit indentation after keyword arguments, default arguments,
    annotations and dict values.
    c                    sZ   t  ||| tj| _| }|dkr'd|jvr)d|jvr+|  jd7  _d S d S d S d S )N:rD   rE   rH   )superr<   r)   r2   r?   rM   rN   r8   )r:   r;   rC   r9   rS   r=   r3   r4   r<   r   s   zImplicitNode.__init__)r*   r+   r,   __doc__r<   __classcell__r3   r3   rX   r4   rU   m   s    rU   c                   @   s   e Zd ZejZdddZdS )BackslashNodeNc                 C   s|   | d}|d ur/|jd }d|jv rd | _n|j|jkr$||j | _nd|jd d  | _n||j | _| j| _|| _d S )N	expr_stmtrG   rH   rF   )search_ancestorchildrenr8   rP   	start_posr7   r9   )r:   r;   rR   Zcontaining_leafspacingr9   r\   equalsr3   r3   r4   r<   ~   s   



zBackslashNode.__init__r6   )r*   r+   r,   r)   r0   r?   r<   r3   r3   r3   r4   r[   {   s    r[   c                 C   s   | j do| j dS )N__)value
startswithendswith)namer3   r3   r4   _is_magic_name   s   rh   c                       s   e Zd Z fddZe fddZedd Zdd Zd	d
 ZdddZ	 fddZ
dd Zdd Zdd Zdd Z fddZ  ZS )PEP8Normalizerc                    s   t  j|i | d | _d | _d| _d| _d | _d| _d| _d| _	t
| jdd | _| _d| _d| jjv r=d| _d| _d S d	| _d| _d S )
NTr   F )r8   rH   spacesrG   tabs)rW   r<   _previous_part_previous_leaf_on_newline_newline_count_wanted_newline_count_max_new_lines_in_prefix_new_statement_implicit_indentation_possibler5   _config_indentation_tos_last_indentation_tos_in_suite_introducerr8   _indentation_type_wrong_indentation_char)r:   argskwargsrX   r3   r4   r<      s"   


zPEP8Normalizer.__init__c              	   #   st    t  |) | | d V  W d    n1 sw   Y  W d    d S W d    d S 1 s3w   Y  d S r6   )rW   
visit_node_visit_node)r:   noderX   r3   r4   r}      s   "zPEP8Normalizer.visit_nodec                 c   sl   |j }|dv r#| }t|dkr"|d d D ]	}| |dd qn|dkrF|j}|j dkrEtdd |jd d	d
 D rE| |dd n|dkrb|jD ]}|j dkr`|jdkr`| |dd qMng|dkr|jD ]2}|j dvrqqit|jd
kryqi|jd }|jd }|j dkr|j dkr|jdkr| |dd  nqin,|dkr|jd }	|	 }
|	j	}|
ds|
ds|s|
d u s|
jdvr| |	dd  |tv r5|j}|j}|j dkr5|j|}|jd | D ]M}|g}|j d!kr|jd d }d"}|D ]6}|j d#kr|sqd$}|j dkrtd%d | D rq|j tv s)t|tr*q| |d&d'  nq |tv }|tv }|rDd$| _n)|d(krg| jj tjkrV| jj| _t| j| jj| jj | jd)| _n|rmd$| _d V  |d(kr| jj tjksJ | jj| _d | _d S |rd"| _| jj tjkr| jj| _d S d S |rd"| _|d*v r|  | _d S d S d S )+Nr	   rF   i  zMultiple imports on one linelambdefr\   c                 s   s    | ]}|j d kV  qdS )rg   N)r?   .0r@   r3   r3   r4   	<genexpr>   s    z-PEP8Normalizer._visit_node.<locals>.<genexpr>r]      i  z,Do not assign a lambda expression, use a defr   keywordexcepti  z1Do not use bare except, specify exception instead
comparison)Z	atom_exprr   r   trailerrg   r?   i  z'Do not compare types, use 'isinstance()Z
file_inputrD   rE      rD   rE   z
i$  zNo newline at end of filesimple_stmtFstringTc                 s   s    | ]}t |V  qd S r6   )rh   r   r3   r3   r4   r      s    i  z&Module level import not at top of filesuiter9   )r   r   )r?   Zget_defined_nameslen	add_issuer9   anyr_   rd   rK   rN   rf   _IMPORT_TYPESindexallrL   r   _IMPLICIT_INDENTATION_TYPES_SUITE_INTRODUCERSrx   rv   r)   r0   r5   ru   r8   rt   r1   rq   r2   _get_wanted_blank_lines_count)r:   r   typnamesrg   r\   childr   Zatom	endmarkerprevrN   r   moduler   r_   Zfound_docstringcZimplicit_indentation_possibleZin_introducerr3   r3   r4   r~      s   















zPEP8Normalizer._visit_nodec                 C   s(   | j |jv r| |dd| j  dS dS )Ne   zIndentation contains TF)rz   rd   r   ry   )r:   ra   r3   r3   r4   _check_tabs_spaces  s   z!PEP8Normalizer._check_tabs_spacesc                 C   s   | j  }t|jd u d S )NrF   )rv   rA   intr9   )r:   Z
suite_noder3   r3   r4   r   !  s   
z,PEP8Normalizer._get_wanted_blank_lines_countFc                 C   s\  t | j| j| _| j}|d ur;| jd }||kr8|jdkr8|s7|dkr%dnd}d||f }| ||| d | _nd | _|s|  }| jd }|j}	|	dkrS|jjdkpp|	d	kpi|	d
ko`|	 dkpi|	dkoi| j
d
kop|jjjdk}
|
r||k r|j}|j}|jdkr|j}|jt|jdk |kr|dkrdnd}d||f }| ||| d| _d| _d S )NrF   r   r   i.  i-  z expected %s blank line, found %sr   	decoratorclassasyncdef	decoratedr   r   )maxrr   rp   rq   r?   r   r   rd   r9   rM   rn   r_   r   )r:   ra   rC   
is_commentwantedblank_linescodemessageactualvalZneeds_linesZfunc_or_clsr   r3   r3   r4   _reset_newlines%  sP   



zPEP8Normalizer._reset_newlinesc                    s   t  | | D ]}|jdkr n
| || | q
| | | ||| | j| _|jdk| _	|jdkrD| jjt
jkrD| jj| _|jdkrS|jjtv rSd| _n|jdkr[d| _| j	sg| || d| _|| _|jS )Nra   newlinerV   FelifTr   )rW   
visit_leafZ_split_prefixr?   _visit_partZcreate_spacing_part_analyse_non_prefixrv   rw   rs   r)   r0   r9   rd   r   rx   r   Z_max_blank_linesrn   )r:   rC   partrX   r3   r4   r   X  s*   




zPEP8Normalizer.visit_leafc                 C   s  |j }|j}|dkrd S |dkr|jjdkr| jj| _| j}|dkri|dr4|dr3| |dd n,| jrSt	d	|sR|dksR|d
rK|j
dksR| |dd nt	d|s`| |dd | j||dd n/|dkr| j|  kr| |dd| j  n|dv r|jjjdkr| |dd |  jd7  _|dkr|jtjkr|jtjkr| |dd nN|j}| jr|jtjkr|| jj7 }t| j|||| jd| _n.| jr|j }|jtjkr| jjdkr| jj| _| |s|j}|dkr| j}		 t|t|	jkrn|	j}|	| _|	|krn|	j}	q| jrD|dkr*|r)| |dd  n||krCd!t| jj| jf }
| |d"d#|
  n|d$v rM|j}n|j}| jrh|| j| jj krh| |d%d& n||kr| |s|j d'vr|d$v r|jtjkr| |d(d) nr| |d*d+ njt|t|k r|jtjkr| |d,d- nR|jtjkr| |d.d/ nC|jtjkr| |d0d1 n4| |d2d3 n,|jtjkr| |d4d5 n|jtjkr| |d6d1 n| |d7d8 n| || |  || |r:|d9v r:|dkr:|jjd:kr:|t!v r+t"| j|| j| jd;| _n,|jtjks4J | jj| _n|d<v rW| j#rW|jjt$v rW|j}t%| j|| jd| _|d=v | _|| _|| _&d S )>N
error_leaf,r'   commentz###i
  z'Too many leading '#' for block comment.z#:? z#!)rF   r   i	  z$Block comment should start with '# 'z#:? [^ ]i  z%Inline comment should start with '# 'T)r   r   i/  zToo many blank lines (%s))r   r   r   i0  z*Blank lines found after function decoratorrF   	backslashi  z+The backslash is redundant between bracketsr   #  Trailing whitespacez%s %so   z!Indentation is not a multiple of z])}   z+Line with same indent as next logical blockr   |   z1Closing bracket does not match visual indentation{   zCLosing bracket does not match indentation of opening bracket's line   z2Continuation line under-indented for visual indentz   z2Continuation line missing indentation or outdented   Zxxxy   z3Continuation line under-indented for hanging indent   z1Continuation line over-indented for visual indent   ~   z2Continuation line over-indented for hanging indentz()[]{}
error_node)r9   rQ   )r    rV   )r   r   bom)'rd   r?   r9   rv   re   lstripr   ro   rematchr`   r   rp   r   r)   r0   r1   r8   rx   ru   r[   rm   r   rw   r   rs   ry   r7   rA   r.   r2   _check_spacing_check_line_length_OPENING_BRACKETSrB   rt   r   rU   _previous_spacing)r:   r   ra   rC   rd   type_r   r8   Zshould_be_indentationr@   sr3   r3   r4   r   z  s.  

















zPEP8Normalizer._visit_partc                 C   s   |j dkr|jd d }n|jd }|| jjkrW|jd | jjkrYd}|j dkrF|jdd   }t|dkrF|jd t|d  dk rFd}|r[| |dd	|| jjf  d S d S d S d S )
Nr   rF   Tr   r   H   Fi  z"Line too long (%s > %s characters))	r?   r`   rP   ru   max_charactersrd   splitr   r   )r:   r   ra   last_columnreportZsplittedr3   r3   r4   r   '  s,   



	z!PEP8Normalizer._check_line_lengthc                    s   fdd} fdd}|j  j}|d ur|jdks"|jdkr$d S |j}dv r4 |dd d S |d	krKt jjk rI |d
d d S d S |dkrW||dd d S tdkrf |dd d S |tv rwd|j  }||d| d S |tv rd|j  }||d| d S |dv s|dkr|j	jt
vrd|j  }||d| d S |dkr|j	jt
v rd S |dv r||dd d S |dkrd S |dv r|j	jtvs|dv r|j	jtvrd S |tv r|j	jdkrd S |dkr|j	jdkrd S |tv s|tv rd|d kr|j	jd!v s|d kr6|j	jd!v r6|d kr|j	}n|j	}|jd"kr.|jr.||d#d$ d S ||d%d& d S |tv s@|tv rH||d'd( d S |d)ksR|d)krZ||d*d+ d S d,}	||d-|	 d S |d.kso|jd.krw||d/d0 d S  j}
|tv r|
j krd1 jjvrd2 jjvrd3} |d4| r|tvr|tvrd,}	|tv rd|j  }||d5| d S d S d S d S d S )6Nc                     s   r j |  S d S r6   r   r{   r:   rk   r3   r4   add_if_spaces?     
z4PEP8Normalizer._check_spacing.<locals>.add_if_spacesc                     s   s j |  S d S r6   r   r   r   r3   r4   add_not_spacesC  r   z5PEP8Normalizer._check_spacing.<locals>.add_not_spacesr   rG      zUsed tab to separate tokensr   i  z)At least two spaces before inline commentr   r   r   rF      zMultiple spaces usedzWhitespace after '%s'   zWhitespace before '%s'   )r   ;rV      )r   r   rV      zmissing whitespace after '%s')r   r   factorr   r   r    )r(   paramr      z(Expected spaces around annotation equals   z3Unexpected spaces around keyword / parameter equals   z3Missing whitespace around bitwise or shift operatorr!      z)Missing whitespace around modulo operatorz!Missing whitespace between tokens   r   i  z!Missing whitespace around keywordrD   rE   z>Whitespace before operator doesn't match with whitespace after      )rd   rm   r?   r   r   ru   spaces_before_commentr   _CLOSING_BRACKETSr9   _POSSIBLE_SLICE_PARENTS_NON_STAR_TYPES_FACTORr&   
annotation_BITWISE_OPERATORr   _ALLOW_SPACErn   rN   )r:   r   ra   r   r   r   r   r   r   Zmessage_225Zprev_spacingr3   r   r4   r   >  s   





zPEP8Normalizer._check_spacingc                 C   s  |j }|dkrM|jdv rM| rKd}|jj dkr)|jj|kr)| |d|d  d S |jj dkr@|jj|kr@| |d|d  d S | d	|d
 | d S d S |jdkrt|jtt	fr|jj dkr|
 }|j dkr|jj dkrx| |dd d S | |dd d S d S d S d S |jdkr|
 j dv r| |dd d S | |dd d S |jdv r|j}|j|}|j|d  }|j|d  }||fD ].}	|	j dks|	j dkr|	jdkrd}| |d|  d S |	jdv rd }| |d!|  d S qd S |jd"v r(|j}|j d#kr$|jj d$kr&|jd%kr| |d&d' d S | |d(d) d S d S d S |d*krTt|j dd  D ]\}
}td+|d,}|j|
 t|f}| q8d S |d-krh| jd.krj| |d/d0 d S d S d S )1Nrg   )lOIz0Do not define %s named 'l', 'O', or 'I' one liner   i  classesfunctioni  i  	variablesrV   r   r   r   i  z%Multiple statements on one line (def)i  z'Multiple statements on one line (colon)r   )r   r   i  zStatement ends with a semicoloni  z+Multiple statements on one line (semicolon))r$   r%   rF   r   Nonez/comparison to None should be 'if cond is None:'i  )TrueFalsezCcomparison to False/True should be 'if cond is True:' or 'if cond:'i  )inisr   Znot_testr   i  z&test for membership should be 'not in'i  z+test for object identity should be 'is not'r   z[ \t]*r   r   r   i  Blank line at end of file)r?   rd   Zis_definitionr9   rg   r   Zadd_issuadd_issuerL   r   r   rM   r_   r   	enumerate
splitlinesr   r   grouprJ   r   rp   )r:   rC   r   r   rS   r   r   leftrightr   irJ   r8   r`   r3   r3   r4   r     st   







z"PEP8Normalizer._analyse_non_prefixc                    st   | j d ur| j dd urd S | j jdkrd S |dd ur d S |dv r.t ||| d S tt| ||| d S )Nr   r   )i  i  )rn   r^   r?   rW   r   r   )r:   r   r   r   rX   r3   r4   r     s   
zPEP8Normalizer.add_issuerT   )r*   r+   r,   r<   r   r}   r~   r   r   r   r   r   r   r   r   r   rZ   r3   r3   rX   r4   ri      s     
e
3" ._:ri   c                   @   s    e Zd ZeZ	 		dddZdS )PEP8NormalizerConfig    NO   r   c                 C   s4   || _ |d u r	|}|| _d| _d| _|| _|| _d S )Nrj   F)r8   hanging_indentationrO   Zbreak_after_binaryr   r   )r:   r8   r  r   r   r3   r3   r4   r<     s   
zPEP8NormalizerConfig.__init__)r	  Nr
  r   )r*   r+   r,   ri   Znormalizer_classr<   r3   r3   r3   r4   r    s    r  c                   @   s   e Zd ZdZdZdd ZdS )BlankLineAtEndi  r  c                 C   s
   | j dkS )Nr   )rp   )r:   rC   r3   r3   r4   is_issue  s   
zBlankLineAtEnd.is_issueN)r*   r+   r,   r   r   r  r3   r3   r3   r4   r    s    r  )$r   
contextlibr   typingr   Zparso.python.errorsr   r   Zparso.normalizerr   Zparso.python.treer   r   r   r   r   r   r   r   r   r   r&   str__annotations__r   r   r)   r-   r5   rB   rU   r[   rh   ri   r  r  r3   r3   r3   r4   <module>   s>   
 5    S