o
    b                     @   s   d Z ddlZddlmZ ddlmZ ddlmZ ddlm	Z	 ddl
mZ ddlmZ d	d
 ZG dd de	ZejejejejfZdd Zdd ZdS )z Copyright (c) 2003-2010 LOGILAB S.A. (Paris, FRANCE).
 http://www.logilab.fr/ -- mailto:contact@logilab.fr

Raw metrics checker
    N)Any)ITokenChecker)EmptyReportError)BaseTokenChecker)diff_string)Tablec                 C   s   |d }|s	t  d| | _d}dD ]5}|d }|| }t|d | }||d}	|	dur4t|	|}
nd\}	}
||t|d	| t|	|
f7 }q| t|d
dd dS )z9calculate percentage of code / doc / comment / empty
    total_linesz%s lines have been analyzed)typenumber%previous
difference)code	docstringcommentempty_linesd   N)NCr   z%.2f      )childrencolsZrheaders)r   descriptionfloatgetr   strappendr   )sectstatsZ	old_statsr   linesZ	node_typekeytotalpercentoldZdiff_str r%   Z/var/www/secure340b-portal/env/lib/python3.10/site-packages/pylint/checkers/raw_metrics.pyreport_raw_stats   s   
 r'   c                   @   sF   e Zd ZdZefZdZdZi Zdde	ffZ
dd Zdd	 Zd
d ZdS )RawMetricsCheckerzdoes not check anything but gives some raw metrics :
    * total number of lines
    * total number of code lines
    * total number of docstring lines
    * total number of comments lines
    * total number of empty lines
    Zmetricsr%   ZRP0701zRaw metricsc                 C   s   t | | d | _d S )N)r   __init__r   )selflinterr%   r%   r&   r)   E   s   
zRawMetricsChecker.__init__c                 C   s   | j jdddddd| _dS )zinit statisticsr   )r   
code_linesempty_linesdocstring_linescomment_linesN)r+   Z	add_statsr   )r*   r%   r%   r&   openI   s   zRawMetricsChecker.openc                 C   s`   d}t |}|t|k r.t||\}}}| jd  |7  < | j|  |7  < |t|k sdS dS )zupdate statsr   r   N)listlenget_typer   )r*   tokensiZlines_number	line_typer%   r%   r&   process_tokensS   s   z RawMetricsChecker.process_tokensN)__name__
__module____qualname____doc__r   Z__implements__nameoptionsZmsgsr'   Zreportsr)   r0   r7   r%   r%   r%   r&   r(   1   s    
r(   c                 C   s  |}| | d }| | d }|}d}|t | k ra| | d d |d kra| | d }| | d }|du rK|tjkr<d}n|tjkrDd}n|tv rInd}|d7 }|t | k ra| | d d |d ks$|du rhd	}n|t | k r{| | d tjkr{|d7 }||d |d  d |fS )
z6return the line type : docstring, comment, code, emptyr      N   r.   r/   r,   r   r-   )r2   tokenizeSTRINGCOMMENTJUNKNEWLINE)r4   start_indexr5   tok_typestartposr6   r%   r%   r&   r3   `   s.   $

$r3   c                 C   s   |  t|  dS )z/ required method to auto register this checker N)Zregister_checkerr(   )r+   r%   r%   r&   register{   s   rI   )r;   r@   typingr   Zpylint.interfacesr   Zpylint.exceptionsr   Zpylint.checkersr   Zpylint.reportersr   Zpylint.reporters.ureports.nodesr   r'   r(   NLINDENTrD   	ENDMARKERrC   r3   rI   r%   r%   r%   r&   <module>   s   ,