§
    ÷yIf  ã                  óH  — d Z ddlmZ ddlmZ ddlmZmZmZ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
lmZ erddlmZ e	ej        ej        ej        ej        ej        ej        ej        ej         ej!        ej"        ej#        ej$        ej%        ej&        ej'        ej(        f         Z)e	ej*        ej+        ej,        ej-        f         Z. ede	e)ej-        ej/        f         ¬¦  «        Z0 G d„ de¦  «        Z G d„ de¦  «        Z G d„ dej1        ¦  «        Z2dd„Z3dS )z.Module to add McCabe checker class for pylint.é    )Úannotations)ÚSequence)ÚTYPE_CHECKINGÚAnyÚTypeVarÚUnion)Únodes)Ú	PathGraph)ÚPathGraphingAstVisitor)Úcheckers)Úonly_required_for_messages)ÚHIGH)ÚPyLinterÚ_AppendableNodeT)Úboundc                  ó    ‡ — e Zd Zdˆ fd„Zˆ xZS )r
   Únodeú"_SubGraphNodes | nodes.FunctionDefc                ó^   •— t          ¦   «                              ddd¬¦  «         || _        d S )NÚ é   )ÚnameÚentityÚlineno)ÚsuperÚ__init__Úroot)Úselfr   Ú	__class__s     €úL/var/www/piapp/venv/lib/python3.11/site-packages/pylint/extensions/mccabe.pyr   zPathGraph.__init__1   s-   ø€ Ý‰Œ×Ò˜b¨°AÐÑ6Ô6Ð6ØˆŒ	ˆ	ˆ	ó    )r   r   )Ú__name__Ú
__module__Ú__qualname__r   Ú__classcell__©r   s   @r    r
   r
   0   s=   ø€ € € € € ðð ð ð ð ð ð ð ð ð r!   r
   c                  ó¬   ‡ — e Zd Zdˆ fd„Zdd„Zdd	„Zdd„ZeZd d„ZexZ	xZ
xZxZxZxZxZxZxZxZxZxZxZxZxZZd!d„ZeZd"d„Z	 d#d$d„Zd%d„Zˆ xZS )&r   ÚreturnÚNonec                ód   •— t          ¦   «                              ¦   «          d| _        d | _        d S )Nr   )r   r   Ú_bottom_counterÚgraph)r   r   s    €r    r   zPathGraphingAstVisitor.__init__7   s,   ø€ Ý‰Œ×ÒÑÔÐØ ˆÔØ'+ˆŒ
ˆ
ˆ
r!   r   únodes.NodeNGÚargsr   c                óP   — |                      ¦   «         D ]} | j        |g|¢R Ž  Œd S ©N)Úget_childrenÚdispatch)r   r   r.   Úchilds       r    ÚdefaultzPathGraphingAstVisitor.default<   sD   € Ø×&Ò&Ñ(Ô(ð 	(ð 	(ˆEØˆDŒM˜%Ð' $Ð'Ð'Ð'Ð'Ð'ð	(ð 	(r!   c                óÆ   — || _         |j        }| j                             |¦  «        }|€/|j        }t          | j        d|z   | j        ¦  «        }|| j        |<    ||g|¢R Ž S )NÚvisit)r   r   Ú_cacheÚgetr"   ÚgetattrÚvisitorr4   )r   r   r.   ÚklassÚmethÚ
class_names         r    r2   zPathGraphingAstVisitor.dispatch@   sm   € ØˆŒ	Ø”ˆØŒ{�Š˜uÑ%Ô%ˆØˆ<ØœˆJÝ˜4œ<¨°:Ñ)=¸t¼|ÑLÔLˆDØ!%ˆDŒK˜ÑØˆt�DÐ ˜4Ð Ð Ð Ð r!   únodes.FunctionDefc                ó  — | j         �’|                      |¦  «        }|| _        |                      |j        ¦  «         | j        › }| xj        dz  c_        | j                              | j        |¦  «         | j                              ||¦  «         || _        d S t          |¦  «        | _         || _        |                      |j        ¦  «         | j         | j        | j	        › |j
        › �<   |                      ¦   «          d S )Nr   )r,   Ú_append_nodeÚtailÚdispatch_listÚbodyr+   Úconnectr
   ÚgraphsÚ	classnamer   Úreset)r   r   ÚpathnodeÚbottoms       r    ÚvisitFunctionDefz'PathGraphingAstVisitor.visitFunctionDefJ   sî   € ØŒ:Ð!à×(Ò(¨Ñ.Ô.ˆHØ ˆDŒIØ×Ò˜tœyÑ)Ô)Ð)ØÔ,Ð.ˆFØÐ Ô  AÑ%Ð Ô ØŒJ×Ò˜tœy¨&Ñ1Ô1Ð1ØŒJ×Ò˜t VÑ,Ô,Ð,ØˆDŒIˆIˆIå" 4™œˆDŒJØˆDŒIØ×Ò˜tœyÑ)Ô)Ð)Ø:>¼*ˆDŒK˜4œ>Ð6¨4¬9Ð6Ð6Ñ7Ø�JŠJ‰LŒLˆLˆLˆLr!   Ú_StatementNodesc                ó0   — |                       |¦  «         d S r0   )r@   ©r   r   s     r    ÚvisitSimpleStatementz+PathGraphingAstVisitor.visitSimpleStatement^   s   € Ø×Ò˜$ÑÔÐÐÐr!   ú
