t d Z ddlmZ ddlmZ ddlmZ ddlmZ ddl m
Z
mZmZ ddl
mZ erddlmZ G d d
e ZddZdS )z;Check for use of for loops that only check for a condition. )annotations)
TYPE_CHECKING)nodes)BaseChecker)
assigned_boolonly_required_for_messagesreturns_bool)HIGH)PyLinterc e Zd ZdZddiZ ed dd Zedd Zedd Z edd Z
dS )ConsiderUsingAnyOrAllCheckerconsider-using-any-or-allC0501)z`for` loop could be `%s`r zYA for loop that checks for a condition and return a bool can be replaced with any or all.node nodes.ForreturnNonec t |j dk rd S t |j d t j sd S t |j d }t d |D rd S | }| ||| rB|j
j }| || }|
d||t d S | || rB|j
j
}| || }|
d||t d S d S )N r c 3 J K | ]}t |t j V d S N)
isinstancer If).0childs o/builddir/build/BUILD/cloudlinux-venv-1.0.10/venv/lib/python3.11/site-packages/pylint/extensions/for_any_all.py z9ConsiderUsingAnyOrAllChecker.visit_for..+ s. DDuz%**DDDDDD r )r args
confidence)lenbodyr r r listget_childrenanynext_sibling_assigned_reassigned_returnedvaluename_build_suggested_stringadd_messager
_if_statement_returns_bool)selfr if_childrennode_after_loopfinal_return_boolsuggested_strings r visit_forz&ConsiderUsingAnyOrAllChecker.visit_for# sq ty>>QF$)A,11 F49Q<446677DDDDDDD
F++----dKQQ / 5 :#;;DBSTT+%
F**;HH / 5 ;#;;DBSTT+%
F r r. list[nodes.NodeNG]r/ nodes.NodeNGboolc x t | dk sdS t | d sdS t | S )zDetect for-loop, if-statement, return pattern:
Ex:
def any_uneven(items):
for item in items:
if not item % 2 == 0:
return True
return False
Fr )r! r )r. r/ s r r, z7ConsiderUsingAnyOrAllChecker._if_statement_returns_boolH sE ;1$$5KN++ 5 O,,,r c | }t | sdS d |D }|sdS |d j d }|j d }t |t j rt |t j sdS |j d j }|j |k oHt |t j o.t |j t j o|j j |k S )al Detect boolean-assign, for-loop, re-assign, return pattern:
Ex:
def check_lines(lines, max_chars):
long_line = False
for line in lines:
if len(line) > max_chars:
long_line = True
# no elif / else statement
return long_line
Fc F g | ]}t |t j |S )r r Assign)r xs r
zNConsiderUsingAnyOrAllChecker._assigned_reassigned_returned..s s) QQQZ5<5P5PQ1QQQr r )
previous_siblingr targetsr r
AssignNamer) Returnr( Name)r r. r/ node_before_loopassign_childrenfirst_targettarget_before_loopnode_before_loop_names r r' z:ConsiderUsingAnyOrAllChecker._assigned_reassigned_returned^ s 0022-.. 5QQkQQQ 5 'q)1!4-5a8
|U%566 -u/?@@ 5 0 8 ; @!66
D?EL99
D?0%*==
D %*.CC
r r0 strc t | j }| j }t | j d }t
|t j r|j dk r|j
}|rdnd}n|rdnd}| }| d| d| d | d
S )zWhen a nodes.For node can be rewritten as an any/all statement, return a
suggestion for that statement.
'final_return_bool' is the boolean literal returned after the for loop if all
conditions fail.
r notallznot allznot anyr% (z for z in ))target as_stringiternextr" r$ r r UnaryOpopoperand)r r0 loop_var loop_iter test_nodesuggested_functiontests r r* z4ConsiderUsingAnyOrAllChecker._build_suggested_string s ;((**I'')) 1224455 i// KILE4I4I!)I*;!J.?!JU""$$$LLtLL(LL LLLLr N)r r r r )r. r3 r/ r4 r r5 )r r r. r3 r/ r4 r r5 )r r r0 r5 r rH )__name__
__module____qualname__r) msgsr r2 staticmethodr, r' r* r: r r r
r
s &D
D ;<<" " " =<"H - - - \-* )
)
)
\)
V M M M \M M Mr r
linterr r r c J | t | d S r )register_checkerr
)r_ s r registerrb s%
8@@AAAAAr N)r_ r r r )__doc__
__future__r typingr astroidr pylint.checkersr pylint.checkers.utilsr r r pylint.interfacesr
pylint.lint.pylinterr r
rb r: r r rk s
B A " " " " " " ' ' ' ' ' '
# " " " " " .------EM EM EM EM EM; EM EM EMPB B B B B Br