
    e                       d dl mZ d dlZd dlmZmZmZmZ d dlm	Z	 d dl
mZmZmZmZ d dlmZmZ erd dlmZ 	 	 	 	 	 	 	 	 ddZ G d	 d
e	      Zej,                  ej.                  ej0                  ej2                  fZ	 	 	 	 	 	 ddZddZy)    )annotationsN)TYPE_CHECKINGAnyLiteralcast)BaseTokenChecker)	ParagraphSectionTableText)LinterStatsdiff_string)PyLinterc           	        |j                   d   }| j                  dt        t        | d      g             g d}dD ]  }t	        t
        d   |      }|j                   |   }|rt        |dz        |z  nd}|r|j                   |   nd}|rt        ||      nd}	||t        |      ||dnd	|rt        |      nd	|	r|	nd	gz  } | j                  t        |d
d             y)z5Calculate percentage of code / doc / comment / empty.totalr   z lines have been analyzed
)typenumber%previous
difference)code	docstringcommentemptyd   Nz.2fNC      )childrencolsrheaders)code_type_countinsertr	   r   r   r   floatr   strappendr   )
sectstats	old_statstotal_lineslines	node_typer   percentolddiff_strs
             =/usr/lib/python3/dist-packages/pylint/checkers/raw_metrics.pyreport_raw_statsr1      s     ''0KKK9dk]2M#NOPQR=E> 
	!HI9U	%%i06A%${2t6?i''	2T.1;sE*tJ ' 3wsmCH Hd
 	

 	KKu1q9:    c                  D    e Zd ZU dZdZdZi Zded<   ddeffZ	ddZ
dd	Zy
)RawMetricsCheckerzChecker that provides raw metrics instead of checking anything.

    Provides:
    * total number of lines
    * total number of code lines
    * total number of docstring lines
    * total number of comments lines
    * total number of empty lines
    metrics r   msgsRP0701zRaw metricsc                L    | j                   j                  j                          y)zInit statistics.N)linterr(   reset_code_count)selfs    r0   openzRawMetricsChecker.open?   s    **,r2   c                &   d}t        |      }|t        |      k  rvt        ||      \  }}}| j                  j                  j
                  dxx   |z  cc<   | j                  j                  j
                  |xx   |z  cc<   |t        |      k  ruyy)zUpdate stats.r   r   N)listlenget_typer:   r(   r"   )r<   tokensilines_number	line_types        r0   process_tokensz RawMetricsChecker.process_tokensC   s{    f#f+o)1&!)<&A|YKK--g6,F6KK--i8LH8 #f+or2   N)returnNone)rB   list[tokenize.TokenInfo]rG   rH   )__name__
__module____qualname____doc__nameoptionsr7   __annotations__r1   reportsr=   rF   r6   r2   r0   r4   r4   +   s7     DGD#N-)9:<G-Ir2   r4   c                   |}| |   d   }|}d}|t        |       k  r| |   d   d   |d   k(  rn| |   d   }| |   d   }|7|t        j                  k(  rd}n!|t        j                  k(  rd}n|t        v rnd}|dz  }|t        |       k  r| |   d   d   |d   k(  rn|d	}n,|t        |       k  r| |   d   t        j
                  k(  r|dz  }||d   |d   z
  dz   |fS )
z7Return the line type : docstring, comment, code, empty.   Nr      r   r   r   r   r   )r@   tokenizeSTRINGCOMMENTJUNKNEWLINE)rB   start_indexrC   startposrE   tok_types          r0   rA   rA   P   s    	A1IaLE
CI
c&k/fQil1oq9!9Q<Qil8??*'	X---%	T!"		Q c&k/fQil1oq9 		
S[VAYq\X-=-==	Qc!fuQx!#Y..r2   c                8    | j                  t        |              y )N)register_checkerr4   )r:   s    r0   registerr`   m   s    
-f56r2   )r'   r
   r(   r   r)   zLinterStats | NonerG   rH   )rB   rI   rZ   intrG   zAtuple[int, int, Literal['code', 'docstring', 'comment', 'empty']])r:   r   rG   rH   )
__future__r   rU   typingr   r   r   r   pylint.checkersr   pylint.reporters.ureports.nodesr	   r
   r   r   pylint.utilsr   r   pylint.lintr   r1   r4   NLINDENTrY   	ENDMARKERrX   rA   r`   r6   r2   r0   <module>rk      s   
 #  4 4 , K K 1$;
;; "; 
	;2I( ID 	X__h&6&68J8JK/$/36/F/:7r2   