nodes.Withc                ód   — |                       |¦  «         |                      |j        ¦  «         d S r0   )r@   rB   rC   rM   s     r    Ú	visitWithz PathGraphingAstVisitor.visitWithg   s2   € Ø×Ò˜$ÑÔÐØ×Ò˜4œ9Ñ%Ô%Ð%Ð%Ð%r!   r   ú_AppendableNodeT | Nonec                ót   — | j         r| j        sd S | j                             | j         |¦  «         || _         |S r0   )rA   r,   rD   rM   s     r    r@   z#PathGraphingAstVisitor._append_nodem   s@   € ØŒyð 	 ¤
ð 	Ø�4ØŒ
×Ò˜4œ9 dÑ+Ô+Ð+ØˆŒ	Øˆr!   © Ú_SubGraphNodesr   ÚstrÚextra_blocksúSequence[nodes.ExceptHandler]c                ó  — | j         €Yt          |¦  «        | _         |                      |||¦  «         | j         | j        | j        › |› �<   |                      ¦   «          dS |                      |¦  «         |                      |||¦  «         dS )z@Create the subgraphs representing any `if` and `for` statements.N)r,   r
   Ú_subgraph_parserE   rF   rG   r@   )r   r   r   rW   s       r    Ú	_subgraphz PathGraphingAstVisitor._subgrapht   s�   € ð Œ:Ðå" 4™œˆDŒJØ× Ò   t¨\Ñ:Ô:Ð:Ø59´ZˆDŒK˜4œ>Ð1¨4Ð1Ð1Ñ2Ø�JŠJ‰LŒLˆLˆLˆLà×Ò˜dÑ#Ô#Ð#Ø× Ò   t¨\Ñ:Ô:Ð:Ð:Ð:r!   rH   c                óH  — g }|| _         |                      |j        ¦  «         |                     | j         ¦  «         |D ]=}|| _         |                      |j        ¦  «         |                     | j         ¦  «         Œ>|j        r<|| _         |                      |j        ¦  «         |                     | j         ¦  «         n|                     |¦  «         |rH| j        rC| j        › }| xj        dz  c_        |D ]}| j                             ||¦  «         Œ|| _         dS dS dS )zAParse the body and any `else` block of `if` and `for` statements.r   N)rA   rB   rC   ÚappendÚorelser,   r+   rD   )r   r   rH   rW   Ú
loose_endsÚextrarI   Úends           r    rZ   z&PathGraphingAstVisitor._subgraph_parse…   sN  € ð ˆ
ØˆŒ	Ø×Ò˜4œ9Ñ%Ô%Ð%Ø×Ò˜$œ)Ñ$Ô$Ð$Ø!ð 	)ð 	)ˆEØˆDŒIØ×Ò˜uœzÑ*Ô*Ð*Ø×Ò˜dœiÑ(Ô(Ð(Ð(ØŒ;ð 	$ØˆDŒIØ×Ò˜tœ{Ñ+Ô+Ð+Ø×Ò˜dœiÑ(Ô(Ð(Ð(à×Ò˜dÑ#Ô#Ð#Øð 	�D”Jð 	ØÔ,Ð.ˆFØÐ Ô  AÑ%Ð Ô Ø!ð 0ð 0�Ø”
×"Ò" 3¨Ñ/Ô/Ð/Ð/ØˆDŒIˆIˆIð	ð 	ð 	ð 	r!   )r(   r)   )r   r-   r.   r   r(   r)   )r   r-   r.   r   r(   r   )r   r>   r(   r)   )r   rK   r(   r)   )r   rO   r(   r)   )r   r   r(   rR   )rT   )r   rU   r   rV   rW   rX   r(   r)   )r   rU   rH   rU   rW   rX   r(   r)   )r"   r#   r$   r   r4   r2   rJ   ÚvisitAsyncFunctionDefrN   ÚvisitAssertÚvisitAssignÚvisitAugAssignÚvisitDeleteÚ
visitRaiseÚ
visitYieldÚvisitImportÚ	visitCallÚvisitSubscriptÚ	visitPassÚvisitContinueÚ
visitBreakÚvisitGlobalÚvisitReturnÚ	visitExprÚ
visitAwaitrQ   ÚvisitAsyncWithr@   r[   rZ   r%   r&   s   @r    r   r   6   sˆ  ø€ € € € € ð,ð ,ð ,ð ,ð ,ð ,ð
(ð (ð (ð (ð!ð !ð !ð !ðð ð ð ð$ -Ðð ð  ð  ð  ð >Rð	R€Kð R�+ð R ð R°ð R¸zð RØðRàðRàðRà"0ðRà3<ðRà?LðRð 	ðRð 	ð	Rð "ð	Rð %.°
ð&ð &ð &ð &ð €Nðð ð ð ð 79ð	;ð ;ð ;ð ;ð ;ð"ð ð ð ð ð ð ð r!   r   c                  ó\   — e Zd ZdZdZddiZddddd	d
œffZ ed¦  «        dd„¦   «         ZdS )ÚMcCabeMethodCheckerzoChecks McCabe complexity cyclomatic threshold in methods and functions
    to validate a too complex code.
    ÚdesignÚR1260)z*%s is too complex. The McCabe rating is %dútoo-complexzSUsed when a method or function is too complex based on McCabe Complexity Cyclomaticzmax-complexityé
   Úintz<int>z&McCabe complexity cyclomatic threshold)r4   ÚtypeÚmetavarÚhelprx   r   únodes.Moduler(   r)   c                ó¸  — t          ¦   «         }|j        D ]}|                     ||¦  «         Œ|j                             ¦   «         D ]‘}|                     ¦   «         }|j        }t          |d¦  «        rd|j        › d�}n"d|j	        j
                             ¦   «         › d�}|| j        j        j        k    rŒq|                      d|t           ||f¬¦  «         Œ’dS )z�Visit an astroid.Module node to check too complex rating and
        add message if is greater than max_complexity stored from options.
        r   ú'zThis 'rx   )r   Ú
