
    e0                        d dl mZ d dlmZmZmZ d dlmZ  G d de      Z G d de      Z	 G d d	e      Z
 G d
 de      Z G d de      Z G d de      Z G d d      ZddZy)    )annotations)Literal	TypedDictcast)MessageTypesFullNamec                      e Zd ZU dZded<   ded<   ded<   ded<   ded<   ded<   ded	<   ded
<   ded<   ded<   ded<   ded<   ded<   y)BadNamesz7TypedDict to store counts of node types with bad names.intargumentattrklassclass_attributeclass_constconst	inlinevarfunctionmethodmodulevariabletypevar	typealiasN__name__
__module____qualname____doc____annotations__     :/usr/lib/python3/dist-packages/pylint/utils/linterstats.pyr	   r	      sH    AM
IJJNMKKMLNr   r	   c                  D    e Zd ZU dZded<   ded<   ded<   ded<   ded<   y)	CodeTypeCountz1TypedDict to store counts of lines of code types.r
   codecomment	docstringemptytotalNr   r   r   r    r"   r"      s    ;
ILNJJr   r"   c                  &    e Zd ZU dZded<   ded<   y)DuplicatedLinesz6TypedDict to store counts of lines of duplicated code.r
   nb_duplicated_linesfloatpercent_duplicated_linesNr   r   r   r    r)   r)   (   s    @##r   r)   c                  :    e Zd ZU dZded<   ded<   ded<   ded<   y)	NodeCountz6TypedDict to store counts of different types of nodes.r
   r   r   r   r   Nr   r   r   r    r.   r.   /   s    @MJKKr   r.   c                  :    e Zd ZU dZded<   ded<   ded<   ded<   y)UndocumentedNodesz5TypedDict to store counts of undocumented node types.r
   r   r   r   r   Nr   r   r   r    r0   r0   8   s    ?MJKKr   r0   c                  X    e Zd ZU dZded<   ded<   ded<   ded<   ded<   ded<   ded	<   y
)ModuleStatsz>TypedDict to store counts of types of messages and statements.r
   
conventionerrorfatalinforefactor	statementwarningNr   r   r   r    r2   r2   A   s(    HOJJ
IMNLr   r2   c                     e Zd ZdZ	 	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZddZddZddZ	 	 	 	 ddZddZ	dd	Z
	 	 	 	 dd
ZddZddZ	 	 	 	 ddZddZ	 	 	 	 ddZddZd dZd!dZd"dZ	 	 	 	 	 	 	 	 d#dZddZy)$LinterStatszClass used to linter stats.Nc	                   |xs t        ddddddddddddd      | _        |xs i | _        |xs i | _        |xs t	        ddddd      | _        |xs i | _        |xs t        dd      | _        |xs t        dddd      | _
        |xs t        dddd      | _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        y )Nr   r   r   r   r   r   r   r   r   r   r   r   r   r   r#   r$   r%   r&   r'           r*   r,   r   r   r   r   )r	   	bad_names	by_moduleby_msgr"   code_type_countdependenciesr)   duplicated_linesr.   
node_countr0   undocumentedr3   r4   r5   r6   r7   r8   r9   global_noter*   r,   )	selfrB   rC   rD   rE   rF   rG   rH   rI   s	            r    __init__zLinterStats.__init__Q   s&    # 
h'
 2;b&,l.  
-A!13
 2>1C 0 !
O !C5
 % 
	a!)
 ) 
,=a!-
 

	#$ (+%r   c                    t        |       S )N)strrK   s    r    __repr__zLinterStats.__repr__   s    4yr   c                   dj                  g | j                   dt        | j                  j	                                dt        | j
                  j	                                d| j                   dt        | j                  j	                                d| j                   d| j                   d| j                   d| j                   d| j                   d| j                   d| j                   d| j                   d| j                    d| j"                   d| j$                   d| j&                         S )N z	
        )joinrB   sortedrC   itemsrD   rE   rF   rG   rI   r3   r4   r5   r6   r7   r8   r9   rJ   r*   r,   rO   s    r    __str__zLinterStats.__str__   s   + +DNN# + $	 +	$$&	'(+)	+	!!#	$%+&	+ 
		+	+ 
!!'')	*+	+,		+
 
		+
 	+ 
		+	+ 
