B
    A!p\                 @   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}xrdD ]j}|d }|| }t|d | }||d}	|	dk	rjt|	|}
nd\}	}
||t|d	| t|	|
f7 }q&W | t|d
dd dS )z9calculate percentage of code / doc / comment / empty
    total_linesz%s lines have been analyzed)typeZnumber%Zprevious
difference)codeZ	docstringcommentemptyZ_linesd   N)NCr   z%.2f      )ZchildrenZcolsZrheaders)r   Zdescriptionfloatgetr   strappendr   )ZsectstatsZ	old_statsr   linesZ	node_typekeyZtotalZpercentoldZdiff_str r   :lib/python3.7/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   sV   d}t |}xD|t|k rPt||\}}}| jd  |7  < | j|  |7  < qW 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__nameZoptionsZmsgsr   Zreportsr   r&   r-   r   r   r   r   r   1   s   
r   c             C   s   |}| | d }| | d }|}d}x~|t | k r| | d d |d kr| | d }| | d }|dkr|tjkrzd}n|tjkrd}n|tkrnd}|d7 }q&W |dkrd	}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#   )r(   tokenizeSTRINGCOMMENTJUNKNEWLINE)r*   Zstart_indexr+   tok_typestartposr,   r   r   r   r)   `   s,    &

r)   c             C   s   |  t|  dS )z/ required method to auto register this checker N)Zregister_checkerr   )r!   r   r   r   register{   s    r=   )r1   r5   typingr   Zpylint.interfacesr   Zpylint.exceptionsr   Zpylint.checkersr   Zpylint.reportersr   Zpylint.reporters.ureports.nodesr   r   r   NLINDENTr9   	ENDMARKERr8   r)   r=   r   r   r   r   <module>   s   ,