bgdZddlmZddlmZddlmZddlmZddl m Z m Z m Z ddl mZerddlmZGd d eZddZdS)z;Check for use of for loops that only check for a condition.) annotations) TYPE_CHECKING)nodes) BaseChecker) assigned_boolonly_required_for_messages returns_bool)HIGH)PyLinterceZdZdZddiZedddZeddZeddZ eddZ dS)ConsiderUsingAnyOrAllCheckerconsider-using-any-or-allC0501)z`for` loop could be `%s`rzYA for loop that checks for a condition and return a bool can be replaced with any or all.node nodes.ForreturnNonect|jdkrdSt|jdtjsdSt |jd}td|DrdS|}| |||rB|j j }| ||}| d||tdS|||rB|j j }| ||}| d||tdSdS)Nrc3JK|]}t|tjVdSN) isinstancerIf).0childs n/builddir/build/BUILD/cloudlinux-venv-1.0.7/venv/lib/python3.11/site-packages/pylint/extensions/for_any_all.py z9ConsiderUsingAnyOrAllChecker.visit_for..+s.DDuz%**DDDDDDr)rargs confidence)lenbodyrrrlist get_childrenany next_sibling_assigned_reassigned_returnedvaluename_build_suggested_string add_messager _if_statement_returns_bool)selfr if_childrennode_after_loopfinal_return_boolsuggested_strings r visit_forz&ConsiderUsingAnyOrAllChecker.visit_for#sq ty>>Q   F$)A,11  F49Q<446677 DD DDD D D  F++--  - -dK Q Q  / 5 : #;;DBSTT    +%     F  * *; H H  / 5 ; #;;DBSTT    +%     F  rr.list[nodes.NodeNG]r/ nodes.NodeNGboolcxt|dksdSt|dsdSt|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 rr,z7ConsiderUsingAnyOrAllChecker._if_statement_returns_boolHsE;1$$5KN++ 5O,,,rc|}t|sdSd|D}|sdS|djd}|jd}t|tjrt|tjsdS|jdj}|j|koHt|tjo.t|jtj o|jj|kS)alDetect 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 FcFg|]}t|tj|S)rrAssign)rxs r zNConsiderUsingAnyOrAllChecker._assigned_reassigned_returned..ss)QQQZ5<5P5PQ1QQQrr) previous_siblingrtargetsrr AssignNamer)Returnr(Name)rr.r/node_before_loopassign_children first_targettarget_before_loopnode_before_loop_names rr'z:ConsiderUsingAnyOrAllChecker._assigned_reassigned_returned^s 0022-.. 5QQkQQQ 5'q)1!4 -5a8 |U%5 6 6 -u/?@@ 5 0 8 ; @  !6 6 D?EL99 D?0%*== D %*.CC  rr0strct|j}|j}t|jd}t |tjr|j dkr|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. rnotallznot allznot anyr%(z for z in )) target as_stringiternextr"r$rrUnaryOpopoperand)rr0loop_var loop_iter test_nodesuggested_functiontests rr*z4ConsiderUsingAnyOrAllChecker._build_suggested_strings;((**I'')) 1224455 i / / KILE4I4I!)I*;!J  .?!JU ""$$$LLtLL(LL LLLLrN)rrrr)r.r3r/r4rr5)rrr.r3r/r4rr5)rrr0r5rrH) __name__ __module__ __qualname__r)msgsrr2 staticmethodr,r'r*r:rrr r s &D  D  ;<<"""=<"H---\-*) ) ) \) VMMM\MMMrr linterr rrcJ|t|dSr)register_checkerr )r_s rregisterrbs% 8@@AAAAArN)r_r rr)__doc__ __future__rtypingrastroidrpylint.checkersrpylint.checkers.utilsrrr pylint.interfacesr pylint.lint.pylinterr r rbr:rrrks BA"""""" '''''' #""""".------EMEMEMEMEM;EMEMEMPBBBBBBr