confidencer.   N)r   rC   ÚpreorderrE   ÚvaluesÚ
complexityr   Úhasattrr   r   r"   ÚlowerÚlinterÚconfigÚmax_complexityÚadd_messager   )r   r   r:   r3   r,   r„   Ú	node_names          r    Úvisit_modulez McCabeMethodChecker.visit_module½   s  € õ
 )Ñ*Ô*ˆØ”Yð 	-ð 	-ˆEØ×Ò˜U GÑ,Ô,Ð,Ð,Ø”^×*Ò*Ñ,Ô,ð 	ð 	ˆEØ×)Ò)Ñ+Ô+ˆJØ”:ˆDÝ�t˜VÑ$Ô$ð HØ, ¤	Ð,Ð,Ð,�	�	àG T¤^Ô%<×%BÒ%BÑ%DÔ%DÐGÐGÐG�	Ø˜Tœ[Ô/Ô>Ò>Ð>ØØ×ÒØ DµTÀÈJÐ@Wð ñ ô ð ð ð	ð 	r!   N)r   r~   r(   r)   )	r"   r#   r$   Ú__doc__r   ÚmsgsÚoptionsr   rŒ   rT   r!   r    ru   ru   ¢   s‰   € € € € € ðð ð €Dð 	ð 
ð€Dð àØØ"Ø@ð	ð ð	
ð
€Gð  Ð Ñ.Ô.ðð ð ñ /Ô.ðð ð r!   ru   r‡   r   r(   r)   c                óJ   — |                       t          | ¦  «        ¦  «         d S r0   )Úregister_checkerru   )r‡   s    r    Úregisterr’   Ó   s%   € Ø
×ÒÕ/°Ñ7Ô7Ñ8Ô8Ð8Ð8Ð8r!   N)r‡   r   r(   r)   )4r�   Ú
__future__r   Úcollections.abcr   Útypingr   r   r   r   Úastroidr	   Úmccaber
   ÚMccabe_PathGraphr   ÚMccabe_PathGraphingAstVisitorÚpylintr   Úpylint.checkers.utilsr   Úpylint.interfacesr   Úpylint.lintr   ÚAssertÚAssignÚ	AugAssignÚDeleteÚRaiseÚYieldÚImportÚCallÚ	SubscriptÚPassÚContinueÚBreakÚGlobalÚReturnÚExprÚAwaitrK   ÚIfÚTryÚForÚWhilerU   ÚFunctionDefr   ÚBaseCheckerru   r’   rT   r!   r    ú<module>r´      s/  ðð
 5Ð 4à "Ð "Ð "Ð "Ð "Ð "à $Ð $Ð $Ð $Ð $Ð $Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5à Ð Ð Ð Ð Ð Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø JÐ JÐ JÐ JÐ JÐ Jà Ð Ð Ð Ð Ð Ø <Ð <Ð <Ð <Ð <Ð <Ø "Ð "Ð "Ð "Ð "Ð "àð %Ø$Ð$Ð$Ð$Ð$Ð$àØ	„LØ	„LØ	„OØ	„LØ	„KØ	„KØ	„LØ	„JØ	„OØ	„JØ	„NØ	„KØ	„LØ	„LØ	„JØ	„Kðô€ð& �u”x ¤¨E¬I°u´{ÐBÔC€Ø�7Ø˜e O°U´[À%ÔBSÐ$SÔTðñ ô Ð ð
ð ð ð ð Ð ñ ô ð ðið ið ið ið iÐ:ñ iô ið iðX.ð .ð .ð .ð .˜(Ô.ñ .ô .ð .ðb9ð 9ð 9ð 9ð 9ð 9r!   