+	+ 
+	+ 
+	+ 
+	+ 
+	+ 
+	+ 
+	+ 
		+	+ 
	!	!"+#	+  
	&	&'!+ 	+r   c           	     B    t        ddddddd      | j                  |<   y)z`Use through PyLinter.set_current_module so PyLinter.current_name is
        consistent.
        r   )r3   r4   r5   r6   r7   r8   r9   N)r2   rC   )rK   module_names     r    init_single_modulezLinterStats.init_single_module   s'     '2Q!UV'
{#r   c                |    |dk(  r| j                   j                  dd      S | j                   j                  |d      S )zGet a bad names node count.classr   r   )rB   getrK   	node_names     r    get_bad_nameszLinterStats.get_bad_names   s:    & >>%%gq11~~!!)Q//r   c                    |dvrt        d      t        t        d   |      }|dk(  r| j                  dxx   |z  cc<   y| j                  |xx   |z  cc<   y)z Increase a bad names node count.>   r   r[   r   r   r   r   r   r   r   r   r   r   r   z(Node type not part of the bad_names stat)r   r   r[   r   r   r   r   r   r   r   r   r   r   r[   r   N)
ValueErrorr   r   rB   )rK   r^   increases      r    increase_bad_namezLinterStats.increase_bad_name   sk     
 
 GHH !
	$ NN7#x/#NN9%1%r   c                >    t        ddddddddddddd      | _        y)zResets the bad_names attribute.r   r=   N)r	   rB   rO   s    r    reset_bad_nameszLinterStats.reset_bad_names   s5    !
r   c                :    | j                   j                  |d      S )zGet a code type count.r   )rE   r\   rK   	type_names     r    get_code_countzLinterStats.get_code_count   s     ##''	155r   c                .    t        ddddd      | _        y)z%Resets the code_type_count attribute.r   r>   N)r"   rE   rO   s    r    reset_code_countzLinterStats.reset_code_count   s    ,A!1 
r   c                (    t        dd      | _        y)z&Resets the duplicated_lines attribute.r   r?   r@   N)r)   rG   rO   s    r    reset_duplicated_linesz"LinterStats.reset_duplicated_lines  s     / !C!
r   c                |    |dk(  r| j                   j                  dd      S | j                   j                  |d      S )z6Get a node count while handling some extra conditions.r[   r   r   )rH   r\   r]   s     r    get_node_countzLinterStats.get_node_count  s:     ??&&w22""9a00r   c                ,    t        dddd      | _        y)z Resets the node count attribute.r   rA   N)r.   rH   rO   s    r    reset_node_countzLinterStats.reset_node_count  s    #Qa!Lr   c                H    |dk(  r| j                   d   S | j                   |   S )zGet a undocumented node count.r[   r   )rI   r]   s     r    get_undocumentedzLinterStats.get_undocumented  s.     $$W--  ++r   c                ,    t        dddd      | _        y)z"Resets the undocumented attribute.r   rA   N)r0   rI   rO   s    r    reset_undocumentedzLinterStats.reset_undocumented  s    -q!TUVr   c                    t        | |d      S )zGet a global message count.r   )getattrrg   s     r    get_global_message_countz$LinterStats.get_global_message_count#  s    tY**r   c                6    t        | j                  |   |d      S )zGet a module message count.r   )rw   rC   )rK   modnamerh   s      r    get_module_message_countz$LinterStats.get_module_message_count'  s    t~~g.	1==r   c                8    t        | |t        | |      |z          y)z>Increase the message type count of an individual message type.N)setattrrw   )rK   rh   rb   s      r    increase_single_message_countz)LinterStats.increase_single_message_count+  s    iy!9H!DEr   c                8    | j                   |   |xx   |z  cc<   y)z[Increase the message type count of an individual message type of a
        module.
        N)rC   )rK   rz   rh   rb   s       r    $increase_single_module_message_countz0LinterStats.increase_single_module_message_count/  s     	w	*h6*r   c                X    d| _         d| _        d| _        d| _        d| _        d| _        y)z2Resets the message type count of the stats object.r   N)r3   r4   r5   r6   r7   r9   rO   s    r    reset_message_countzLinterStats.reset_message_count7  s,    

	r   )NNNNNNNN)rB   zBadNames | NonerC   zdict[str, ModuleStats] | NonerD   zdict[str, int] | NonerE   zCodeTypeCount | NonerF   zdict[str, set[str]] | NonerG   zDuplicatedLines | NonerH   zNodeCount | NonerI   zUndocumentedNodes | NonereturnNone)r   rN   )rX   rN   r   r   )r^   zLiteral['argument', 'attr', 'class', 'class_attribute', 'class_const', 'const', 'inlinevar', 'function', 'method', 'module', 'variable', 'typevar', 'typealias']r   r
   )r^   rN   rb   r
   r   r   )r   r   )rh   z9Literal['code', 'comment', 'docstring', 'empty', 'total']r   r
   )r^   0Literal['function', 'class', 'method', 'module']r   r
   )r^   r   r   r+   )rh   rN   r   r
   )rz   rN   rh   rN   r   r
   )rh   rN   rb   r
   r   r   )rz   rN   rh   r   rb   r
   r   r   )r   r   r   r   rL   rP   rV   rY   r_   rc   re   ri   rk   rm   ro   rq   rs   ru   rx   r{   r~   r   r   r   r   r    r;   r;   N   s?   % &*37(,043737'+155,"5, 15, &	5,
 .5, 15, 15, %5, /5, 
5,n+&
0
0" 
#0.(2T
$6R6	6

1I1	1M,I,	,W+>F77';7GJ7	7r   r;   c                   t               }| D ]  }|j                  dxx   |j                  d   z  cc<   |j                  dxx   |j                  d   z  cc<   |j                  dxx   |j                  d   z  cc<   |j                  dxx   |j                  d   z  cc<   |j                  dxx   |j                  d   z  cc<   |j                  dxx   |j                  d   z  cc<   |j                  dxx   |j                  d   z  cc<   |j                  dxx   |j                  d   z  cc<   |j                  d	xx   |j                  d	   z  cc<   |j                  d
xx   |j                  d
   z  cc<   |j                  dxx   |j                  d   z  cc<   |j                  dxx   |j                  d   z  cc<   |j                  dxx   |j                  d   z  cc<   |j                  j                         D ]  \  }}||j                  |<    |j                  j                         D ]  \  }}	 |j                  |xx   |z  cc<    |j                  dxx   |j                  d   z  cc<   |j                  dxx   |j                  d   z  cc<   |j                  dxx   |j                  d   z  cc<   |j                  dxx   |j                  d   z  cc<   |j                  dxx   |j                  d   z  cc<   |j                  j                         D ]$  \  }}	 |j                  |   j                  |       & |j                  dxx   |j                  d   z  cc<   |j                  dxx   |j                  d   z  cc<   |j                  dxx   |j                  d   z  cc<   |j                  dxx   |j                  d   z  cc<   |j                  d	xx   |j                  d	   z  cc<   |j                  d
