
    c<                       d dl mZ d dlZd dlZd dl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j        dk    rd dlmZ nd dlmZ erd d	lmZ ddZ G d de	          Zej        ej        ej        ej        fZddZd dZdS )!    )annotationsN)TYPE_CHECKINGAnycast)BaseTokenChecker)	ParagraphSectionTableText)LinterStatsdiff_string)      )Literal)PyLintersectr	   statsr   	old_statsLinterStats | NonereturnNonec           	        |j         d         }|                     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  }| 	                    t          |d
d                     dS )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
   )
r   r   r   total_lineslines	node_typer   percentolddiff_strs
             ;lib/python3.11/site-packages/pylint/checkers/raw_metrics.pyreport_raw_statsr6      sD    '0KKK9dk#N#N#NOOPQQRRR===E> 
 
	!HI9UU	%i06AK%$${22t6?Ii'	22T.1;;sE***tJJ '=w%CHHH *HHd
 	
 	KKu1q999:::::    c                  F    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dS )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 metricsr   r   c                B    | j         j                                         dS )zInit statistics.N)linterr   reset_code_count)selfs    r5   openzRawMetricsChecker.openE   s    **,,,,,r7   tokenslist[tokenize.TokenInfo]c                   d}t          |          }|t          |          k     rgt          ||          \  }}}| j        j        j        dxx         |z  cc<   | j        j        j        |xx         |z  cc<   |t          |          k     edS dS )zUpdate stats.r   r   N)listlenget_typer?   r   r*   )rA   rC   ilines_number	line_types        r5   process_tokensz RawMetricsChecker.process_tokensI   s    f#f++o 	I)1&!)<)<&A|YK-g666,F666K-i888LH888 #f++o 	I 	I 	I 	I 	Ir7   N)r   r   )rC   rD   r   r   )__name__
__module____qualname____doc__nameoptionsr<   __annotations__r6   reportsrB   rL   r;   r7   r5   r9   r9   1   sw           DGDNNNN-)9:<G- - - -I I I I I Ir7   r9   rC   rD   start_indexintAtuple[int, int, Literal['code', 'docstring', 'comment', 'empty']]c                8   |}| |         d         }|}d}|t          |           k     r| |         d         d         |d         k    r| |         d         }| |         d         }|2|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    |d	}n4|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"   )rG   tokenizeSTRINGCOMMENTJUNKNEWLINE)rC   rU   rI   startposrK   tok_types          r5   rH   rH   V   sM    	A1IaLE
CI
c&kk/ fQil1oq9 !9Q<Qil 	#8?* #'		X-- #%		T! #"		Q c&kk/ fQil1oq9   			
S[[ VAYq\X-== 	Qc!fuQx!#Y..r7   r?   r   c                J    |                      t          |                      d S )N)register_checkerr9   )r?   s    r5   registerrd   s   s%    
-f5566666r7   )r   r	   r   r   r   r   r   r   )rC   rD   rU   rV   r   rW   )r?   r   r   r   ) 
__future__r   sysrZ   typingr   r   r   pylint.checkersr   pylint.reporters.ureports.nodesr   r	   r
   r   pylint.utilsr   r   version_infor   typing_extensionspylint.lintr   r6   r9   NLINDENTr^   	ENDMARKERr]   rH   rd   r;   r7   r5   <module>rq      s|  
 # " " " " " 



  + + + + + + + + + + , , , , , , K K K K K K K K K K K K 1 1 1 1 1 1 1 1v *)))))) %$$$$$$; ; ; ;2I I I I I( I I ID 	X_h&68JK/ / / /:7 7 7 7 7 7r7   