
    e                    z    d 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
  G d dej                        Zdd	Zy
)zELooks for try/except statements with too much code in the try clause.    )annotations)TYPE_CHECKING)nodes)checkers)PyLinterc                  H    e Zd ZdZdZddiZddddd	d
ffZ	 	 	 	 ddZddZy)BroadTryClauseCheckerzChecks for try clauses with too many lines.

    According to PEP 8, ``try`` clauses shall contain the absolute minimum
    amount of code. This checker enforces a maximum number of statements within
    ``try`` clauses.
    broad_try_clauseW0717)z%stoo-many-try-statementsz(Try clause contains too many statements.zmax-try-statements   intz<int>z4Maximum number of statements allowed in a try clause)defaulttypemetavarhelpc                   t        |j                        }|j                  D ]_  }t        |t        j                  t        j
                  t        j                  t        j                  f      sL|| j                  |      z  }a |S N)	lenbody
isinstancer   ForIfWhileWith_count_statements)selfnodestatement_count	body_nodes       D/usr/lib/python3/dist-packages/pylint/extensions/broad_try_clause.pyr   z'BroadTryClauseChecker._count_statements1   sf     dii. 	EI)eii5;;

%ST4#9#9)#DD	E     c                    | j                  |      }|| j                  j                  j                  kD  rFd| d| j                  j                  j                   }| j	                  d|j
                  ||       y y )Nztry clause contains z statements, expected at most r   )r   args)r   linterconfigmax_try_statementsadd_messagelineno)r   r   try_clause_statementsmsgs       r!   	visit_tryzBroadTryClauseChecker.visit_try<   s     $ 6 6t < 4;;#5#5#H#HH&'<&= >++>>?A  )4;;T   Ir"   N)r   z;nodes.For | nodes.If | nodes.Try | nodes.While | nodes.Withreturnr   )r   z	nodes.Tryr-   None)	__name__
__module____qualname____doc__namemsgsoptionsr   r,    r"   r!   r	   r	      sY     D 
D !"N		

G	O				r"   r	   c                8    | j                  t        |              y r   )register_checkerr	   )r%   s    r!   registerr9   H   s    
1&9:r"   N)r%   r   r-   r.   )r2   
__future__r   typingr   astroidr   pylintr   pylint.lintr   BaseCheckerr	   r9   r6   r"   r!   <module>r@      s5   
 L "    $2H00 2j;r"   