xx   |j                  d
   z  cc<   |j                  dxx   |j                  d   z  cc<   |j                  dxx   |j                  d   z  cc<   |j                  d	xx   |j                  d	   z  cc<   |j                  d
xx   |j                  d
   z  cc<   |xj                  |j                  z  c_        |xj                  |j                  z  c_        |xj                  |j                  z  c_        |xj                  |j                  z  c_        |xj                   |j                   z  c_        |xj"                  |j"                  z  c_        |xj$                  |j$                  z  c_        |xj&                  |j&                  z  c_         |S # t
        $ r ||j                  |<   Y w xY w# t
        $ r ||j                  |<   Y w xY w)zaUsed to merge multiple stats objects into a new one when pylint is run in
    parallel mode.
    r   r   r   r   r   r   r   r   r   r   r   r   r   r#   r$   r%   r&   r'   r*   r,   )r;   rB   rC   rU   rD   KeyErrorrE   rF   updaterG   rH   rI   r3   r4   r5   r6   r7   r8   r9   rJ   )	statsmergedstatmod_key	mod_valuemsg_key	msg_valuedep_key	dep_values	            r    merge_statsr   A  s=    ]F =/$z(BB$ DNN6$:: !T^^G%<<!*+t~~>O/PP+'4>>-+HH'!T^^G%<<!%)DD%$z(BB$"dnnX&>>""dnnX&>>"$z(BB$#t~~i'@@#%)DD%"&.."6"6"8 	2GY(1FW%	2 #'++"3"3"5 	3GY3g&)3&	3 	v&$*>*>v*FF&y)T-A-A)-LL){+t/C/CK/PP+w'4+?+?+HH'w'4+?+?+HH'"&"3"3"9"9"; 	9GY9##G,33I>	9 	 56$:O:O!;
 	
6 	 :;t?T?T&@
 	
; 	*%)DD%'"doog&>>"(#tx'@@#(#tx'@@#J'4+<+<Z+HH'G$(9(9'(BB$H%):):8)DD%H%):):8)DD%T__,

"

"tyy 4==(DNN*$,,&d...{=/| MS  3)2g&3  9/8##G,9s$   7V*%W	*WW	W%$W%N)r   zlist[LinterStats]r   r;   )
__future__r   typingr   r   r   pylint.typingr   r	   r"   r)   r.   r0   r2   r;   r   r   r   r    <module>r      sn   
 # + + .y $I $i $	 	 	) 	p pfCr   