bgG UdZddlmZddlZddlZddlZddlZddlZddlZddlm Z ddl m Z m Z m Z ddlmZddlmZddlmZmZmZddlZdd lmZmZmZmZdd lmZdd lmZdd lm Z m!Z!dd l"m#Z#m$Z$m%Z%ddl&m'Z'm(Z(m)Z)ddl*m+Z+m,Z,m-Z-m.Z.ddl/m0Z0ej1dkrddlm2Z2nddl3m4Z2erddl5m6Z6ej7dZ8dZ9ej7dZ:ddiZ;dZhdZ?ej@jAej@jBej@jCejjDjEfZFejGejHejIejJejKejLfZMGddeZNdd%ZOed&'dd,ZPdd1ZQdd6ZRdd9ZSdd=ZTdd>ZUddBZVddEZWddGZXddKZYidLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdndodpdqdrgifdsdtdudqdvgifdwdxdydzd{d|ZZd}e[d~<GddeZ\GddZ]Gdde Z^ddZ_dS)z#Variables checkers for Python code.) annotationsN) defaultdict) GeneratorIterableIterator)Enum) lru_cache) TYPE_CHECKINGAny NamedTuple)bases extract_nodenodesutil) _base_nodes)InferenceResult) BaseCheckerutils)in_type_checking_blockis_postponed_evaluation_enabled is_sys_guard) PY39_PLUS TYPING_NEVERTYPING_NORETURN) CONTROL_FLOWHIGH INFERENCEINFERENCE_FAILURE)MessageDefinitionTuple))cached_property)cachedproperty)PyLinterz^_{2}[a-z]+_{2}$ __future__z_.*|^ignored_|^unused__py_abcabczbuiltins.rangetyping>5r SetDictListTextTypeDequeSizedTupleUnionAnyStrCounterGenericMappingPatternTypeVarBinaryIOCallableClassVarHashablerrKeysViewOptionalSequence Awaitable Container Coroutine FrozenSetr ItemsView ByteString Collection MutableSetr Reversible ValuesView AbstractSet DefaultDict MappingView SupportsAbs SupportsInt AsyncIterable AsyncIterator SupportsBytes SupportsFloat SupportsRoundAsyncGeneratorContextManagerMutableMappingMutableSequenceSupportsComplexAsyncContextManagerceZdZdZdZdZdS)VariableVisitConsumerActionzReported by _check_consumer() and its sub-methods to determine the subsequent action to take in _undefined_and_used_before_checker(). Continue -> continue loop to next consumer Return -> return and thereby break the loop rN)__name__ __module__ __qualname____doc__CONTINUERETURNj/builddir/build/BUILD/cloudlinux-venv-1.0.7/venv/lib/python3.11/site-packages/pylint/checkers/variables.pyrZrZs$H FFFrcrZstmtnodes.ImportFromnamestrreturn bool | Nonec ||j}n#tj$rYdSwxYw|j|gD]/}t |tjr|jtkrdS0dS)z9Check if the name is a future import from another module.NT) do_import_modulemodnameastroidAstroidBuildingExceptionlocalsget isinstancer ImportFromFUTURE)rergmodule local_nodes rd_is_from_future_importrws&&t|44  +ttm''b11 j%"2 3 3  8Jf8T8T44 4s 00i)maxsizeklassnodes.LocalsDictNodeNG str | Nonenodes.FunctionDef | Nonec t||}n#ttf$rYdSwxYw ||}n#t$rYdSwxYwt |t jr|SdS)zGet overridden method if any.N)nextlocal_attr_ancestors StopIterationKeyErrorrrr FunctionDef)ryrgparent meth_nodes rdoverridden_methodrs e006677 8 $tt4L tt)U.// 4s"%::A AAnode nodes.Assigninferredrcd}t|trit|tjr|j}n3t|tjr|j}|S|j }|j |kr;|j |j krd|d}n&|j r d|j }n|j r d|j d|}|S)z~Return extra information to add to the message for unpacking-non-sequence and unbalanced-tuple/dict-unpacking errors. 'zdefined at line z of ) rr DICT_TYPESrAssignvalue as_stringForiterrootrglineno)rrmoreinferred_modules rd_get_unpacking_extra_infors D(J'' dEL ) ) ):''))DD ei ( ( )9&&((D mmoo*O yy{{?** ;(/ ) ).x))++...DD _ 87ho77D IH(/HHHH Krc nodes.Nameframedefframeboolcjdx}}|r |jr|j}|r |jr|j}t|tjr'||ur#|t j|tjurdSt|tjrS||r|j |j kSt|jtjtj fsdSntd||fDrdSg}||fD]f}|}|r`t|tjtj fs| |n$|jr|j}nn|`g|r"tt|dkrdS|j |j kS)aDetect that the given frames share a global scope. Two frames share a global scope when neither of them are hidden under a function scope, as well as any parent scope of them, until the root scope. In this case, depending from something defined later on will only work if guarded by a nested function definition. Example: class A: # B has the same global scope as `C`, leading to a NameError. # Return True to indicate a shared scope. class B(C): ... class C: ... Whereas this does not lead to a NameError: class A: def guard(): # Return False to indicate no scope sharing. class B(C): ... class C: ... NFc3dK|]+}t|tjtjf V,dSN)rrrClassDefModule).0fs rd z'_detect_global_scope..sI  >?Jq5>5<8 9 99      rcr[)rscoperrrrrget_node_first_ancestor_of_typer parent_ofr Argumentsanyrappendlenset)rrr def_scoper break_scopes current_scope parent_scopes rd_detect_global_scopers2I %% ""$$,HO,O))++ 5%.))  " " U:4ARSS S Su%*++ ??8 $ $ 1;0 0$+(95?'KLL 5    DI8CT      uL+   %  lU^U\,JKK ##L111" +288::  C --..!33u <(/ ))rc nodes.Import&Generator[InferenceResult, None, None]cztj}||_||dS)NF)asname)rncontextInferenceContext lookupnameinfer)rrgrs rd_infer_name_modulers5o..00GG ::ge: , ,,rc not_consumeddict[str, list[nodes.NodeNG]](list[tuple[str, _base_nodes.ImportNode]]ci}|D]\}}td|Dr|D]}t|tjtjfs)|jD]Z}d}|d}|dkr|}n:d}||r|ddkrd}|s||vr|}|r ||vr|||<[t|d S) aTry to fix imports with multiple dots, by returning a dictionary with the import names expanded. The function unflattens root imports, like 'xml' (when we have both 'xml.etree' and 'xml.sax'), to 'xml.etree' and 'xml.sax' respectively. c3K|]J}t|tjo+t|tjVKdSr)rrr AssignName assign_type AugAssignrres rdrz#_fix_dot_imports..+sf   tU- . . @4++--u??      rcNr*F.Tc|djS)Nr[) fromlineno)as rdz"_fix_dot_imports..Js qtrc)key) itemsrrrrrsImportnames startswithfindsorted) rrrgstmtsreimports second_nameimport_module_namename_matches_dotted_imports rd_fix_dot_importsrsY02E#))++.. e           . .DdU%5u|$DEE : . ." %,QZ"%,,#'KK16.*55d;;:.33C882==59219TW__'9 .;e#;#;)-E+&+ . .2 %++--%>%> ? ? ??rcc|t|tjvrdS|tjtjf}|D](}|jD]\}}|r ||krdS|r ||krdS)dS)zDetect imports in the frame, with the required *name*. Such imports can be considered assignments if they are not globals. Returns True if an import for the given name was found. FT)_flattened_scope_namesnodes_of_classrGlobalrrsr)rgrr import_node import_name import_aliass rd_find_frame_importsrMs  %e&:&:5<&H&HIIIIu""EL%2B#CDDG )4):   %K 4''444( !4!4ttt  5rc%nodes.Global | _base_nodes.ImportNode global_namesset[str]cB|jD]\}}|r||vrdS||vrdSdS)NTF)r)rerrrs rd_import_name_is_globalrcsW&*Z! \  |++tt, L ( (44) 5rciterator'Iterator[nodes.Global | nodes.Nonlocal]crd|D}ttj|S)Nc3>K|]}t|jVdSr)rrrs rdrz)_flattened_scope_names..ts* 3 3$c$*oo 3 3 3 3 3 3rc)r itertoolschain from_iterable)rvaluess rdrrqs54 3( 3 3 3F y,,V44 5 55rc name_nodec}|tj}t fd|Dpt j|S)zEChecks if name_node has corresponding assign statement in same scope.c38K|]}|jjkVdSrrg)rrrs rdrz$_assigned_locally..|s,>>Aqv'>>>>>>rc)rrrrrrrg)rname_node_scope assign_stmtss` rd_assigned_locallyrxshoo''O"11%2BCCL >>>>>>> > > BUCCrc nodes.NodeNGrnodes.FunctionDefcTtjtjtjtjf}|tj|D]W}tj|j }tj |r(t|dddkr|j |j krdSXdS)N) skip_klassrgrpTF) rrrrrsrCallr safe_inferfuncis_builtin_objectgetattrr)rer skip_nodescallrs rd_has_locals_call_after_noders     J $$UZJ$GG#DI..  #H - - &$//8;;{T[((tt 5rcE0601)z#Using variable %r before assignmentused-before-assignmentafEmitted when a local variable is accessed before its assignment took place. Assignments in try blocks are assumed not to have occurred when evaluating associated except/finally blocks. Assignments in except blocks are assumed not to have occurred when evaluating statements outside the block, except when the associated try block contains a return statement.E0602)zUndefined variable %rundefined-variablez,Used when an undefined variable is accessed.E0603)z%Undefined variable name %r in __all__undefined-all-variablez>Used when an undefined variable name is referenced in __all__.E0604)z7Invalid object %r in __all__, must contain only stringsinvalid-all-objectz;Used when an invalid (non-string) object occurs in __all__.E0605)z1Invalid format for __all__, must be tuple or listinvalid-all-formatz(Used when __all__ has an invalid format.E0611)zNo name %r in module %rno-name-in-modulez-Used when a name cannot be found in a module.W0601)z0Global variable %r undefined at the module levelglobal-variable-undefinedzsUsed when a variable is defined through the "global" statement but the variable is not defined in the module scope.W0602)z-Using global for %r but no assignment is doneglobal-variable-not-assignedzWhen a variable defined in the global scope is modified in an inner scope, the 'global' keyword is required in the inner scope only if there is an assignment operation done in the inner scope.W0603)zUsing the global statementglobal-statementzUsed when you use the "global" statement to update a global variable. Pylint discourages its usage. That doesn't mean you cannot use it!W0604)z.Using the global statement at the module levelglobal-at-module-levelzTUsed when you use the "global" statement at the module level since it has no effect.W0611)z Unused %s unused-importz5Used when an imported module or variable is not used.W0612)zUnused variable %runused-variablez-Used when a variable is defined but not used.W0613)zUnused argument %runused-argumentz4Used when a function or method argument is not used.W0614)z.Unused import(s) %s from wildcard import of %sunused-wildcard-importz]Used when an imported module or variable is not used from a `'from X import *'` style import.W0621)z-Redefining name %r from outer scope (line %s)redefined-outer-namezUUsed when a variable's name hides a name defined in an outer scope or except handler.W0622)zRedefining built-in %rredefined-builtinz5Used when a variable or function override a built-in.W0631)z)Using possibly undefined loop variable %rundefined-loop-variablezUsed when a loop variable (i.e. defined by a for loop or a list comprehension or a generator expression) is used outside the loop.ziPossible unbalanced tuple unpacking with sequence %s: left side has %d label%s, right side has %d value%sunbalanced-tuple-unpackingz>Used when there is an unbalanced tuple unpacking in assignment old_names)E0632zold-unbalanced-tuple-unpackingz%Attempting to unpack a non-sequence%sunpacking-non-sequencezKUsed when something which is not a sequence is used in an unpack assignment)W0633zold-unpacking-non-sequence)z Cell variable %s defined in loopcell-var-from-loopzA variable used in a closure is defined in a loop. This will result in all closures using the same value for the closed-over variable.)zPossibly unused variable %rpossibly-unused-variablezUsed when a variable is defined but might not be used. The possibility comes from the fact that locals() might be used, which could consume or not the said variable)z"Invalid assignment to %s in methodself-cls-assignmentzKInvalid assignment to self or cls in instance or class method respectively.)z!Invalid index for iterable lengthpotential-index-errorzREmitted when an index used on an iterable goes beyond the length of that iterable.)z_Possible unbalanced dict unpacking with %s: left side has %d label%s, right side has %d value%sunbalanced-dict-unpackingzIUsed when there is an unbalanced dict unpacking in assignment or for loop)W0632E0633W0640W0641W0642E0643W0644z!dict[str, MessageDefinitionTuple]MSGSc<eZdZUdZded<ded<ded<ded<d S) ScopeConsumerz)Store nodes and their consumption states.r to_consumeconsumed$defaultdict[str, list[nodes.NodeNG]]consumed_uncertainrh scope_typeN)r\r]r^r___annotations__rbrcrdr3r3&sC33----++++<<<<OOOOOrcr3czeZdZdZd/dZd0d Zd1d Zed2d Zed2dZ ed3dZ ed0dZ d4dZ d5dZ ed6dZed7dZd8dZed9d"Zed6d#Zed6d$Zed:d'Zed;d+Zedrbrkvs rd z*NamesConsumer.__repr__..:s&PPP11  PPPrcc"g|] \}}|d| SrGrbrHs rdrKz*NamesConsumer.__repr__..;s&KKKTQ[[Q[[KKKrcc"g|] \}}|d| SrGrbrHs rdrKz*NamesConsumer.__repr__..<s3    AqqKKAKK   rc, z to_consume : z consumed : z consumed_uncertain: z scope_type :  )rAr4rr5r7joinr8)rC _to_consumes _consumed_consumed_uncertain to_consumesr5r7s rd__repr__zNamesConsumer.__repr__9sPP 0G0M0M0O0OPPP KKT\-B-H-H-J-JKKK   $(L$C$I$I$K$K   ii -- 99Y''!YY':;; (l%  rc Iterator[Any]c*t|jSr)rrArCs rd__iter__zNamesConsumer.__iter__IsDL!!!rcrc|jjSr)rAr4rXs rdr4zNamesConsumer.to_consumeL |&&rcc|jjSr)rAr5rXs rdr5zNamesConsumer.consumedPs |$$rcr6c|jjS)aRetrieves nodes filtered out by get_next_to_consume() that may not have executed. These include nodes such as statements in except blocks, or statements in try blocks (when evaluating their corresponding except and finally blocks). Checkers that want to treat the statements as executed (e.g. for unused-variable) may need to add them back. )rAr7rXs rdr7z NamesConsumer.consumed_uncertainTs|..rcc|jjSr)rAr8rXs rdr8zNamesConsumer.scope_type`r[rcrgconsumed_nodeslist[nodes.NodeNG]czfd|j|D}|j|<|r ||j|<dS|j|=dS)zMark the given nodes as consumed for the name. If all of the nodes for the name were consumed, delete the name from the to_consume dictionary c6g|]}|tv|Srb)r)rnr_s rdrKz2NamesConsumer.mark_as_consumed..js+WWWA!3~CVCV:V:Va:V:V:VrcN)r4r5)rCrgr_ unconsumeds ` rdmark_as_consumedzNamesConsumer.mark_as_consumedds\ XWWW!6WWW , d  &$.DOD ! ! !%%%rcrlist[nodes.NodeNG] | Nonecj}j}|j|}d}|rPt |t jr6||djkr%|djjd}|j|krd}|r0t |t j r|j kr |j |vrd}tfd dDr|Str|S|rM||}|jjxx|z cc<t'|fd|D}|rfd|D}|rN|||}|jjxx|z cc<t'|fd|D}|rM|||}|jjxx|z cc<t'|fd |D}|rM|||}|jjxx|z cc<t'|fd |D}|S) aGReturn a list of the nodes that define `node` from this scope. If it is uncertain whether a node will be consumed, such as for statements in except blocks, add it to self.consumed_uncertain instead of returning it. Return None to indicate a special case that needs to be handled by the caller. TfuturerNc3hK|],}t|tjo j|jvV-dSrrrrNonlocalrgrrchildrs rdrz4NamesConsumer.get_next_to_consume..sQ   uen - - J$)u{2J      rccg|]}|v| Srbrbrrcuncertain_nodes_sets rdrKz5NamesConsumer.get_next_to_consume..$RRRQ>Q5Q5Q15Q5Q5Qrccg|][}t|dtjr)|dY|\S)Trh)rr statementr ExceptHandlerr)rrcrs rdrKz5NamesConsumer.get_next_to_consume..sp!!++T+":":E.rrrccg|]}|v| Srbrbrps rdrKz5NamesConsumer.get_next_to_consume..rrrccg|]}|v| Srbrbrps rdrKz5NamesConsumer.get_next_to_consume..rrrc)rgrr4rqrtrrrrtargetsrrtargetrr get_childrenVariablesChecker%_comprehension_between_frame_and_node_uncertain_nodes_in_false_testsr7r!_uncertain_nodes_in_except_blocks=_uncertain_nodes_in_try_blocks_when_evaluating_finally_blocks<_uncertain_nodes_in_try_blocks_when_evaluating_except_blocks) rCrrg parent_node found_nodesnode_statementlhsuncertain_nodesrqs ` @rdget_next_to_consumez!NamesConsumer.get_next_to_consumersCyk o))$// t44  #; 55 #{1~444a.'/2Cx4"   ; 22  D(("k11K     400==??         A A$ G G    S"BB;PTUUO  #DI . . ./ A . . ."%o"6"6 RRRRkRRRK  $K  S"DDT>O  #DI . . ./ A . . ."%o"6"6 RRRRkRRRK  SRR   #DI . . ./ A . . ."%o"6"6 RRRRkRRRK  SQQ   #DI . . ./ A . . ."%o"6"6 RRRRkRRRKrcrct|tjtjfrUt|p9t|tjot fd|jDSt|tjrt|St|tj sdSt| tj rdSt |rdS|jsdSt|jot|jS)zReturn True if there is a collectively exhaustive set of paths under this `if_node` that define `name`, raise, or return. c3NK|]}t|V dSr)r;)_defines_name_raises_or_returns_recursive)rhandlerrgs rdrzJNamesConsumer._exhaustively_define_name_raise_or_return..sN "KKgrcFT)rrr TryExcept TryFinallyr;rallhandlersWithIfrrBreak_defines_name_raises_or_returnsorelse_branch_handles_namebody)rgrs` rd)_exhaustively_define_name_raise_or_returnz7NamesConsumer._exhaustively_define_name_raise_or_returnsd dU_e.>? @ @ GGdSSdEO44$(=   dEJ ' ' W JJ4QUVV V$)) 5 t""5;// 0 0 4  8 8t D D 4{ 511 $)  D00t{CC DrcrIterable[nodes.NodeNG]c:tfd|DS)Nc3K|]v}t|pVt|tjtjtjtjfot|VwdSr) r;rrrrrrrrr)r if_body_stmtrgs rdrz5NamesConsumer._branch_handles_name..s     9 9$ M M 5?E,.%sE!!*--rcc3ZK|]&}t|tjo|j V'dSr)rrrConstr)rrs rdrz@NamesConsumer._uncertain_nodes_in_false_tests..2sL++8U[11H(.6H++++++rc)rrrrrrrrrrr;rrgrrBrtest NamedExprr infer_allradd)rCrrr other_noder all_inferredrs @rdr~z-NamesConsumer._uncertain_nodes_in_false_testss%* <* z58TTJ!zz||:#3#3#5#555%**>*>t*D*D%FF #>  &&z222*/5?;; '!,! ?400L s++ ,+++((   " ": . . .  + / / ; ; ; ;rcrnodes.Statementcg}|D]}|d}tj|tj}|s;|rQ|j}td|jD}td|j D} td|j D} |s| s| rt|jtj r>||jj vr0|j|r| |nt|jtjr>||jj vr0|j|r| |n"tfd|jDrt"|r| ||S)z}Return any nodes in ``found_nodes`` that should be treated as uncertain because they are in an except block. Trhc3JK|]}t|tjVdSrrrrReturn)r try_statements rdrzBNamesConsumer._uncertain_nodes_in_except_blocks..TsB$$!=%,77$$$$$$rcc3JK|]}t|tjVdSrrrelse_statements rdrzBNamesConsumer._uncertain_nodes_in_except_blocks..XsB%%">5<88%%%%%%rcc3K|]V}t|tjo7t|jtjot j|jVWdSr)rrrExprrrris_terminating_funcrs rdrzBNamesConsumer._uncertain_nodes_in_except_blocks..\ss###>5:66D~3UZ@@D-n.BCC######rcc3XK|]$}tj|V%dSr)r;rrg)rrrs rdrzBNamesConsumer._uncertain_nodes_in_except_blocks..usP "KK 7rc)rtrrrrurrrrrrrr finalbodyrrrrr;_check_loop_finishes_via_except) rrrrrother_node_statementclosest_except_handlerclosest_try_excepttry_block_returnselse_block_returnselse_block_exitss ` rdrz/NamesConsumer._uncertain_nodes_in_except_blocks=sa%: /: /J#-#7#7t#7#D#D %*%J$e&9&& "* %//55 2H2O  #$$%7%<$$$!! "%%%&8&?%%%""  ###'9&? ###   ! $6 :J ~4e6FGG&.*?*III*1;;NKKJ$**:6666~4eoFF&.*?*FFF*1;;NKKG$**:6666$6#>  <.sB$!',4rcF)rrrRaiseAssertr AnnAssignrrzrrgrryrget_all_elementsStarredrrrr)rgrrzelts` rdrz-NamesConsumer._defines_name_raises_or_returnssi dU[%, E F F 4 tU_ - -   4;(899   D((4 dEL ) ) $, $ $ 1&99$$C!#u}55(!i!#u'788$SX=M=M#ttt $ dEH % % (,(;(;EO(L(L turcc|D]v}t|rdSt|tjtjfr0tfd|DrdSwdS)zaReturn True if some child of `node` defines the name `name`, raises, or returns. Tc3NK|]}t|V dSr)r;r)r nested_stmtrgs rdrzJNamesConsumer._defines_name_raises_or_returns_recursive..sG#"AA$ TTrcF)r{r;rrrrrrr)rgrres` rdrz7NamesConsumer._defines_name_raises_or_returns_recursives%%''  D<.sO   d " Dn&>&>t&D&D      rcrrloopnodes.For | nodes.WhilerircDtfd|jDS)zAReturn True if `other_node_try_except` is a descendant of `loop`.c3JK|]}|up|VdSrr)rloop_body_statementrs rdrz[NamesConsumer._check_loop_finishes_via_except.._try_in_loop_body..sW($'<<H&001FGGrc)rr)rrs` rd_try_in_loop_bodyzHNamesConsumer._check_loop_finishes_via_except.._try_in_loop_bodysA,09 rcT)rrrrrir) rrrrrWhilerrrrnode_ancestorsrr;+_recursive_search_for_continue_before_break)rr closest_loopinner_else_statement break_stmtrancestor loop_stmts` rdrz-NamesConsumer._check_loop_finishes_via_excepts.%+ 5  1$EK8P Q Q   5    "."5       5$9$@   . << 1   5    ! !6 EE (7799  hEK(@AA(()>IIu%*  IHH:   4urcrer nodes.Breakc||urdSt|tjrdS|D]G}t|tjtjfr)t ||rdSHdS)zReturn True if any Continue node can be found in descendants of `stmt` before encountering `break_stmt`, ignoring any nested loops. FT)rrrContinuer{rrr;r)rerrns rdrz9NamesConsumer._recursive_search_for_continue_before_breaks :  5 dEN + + 4&&((  E$EK 899 HHz tt urcc`g}tj|tj|S|D]}|d}|urtj|tj\}B|jvrLtfdj Dsn| ||S)zReturn any nodes in ``found_nodes`` that should be treated as uncertain. Nodes are uncertain when they are in a try block and the ``node_statement`` being evaluated is in one of its except handlers. NTrhc3VK|]#}jvp|vV$dSr)rr)r&other_node_try_ancestor_except_handlerrother_node_try_ancestors rdrz]NamesConsumer._uncertain_nodes_in_try_blocks_when_evaluating_except_blocks..2s^;'*A*JJ;9)88::;rc) rrrrurt-get_node_first_ancestor_of_type_and_its_childrrrrr)rrrrr%other_node_try_ancestor_visited_childrrs @@rdrzJNamesConsumer._uncertain_nodes_in_try_blocks_when_evaluating_except_blocks s/1!&!F E/" "  " )" "% / /J#-#7#7t#7#D#D #'=== C$eo '5'.5.344?V>^     " ": . . . .rccvg}tj|tj\}|S|jvr|S|D]}|d}tj|tj\}}|=||jvrG|ur!tfd|jDsl|||S)NTrhc3JK|]}|up|VdSrr)rother_node_final_statementclosest_try_finally_ancestors rdrz^NamesConsumer._uncertain_nodes_in_try_blocks_when_evaluating_finally_blocks..esZ 3 /2NN1;;4rc) rrrrrrtrrr) rrr%child_of_closest_try_finally_ancestorrrother_node_try_finally_ancestor(child_of_other_node_try_finally_ancestorrs @rdrzKNamesConsumer._uncertain_nodes_in_try_blocks_when_evaluating_finally_blocks=s7/1  ? E,   ( 1 ( /" " 1/9 : :# "% / /J#-#7#7t#7#D#D C$e&6 /8/696;<< 07SSS 7V6_ T  " ": . . . .rcN)rrr8rhrir<)rirh)rirV)rir)rir6)rgrhr_r`rir<)rrrirf)rgrhrrrir)rgrhrrrir)rr`rrrir`)rr`rrrrrir`)rrrrrir)rerrrrir)rr`rrrir`)r\r]r^r_rDrUrYpropertyr4r5r7r8rer staticmethodrrr~rrrrrrrrbrcrdr;r;/sH[[???? """"'''X'%%%X% / / /X /'''X' & & & &YYYYv'D'D'D\'DR    \  6666pDDD\DL\2\"FFF\FP\&---\-^222\222rcr;c @eZdZdZdZeZddddddfd d d d d dfddddddfddddddfddddddfded d ddfddddddfddddd dffZdˈfd% Z e j d&dd)Z dd*Z dd,Ze j d-d.d/d0d1d2d3d4dd5Zdd7Zdd8Zdd:Zdd<Zdd>Zdd?ZddAZddBZddDZddEZddGZddHZeZeZe j dIdJdKdLd/ddNZddPZddRZ ddTZ!e j dUddWZ"e j dUddXZ#dd\Z$ddaZ%ddhZ&e j diddkZ'e j diddmZ(e j dndodpdqddsZ)dduZ*ddvZ+ddwZ,ddyZ-dd{Z.e/dd|Z0e/dd~Z1e/ddZ2e3ddZ4e3ddZ5e3ddZ6e3ddZ7ddZ8e3ddZ9e3ddZ:ddZ;ddZddZ?ddZ@ddZAddZBe3ddZCddZDddZEddZFddZGe3ddZHddZIddZJddZKddZLddZMddZNddZOddÄZPddńZQddȄZRe j d-d3ddʄZSxZTS(r|aBaseChecker for variables. Checks for * unused variables / imports * undefined variables * redefinition of variable from builtins or from an outer scope or except handler * use of variable before assignment * __all__ consistency * self/cls assignment variablesz init-importFynzzBTells whether we should check for unused import in __init__ files.)defaulttypemetavarhelpzdummy-variables-rgxz;_+$|(_[a-zA-Z0-9_]*[a-zA-Z0-9]+?$)|dummy|^ignored_|^unused_regexpzzYA regular expression matching the name of dummy variables (i.e. expected to not be used).zadditional-builtinsrbcsvzzList of additional names supposed to be defined in builtins. Remember that you should avoid defining new builtins when possible. callbacks)cb__cbz z|List of strings which can identify a callback function by name. A callback name must start or end with one of those strings.zredefining-builtins-modules)z six.movesz past.builtinszfuture.builtinsbuiltinsiozQList of qualified module names which can have objects that can redefine builtins.zignored-argument-namesz:Argument names that match this expression will be ignored.zallow-global-unused-variablesTzGTells whether unused global variables should be treated as a violation.zallowed-redefined-builtinsz(List of names allowed to shadow builtinslinterr$rir<ct|g|_g|_g|_ d|_dSNF)superrD _to_consume_type_annotation_names_except_handler_names_queue_postponed_evaluation_enabled)rCr __class__s rdrDzVariablesChecker.__init__sK    0213#  ( 2-2***rcr)r nodes.ForcXt|jtjsdS|jj}t j|j}t|tsdS| |}|sdSt|tj j rIt|dkrtd|DrdStd|DrdSt|t|kr+t!||}||||||dSdS)Nc3FK|]}t|jdkVdS)rN)relts)rxs rdrz-VariablesChecker.visit_for..s/(J(JaQV)9(J(J(J(J(J(Jrcc3JK|]}t|tjVdSrrrrrrrzs rdrz-VariablesChecker.visit_for..s.KK:fem44KKKKKKrc)rrrzrr0r rrrr_nodes_to_unpackrnobjects DictItemsrrrr_report_unbalanced_unpacking)rCrryrrdetailss rd visit_forzVariablesChecker.visit_fors3$+u{33  F+"#DI..(J//  F&&x00  F h 9 : :  7||q  S(J(J6(J(J(J%J%J KK7KKKKK  w<<3v;; & &/h??G  - -dHgvw W W W W W ' &rcc0||dSr_store_type_annotation_namesrCrs rd leave_forzVariablesChecker.leave_for ))$/////rc nodes.Modulec@t|dg|_t||_|jD]Y\}}t j|r@||ds|dkr;| d||dZdS)zoVisit module : update consumption analysis variable checks globals doesn't overrides builtins. rurr_rargsrN) r;rrrrprr is_builtin _should_ignore_redefined_builtin add_message)rCrrgrs rd visit_modulezVariablesChecker.visit_module s*$99:-LT-R-R*;,,.. P PKD%%% P88qBBdiFWFW  !44eAh OOO  P Prcrrrrrrrrctt|jdksJ|||jj}d|jvr||||||jj j s |j rdS| |g|_ dS)zLeave module: check globals.r[__all__N)rr_check_metaclassespopr4rp _check_all_check_globalsrconfig init_importpackage_check_importsr)rCrrs rd leave_modulezVariablesChecker.leave_modules4#$$)))) %%%'++--8  # # OOD, / / / L))){!- $,  F L)))&(###rcnodes.ClassDefcV|jt|ddS)z2Visit class: update consumption analysis variable.classNrrr;rs rdvisit_classdefzVariablesChecker.visit_classdef5s)  dG < <=====rcc|tjD]}t|jtjrt|jjtjrt|jjjtjrV|jjj}|j D]=}|j |j vr-| |j |j |j n>|j dS)z2Leave class: update consumption analysis variable.N)rrNamerrrrr Attributeexprrrgr4rer%)rCrrhidden_name_nodeconsumers rdleave_classdefzVariablesChecker.leave_classdef9s,,UZ88  I9+UZ88 y/4eoFF y/495:FF  $-#3#8#= $ 0H',0CCC 11,1$/0@0EF D rc nodes.LambdacV|jt|ddS)z3Visit lambda: update consumption analysis variable.lambdaNr0rs rd visit_lambdazVariablesChecker.visit_lambdaMs)  dH = =>>>>>rc_c8|jdS)z3Leave lambda: update consumption analysis variable.Nrr%rCr=s rd leave_lambdazVariablesChecker.leave_lambdaQ rcnodes.GeneratorExpcV|jt|ddS)z4Visit genexpr: update consumption analysis variable. comprehensionNr0rs rdvisit_generatorexpz#VariablesChecker.visit_generatorexpV)  dO D DEEEEErcc8|jdS)z4Leave genexpr: update consumption analysis variable.Nr?r@s rdleave_generatorexpz#VariablesChecker.leave_generatorexpZrBrcnodes.DictCompcV|jt|ddS)z5Visit dictcomp: update consumption analysis variable.rENr0rs rdvisit_dictcompzVariablesChecker.visit_dictcomp_rGrcc8|jdS)z5Leave dictcomp: update consumption analysis variable.Nr?r@s rdleave_dictcompzVariablesChecker.leave_dictcompcrBrc nodes.SetCompcV|jt|ddS)z4Visit setcomp: update consumption analysis variable.rENr0rs rd visit_setcompzVariablesChecker.visit_setcomphrGrcc8|jdS)z4Leave setcomp: update consumption analysis variable.Nr?r@s rd leave_setcompzVariablesChecker.leave_setcomplrBrcrc6|jt|d|jds|jdsdS|j}|D] \}}||vrt|tj s||d}t|tj r|j tkr]td||Dr}|j}|||s|d||f|t%j|rB||s-||s|d|| dS)zFVisit function: update consumption analysis variable and check locals.functionrrNrc34K|]}t|VdSr)r)r definitions rdrz5VariablesChecker.visit_functiondef..s<;E*:66rcr)rrr;ris_message_enabledrglobalsrrrrrrsrmrtrr_is_name_ignoredr rr_allowed_redefined_builtinr)rCrglobsrgrerWlines rdvisit_functiondefz"VariablesChecker.visit_functiondefqs  dJ ? ?@@@ K * *+A B B {--.ABB  F #**,, L LJD$u}}Zel%C%C}"4[^ z5+;<<"*f44INt!,,,T488$$.dD\%  && L77== L==dCC L   !44d KKK; L Lrcc |||jr||j|jr|jD]}|||jj}|jds6|jds|jdsdStj |rdS| }|r| rdSt|tj}t|tj}t%}|tjD]=}|jD]3} tj| jD]} || 4>|D]%\} } || || d|||&dS)z5Leave function: check function's locals are consumed.rr&rNr)r$type_comment_returns_store_type_annotation_nodetype_comment_argsrr%r4rrXris_error is_method is_abstractrrrrrlrComprehensionScope generatorsfind_assigned_names_recursiverzrr_check_is_unused) rCrargument_annotationrrdrnonlocal_namescomprehension_target_namescomprehension_scope generatorrgrs rdleave_functiondefz"VariablesChecker.leave_functiondefs: %%%  $ H  , ,T-F G G G  ! F'+'= F F#001DEEEE'++--8 K * *+< = = {--.HII {--.?@@  F >$    FNN$$  ))++  F-d.A.A%,.O.OPP /0C0CEN0S0STT/2uu"#'#6#6u7O#P#P 9 9 0; 9 9 !? @PQQ99D.22488889 9(--//  KD%  ! !a*       rcr r rr nodes.Globalc|d}t|tjr|d|t dS|}d}|j}|j D]`} | |}n#tj $rg}YnwxYwtd||dD }tj||s8tj||s#|r!|d||t d }|D]} t| tjr(| j|jvr|d || nn| d|urnTt| tjtjfr | j|urn#|r |d ||t d }b|r|d|t dSdS)z0Check names imported exists in the global scope.Trhrr confidenceNc3bK|]*}t|tjtjfV+dSr)rrrrrs)rlocals rdrz0VariablesChecker.visit_global..sJ4455<1A"BCC444444rcrbr rrrsFrrr r)rrrrrr rrrrprrrn NotFoundErrorrrqris_reassigned_after_currentis_deleted_after_currentrrgspecial_attributesrrr) rCrrrudefault_messagelocals_rg assign_nodesnot_defined_locally_by_importanodes rd visit_globalzVariablesChecker.visit_globals~ $ '' eU\ * *    5DT  R R R F**,,%J2 ,2 ,D "%~~d33 ( " " "!  "1444$[[r2244411- ) 5dDAA 6tTBB 2    2# ! #(% , ,ue&677 f&???$$%8t$$OOOE;;d;++v55Euu~u7H&IJJ ..E0,$$3!!#' % ',O  M   /dt  L L L L L M Ms B  B43B4nodes.AssignNamect|tjr||dSdSr)rrrrr visit_namers rdvisit_assignnamez!VariablesChecker.visit_assignnamesD d&&((%/ : : " OOD ! ! ! ! ! " "rc nodes.DelNamec0||dSr)rrs rd visit_delnamezVariablesChecker.visit_delnames rc-nodes.Name | nodes.AssignName | nodes.DelNamec|d}|j0|jdrJdS|||||dS)zDon't add the 'utils.only_required_for_messages' decorator here! It's important that all 'Name' nodes are visited, otherwise the 'NamesConsumers' won't be correct. TrhNz.py)rtrrfileendswith"_undefined_and_used_before_checker _loopvar_name)rCrres rdrzVariablesChecker.visit_namesy ~~T~** ? "yy{{'0077 7 77 F //d;;; 4     rcrnodes.ExceptHandlerc(|jrt|jtjsdS|jD]@\}}|jj|jkr&|d|j|jf|nA|j||jfdS)Nrr)rgrrrrrr rr)rCr outer_exceptouter_except_assign_names rdvisit_excepthandlerz$VariablesChecker.visit_excepthandler(sy  49e6F G G  F6:6V   2L2y~!9!>>>  *279PQ!  ? (//ty0ABBBBBrcc|jrt|jtjsdS|jdSr)rgrrrrrr%rs rdleave_excepthandlerz$VariablesChecker.leave_excepthandler8sBy  49e6F G G  F (,,.....rcrrercV|}t|jdz }|j|j}t |ddD]}|j|}|||||kr+||||||\}} | r0| |j|jz } | |j| |tj ur|tj urdS|jtjjvst!j|js|j|jjjvss|jdkr+t+d|DsAt!j|t0s%|d|j|dSdSdSdSdSdS)Nr[rrc3rK|]2}t|tj|V3dSr)rrrrrdris rdrzFVariablesChecker._undefined_and_used_before_checker..esQ!!U%677KKMMrcrr)rrrr8range_should_node_be_skipped_check_consumerr7rgrerZr`rarr scope_attrsrrrr(additional_builtinsrrnode_ignores_exception NameErrorr ) rCrrer start_indexbase_scope_typercurrent_consumeractionnodes_to_consumes rdrz3VariablesChecker._undefined_and_used_before_checker>s $*++a/ *;7B{B++  A#/2 ++D2BADTUU '+';';dE#3_(( $F$  O !$4$G $RR  11$)=MNNN4===4;;;< I1 1 1 ** 2yDK.BBB [((!0022).tY??)   1   M M M M M 2 1 1 1BB((((rcr7r;is_start_indexrc|jdkrytj|j|s|s||rdSt |jtjr&t |jjtj rdSnO|jdkr| ||jrdS|jdkrtj ||jrdSdS)zTests a consumer and node for various conditions in which the node shouldn't be checked for the undefined-variable and used-before-assignment checks. r/TrUr;F) r8ris_ancestor_namer_ignore_class_scoperrrrKeywordr_defined_in_function_definitionis_default_argument)rCrr7rs rdrz(VariablesChecker._should_node_be_skippedns  ' ) )%hmT:: " '+'?'?'E'E t$+u}55 * "EN;; t  J . .43W3W (-4 4 . 4  H , ,1J (-2 2 ,4urcrrzrrrh=tuple[VariableVisitConsumerAction, list[nodes.NodeNG] | None]c " |j|jvrVtj|jst |t js#||tj dfS| |}|tj dfS|sY|j|j vrt}nt}|d|j||tj |j |jfS||tj|d}|d} | d} || uo>| |o)t | t jo|j| jk} | rntj|t jrOtj|r-|j| urtj dfS||||| || || \} } }|rtj dfS| r tj|st;j|| ds| |uo%t |t jt j f}| s|s| st | t j!rtj"|tFsw|j$rQt |t j%t j&t j'fr |j|(j)vs|rtj |gfStj dfSnT|dkr|j$r&t |t j%t j&fsjt |t j%rtj|t j&s1|d|j|ttj |fSn|dkr[t |t jrA|j|j)vr3|j*| j*kr#|d|j|tnR|+|| r|j),|jr$|d|j|tn#|d |j|ttj |fSt | t jr|-|| |St |t j.rkt |jt j/rL|0||jr1|d |j|tbtj |fStj |fS) z>Checks a consumer for conditions that should trigger messages.NrrvrTrh)rr;r)2rgr5ris_func_decoratorrrrrrf_check_late_binding_closurerZrarr`r7rrr  assign_parentrtrrrrLambdarrr_is_variable_violationis_defined_beforern are_exclusiveDelNamerDeleterrrrrrrrpr_is_only_type_assignmentrq_is_first_level_self_referencerIfExp_is_never_evaluatedr)rCrrerrrrrsdefnodedefstmtris_recursive_klassmaybe_before_assignannotation_returnuse_outer_definitiondefined_by_stmts rdrz VariablesChecker._check_consumers 9(1 1 1&'7'<== BZe.FF B006663:DAA&::4@@  /8$? ? y,???) !   (Y%    ,2 3DI>  ((...%k!n55##4#00===-- X  +""4(( +8U^44 + X]*   >5dELII >-d33  > ::<<&,,..h>>(06= =  ' '              @/8$? ? b M+D11b M)$HHb M &o*u}e&6733O#@ "@ %@ gu|44 @  3D)DDL:L& % % 1 %L!I);;;*R$?$H4&#QQ ; DdKK H,, 6 M"4%/5;L)MNN MtU_55 M =dEDUVV M$$0!Y!#' % 8> LL H,,uen55  U\117+===$$0!Y!#' % * *4 9 9 Mzz||"&&ty11   ,494TX!  (tytPT!06 D D  0 0 M66tWkRR R  1 1 M'.%+66 M++GW^DDM$$,!Y!#, % 8> LL+2K@@rcr rc|jstj|rdSt|rdSt |jt jrt|jrdS|j D]\}}| d} tt||d}n#tj$rYPwxYwt |t jso||||dddS)!Check modules attribute accesses.Nrrr[)_analyse_fallback_blocksris_from_fallback_blockrrrrrrrrsplitr~rrn ResolveErrorr_check_module_attrs)rCrrgr=partsrus rd visit_importzVariablesChecker.visit_import`s, 1Md1S1S  F !$ ' '  F dk58 , , dk1J1J  Fz > >GD!JJsOOE 0uQx@@AA'    fel33   $ $T659 = = = = > >s#B**B<;B<rfc(|jstj|rdSt|rdSt |jt jrt|jrdS|j d} | |d}n#tj $rYdSwxYw||||dd}|sdS|jD]6\}}|dkr |||| d7dS)rNrrr[r)rrrrrrrrrrrmrrlrnrorr)rCr name_partsrurgr=s rdvisit_importfromz!VariablesChecker.visit_importfromwsC, 1Md1S1S  F "$ ' '  F dk58 , , dk1J1J  F\'',,  **:a=99FF/    FF ))$ 122GG  Fz D DGD!s{{  $ $T64::c?? C C C C D Ds?BB.-B.r r#r'unbalanced_dict_unpackingrc||t|jdtjtjfsdS|jd}td|DrdS tj |j }|| |||dSdS#tj $rYdSwxYw)zCheck unbalanced tuple unpacking for assignments and unpacking non-sequences as well as in case self/cls get assigned. rNc3JK|]}t|tjVdSrr r s rdrz0VariablesChecker.visit_assign..s.GGVz&%-00GGGGGGrc)_check_self_cls_assignrrryrr0r+iteredrrrr_check_unpackingrnInferenceError)rCrryrs rd visit_assignzVariablesChecker.visit_assigns ##D)))$,q/EK+DEE  F,q/((** GGwGGG G G  F ' 33H#%%hg>>>>>$#%    FF s2B::C  C nodes.ListCompcV|jt|ddS)z5Visit listcomp: update consumption analysis variable.rENr0rs rdvisit_listcompzVariablesChecker.visit_listcomprGrcc8|jdS)z5Leave listcomp: update consumption analysis variable.Nr?r@s rdleave_listcompzVariablesChecker.leave_listcomprBrcc0||dSrrrs rd leave_assignzVariablesChecker.leave_assignrrc nodes.Withc0||dSrrrs rd leave_withzVariablesChecker.leave_withrrcnodes.ArgumentscD|jD]}||dSr)rbra)rCr annotations rdvisit_argumentsz VariablesChecker.visit_argumentss50 9 9J  , ,Z 8 8 8 8 9 9rcc>t|jjjSr)rrr(analyse_fallback_blocksrXs rdrz)VariablesChecker._analyse_fallback_blockssDK&>???rc Iterable[str]c$|jjjSr)rr(ignored_modulesrXs rd_ignored_modulesz!VariablesChecker._ignored_moduless{!11rcc>t|jjjSr)rrr(allow_global_unused_variablesrXs rd_allow_global_unused_variablesz/VariablesChecker._allow_global_unused_variablessDK&DEEErccd}t|tjr|d|ur||jjvp7||jjvp)||jjvp||jjup ||jj upd|j |pJ|j o|j |p)|j o"||j up|j |}|S)NFTrh) rrrrrtrrposonlyargs_annotationskwonlyargs_annotationsvarargannotationkwargannotationr decoratorsreturns)rr%in_annotation_or_default_or_decorators rdrz0VariablesChecker._defined_in_function_definitions16- ue/ 0 0 d++u44EJ22:uzAA:uz@@:uz:::uz99 :''-- $I)9)C)CD)I)I MQ.O%-2I2I$2O2O 254rcc6|}|j}|||urdSt|tjr ||jurdSt|tjr ||jurdSt|tjr|jr||jdusdS|}|j}|dS)zReturn True if node within a lambda/comprehension body (or similar) and thus should not have access to class attributes in frame. NFTr) rrrrrr Comprehensionrrfrg)rrrnrs rd _in_lambda_or_comprehension_bodyz1VariablesChecker._in_lambda_or_comprehension_bodys u&%,// E4L4Lt&%"566 5 ;S;St&%":;; ! &+v/@/C&C&CtE]F! "urcrrrrrtuple[bool, bool, bool]c d}d} d} ||urt||}n"|j0j|jvst jjdrd}nt |tjp-t dtj ot} | sV| jdr$d}||kot tj } n<j|jvr.t!fd|D }|dkrtt |tjrZj|jvrLt tjo.jvo%|jjdj|jk }nt |tjrt |tjr|jurZ||jr@d} |jj|jvr)|jjdj|jkrd}nd}t jtjr|j|jk}n|rd}n|o|j|jk}|r|j|jkrt |tjr!||ur|r||urd}n_t |t2r;t4|r!||ur|r||urd}nt tjr||ur||r||ur؉jjkrjjksjjksrt<sjjkrt |tjtj tj!tj"frUt |j#tj$r6j#up,t!fd%D}t |tj&tj'frt |jtj(rtS|rtSs|j} tUj+tj } | rtUj+| tjsu| }|s^| ,r&tUj-j| j.d}n t!fd | j.D}|sd}|| | fS) NTFr[rhc3hK|],}t|tjo j|jvV-dSrrkrms rdrz:VariablesChecker._is_variable_violation...sQ..uen55R$)u{:R......rcr;rc3*K|] }|juVdSr)r)rancrs rdrz:VariablesChecker._is_variable_violation..sCGG14w},GGGGGGrcc3LK|]}tjj|VdSr)r is_definedrg)rcontentrs rdrz:VariablesChecker._is_variable_violation..sF55$+!& 0G D D555555rc)/rrrgrrnbuiltin_lookuprrrrrrrrlookuprrprr{rrdefaultsrrrrNODES_WITH_VALUE_ATTRr| _maybe_used_and_assigned_at_oncer col_offsetrrrrrr JoinedStrrrrsrrrrhas_elif_blockrr)rrrerrrrrrrr forbid_lookupdefstmt_parentmaybe_annotationused_in_branchdefined_in_or_elses`` rdrz'VariablesChecker._is_variable_violations0#!$  "6tUH"M"M   _ $ X111)$)44Q72',#5%"344Edjjj55u|DD*$D)) ! X]]__%;%;DI%F%Fq%I &+#'+w(zU0@@<$$ho--*-....!)!6!6!8!8...++'# x ' '5%.11 ( U\))7EO44OG,,OL+A.9G>2(II'RR2)) **400* +0''')) **400*$Ndk99 ' 2T_ D D#NT[88 !* 9 !($+ = = * '$)L$)O$)O$)L !"!!!>!+7=%/ J J!>&+2-4*?+3GGGG8<8K8K8M8MGGGDD'7U\53C$DEE 7w~ux88 7+733 7/t44 7 ")#(#H%/$$ %7=(%*;7&4%=%=d%C%CN) 7)88::161A $ >+@+C22..255555/=/D55522. 2726/"$57KKKrcct|tjrtd|jDSt|tjrdSt|jtjr#td|jjDS|j}t|tjrdSt|tj r!t|j tjrdSt|tj r td|j DrdSt|tj sdStd|tj DS)zeCheck if `defstmt` has the potential to use and assign a name in the same statement. c3$K|] }|jV dSr)guard)rcases rdrzDVariablesChecker._maybe_used_and_assigned_at_once..s$<.scc#8EK;U#UVV AA#FFrcc3K|]D}t|dtjpt|dtjVEdS)rr[Nrrrr)ritems rdrzDVariablesChecker._maybe_used_and_assigned_at_once..s[1 1  tAw , , P 47EK0P0P1 1 1 1 1 1 rcFc3K|]}td|jDp`td|jDpBt|jt jo#t|jjt jVdS)c3TK|]#}t|jtjV$dSr)rrrrr)rkwargs rdrzNVariablesChecker._maybe_used_and_assigned_at_once...s0PP 5; 44PPPPPPrcc3JK|]}t|tjVdSrr)rargs rdrzNVariablesChecker._maybe_used_and_assigned_at_once...s.EEC:c5;//EEEEEErcN) rkeywordsrrrrrr4r5r)rrs rdrzDVariablesChecker._maybe_used_and_assigned_at_once..s   PP$-PPP P P EE49EEEEE 49eo66<ty~u{;;       rc)ry)rrrrrcasesrr BaseContainerr rrr*rrr)rrs rdrz1VariablesChecker._maybe_used_and_assigned_at_onces gu{ + + =<>      rcc t|tjr|jrdSj|jjjvstj jrdS| d} d}}||j urv| }| tjD]z}||urtfd| tjDr;tfd| tjDrdS{|jjg}|D] ||kr jjkrn{t j tjr j jrOt j tjr-t fdDsdS|j }||j uvdS)z>Check if variable only gets assigned a type and never a value.FTrhc34K|]}j|jvVdSr)rgr)rnlrs rdrz. s@I)rcc38K|]}j|jkVdSrr)ranrs rdrz. s@I(rcc34K|]}|jjuVdSr)rr)rrref_nodes rdrz. s>9<x44rc)rrrrrrgrr(rrrrrrrrrrlrrprqrrr) rCrr defstmt_frame node_framerr inner_func local_refsr%s ` @rdrz)VariablesChecker._is_only_type_assignmentsg'5?33 w} 5 9 *> > >%BR IC C >5 T 22 ZZtZ,, M000!<<>>L+99%:KLL ! ! --(77GG!(778HII!!55%,00B??J& ! ! !J..8?T[3P3PE#8?EODD !, !x@@ !@D@S@S@U@U !!55!(FWM000Xtrcrr`c|dj|kr|d|dkrtj|r0tj|st jdfSt jdfSt|jtj r2t|jjtj rt jdfSt j|fS)zCheck if a first level method's annotation or default values refers to its own class, and return a consumer action. TrhN) rrrtr"is_node_in_type_annotation_contextrrZr`rarrrrr)rrrs rdrz/VariablesChecker._is_first_level_self_reference' s ::T: " " )W 4 4:H: : ZZtZ $ $:%:% 7== B sp()<== mU[ 1 1 "d**w.:O/O/Ot"e++>;N0N0Nturccz|j}|d}|||}t j||}|s|r|jj}n|j}t|tj s|o| || o||v S)aReturn True if the node is in a local class scope, as an assignment. Detect if we are in a local class scope, as an assignment. For example, the following is fair game. class A: b = 1 c = lambda b=b: b * b class B: tp = 1 def func(self, arg: tp): ... class C: tp = 2 def func(self, arg=tp): ... class C: class Tp: pass class D(Tp): ... Trh) rgrtrrrrrrprrrrr)rCrrgrrin_ancestor_list frame_localss rdrz$VariablesChecker._ignore_class_scopeM s0yd++1133040T0T %1 1 -!1%>> 0 (4D ( <--//6LL .x s'TTT'!]:S:ST!TTTrcr[c3fK|]+}|V,dSr)rr)rasmtrs rdrz1VariablesChecker._loopvar_name.. sJ3 3 .2DJJLL " "5 ) )3 3 3 3 3 3 rcrTrhrrztyping._SpecialFormzbuiltins.enumerater r)>tDD 5GGRaRjG ,, ! !GAtay""$"//99 .vay/B/B$/B/O/OQUVV  NN4  v;;!   F&&(( v 5+>@RS T T    --T^^4^5P5PPP F&%),,    6TYT  R R R F  IEL%+u{ENS )UZ00 Z66 !& 01E F F }e.?@@%-',&6}7L&M&MO!'):)//116(6%6.6 #?ENCC+11337LLL.D s'HH5$%------HHrcr& imported as import rr imported from  as rc3.K|]}|jkVdSrr)rrcrgs rdrz4VariablesChecker._check_is_unused..g sBDD#$$DDDDDDrc)#rZrrrrrrprrrrsrrargnamesrgrr{r7_check_unused_argumentsrrr0rrr~rrr rmrris_overload_stubrurrr3)rCrgrrerrkrlrU is_init_defrcr?r import_names message_namemsgs ` rdriz!VariablesChecker._check_is_unused s%  t , ,  F tU. / /  ##DK ,--224;{3A6GG3 F dU\5<9IJ K K   6t\ J J  - - - F 4. . . F==?? 8  yI%%# 1133A")!V"4"4"O!&J:NK"F  ( (tT8^ T T T T T{ z elEOU[%)T   >))F! !EF$u/? @AA +tz??Q&&#'HHHHDJHHH$$$LL$(:a=L+$0ME6!?UD*4>> 19 dEL11)!&==V==...$$_3T$JJJFdE$455)!&QQt|QQQQ!%DDdlDD$$_3T$JJJF0 $ 122 t %d++ $+u':;; DDDD(, (B(B5:(N(NDDDAA    \4  @ @ @ @ @rc&re.Pattern[str] | re.Match[str] | Nonec |jjj}t|tjrt|jtjst|tjr|jjj}n|}|o| |Sr) rr(dummy_variables_rgxrrrrrrignored_argument_namesmatch)rCrergauthorized_rgxregexs rdrZz!VariablesChecker._is_name_ignoredn s+? tU- . . #4;88 #$00 # &*[%7%NEE"E*T***rcrU list[str]c}jd}|r=t|tjr#t j|rtnt}nt}|rfj dkr||dkrdSt|j } | || vrdSj t jvr j dvrdSt!fd|jjjDrdSt jrdSt jrdSt j|rdS||vrdS|d|||dS) NTrhrr)rDrNc3K|]8}j|pj|V9dSr)rgrr)rcbrs rdrz;VariablesChecker._check_unused_arguments.. s\   I  $ $ > (:(:2(>(>      rcrrv)rdrrrrrrrhas_known_basesrrrrrrgrU PYMETHODSrrr(r(is_registered_in_singledispatch_functionrWis_protocol_classr ) rCrgrrerUrkrdryrs overriddens ` rdrVz(VariablesChecker._check_unused_arguments sNN$$  !!!..  E5>:: "2599P ?P JJ  yN**tx{/B/B*5$)< ! ! F *DZXXXXXrcc|jdsdS|d}tj||r|jd}t |tjtj fr|j |j vrdS| |j \}}|r| |sdStj|r|d||j dS|d}|}|rCt |tjs)||urdS|j}|rt |tj)|r}| |rjtj|sX|jrSt |dtjs'|d||j dSdSdSdSdSdS)a:Check whether node is a cell var that is assigned within a containing loop. Special cases where we don't care about the error: 1. When the node's function is immediately called, e.g. (lambda: i)() 2. When the node's function is returned from within the loop, e.g. return lambda: i r%NTrhrrr)rrXrrrrrrrrrrgrprris_comprehensionr ris_being_calledrtr)rCr node_scope assign_scoperassignment_node maybe_fors rdrz,VariablesChecker._check_late_binding_closure s>{--.BCC  FZZtZ,,   $T: 6 6 >#*000==J: e6G'HII yJ--- F"kk$)44 e L22:>>  F  !, / / V   149  M M M M M$AhO'I VJy%)$D$D V ,,E%,  VJy%)$D$D V V!++J77V"1*==V#) V 'z';';4';'H'H%,WW V$$%949$UUUUUVVVVVVVVVVrccjt|tjsdS|j|jjjvSr)rrrrsrmrr(redefining_builtins_modules)rCres rdrz1VariablesChecker._should_ignore_redefined_builtin s1$ 011 5|t{1MMMrcc(||jjjvSr)rr(allowed_redefined_builtins)rCrgs rdr[z+VariablesChecker._allowed_redefined_builtin st{)DDDrcctj|tj}|duo(|d|S)z]Return True if a ComprehensionScope intervenes between `node` and its frame. NTrh)rrrrfrr)rclosest_comprehension_scopes rdr}z6VariablesChecker._comprehension_between_frame_and_node sZ ',&K %*' ' #+$614::. s5+ + *JO+ + + + + + rc)rrrr3rrrgr4rar5 Subscriptr TYPING_MODULEextendr)rCrzs rdraz,VariablesChecker._store_type_annotation_node s4 ouz 2 2   ' . ./C D D D F ou 7 7   , ,_-A B B B F/5?;;  F ,eo > > ?05uzBB  %*/=@@  ' . .} = = = F #**+ + .=.L.LUZ.X.X+ + +      rc%nodes.For | nodes.Assign | nodes.WithcP|j}|sdS||jdSr)rzra)rCrrzs rdrz-VariablesChecker._store_type_annotation_names s6.  F (()=>>>>>rcct}|jD]u}t|tjr||j7t|tjr$|d|j Dv| }td|j D}|r+| j }t|tjr*|rd|vsdS|}|sdS|d}||vr|d||fdSdS)z'Check that self/cls don't get assigned.c3XK|]%}t|tj|jV&dSr)rrrrrgrs rdrz:VariablesChecker._check_self_cls_assign.." sJ$$!$z#uGW7X7X$H$$$$$$rcc3NK|] }t|tj|V!dSr)rrrrl)rrns rdrz:VariablesChecker._check_self_cls_assign..& sG' ' Zu~-N-N' ' ' ' ' ' ' rczbuiltins.staticmethodNrr'rm)rryrrrrrrgr0updater rrrrrrddecoratornamesrUr )rCr assign_namesrzrnonlocals_with_same_nameargument_names self_cls_names rdrz'VariablesChecker._check_self_cls_assign s(+ l  F&%"233   ----FEK00 ##$$(. $$$ #&' ' $z' ' ' $ $   $ 0JJLL'--//E ue/ 0 0 !! (u/C/C/E/EEE F))  F&q) L ( (   2]DT  U U U U U ) (rcrrrycjtj|rdStj|rdSt|tjrdSt|jtjr;t|j tj r|j j |jj krdS| |}t||}|=t|t|kr||||||dSdStj|s|||dSdS)zRCheck for unbalanced tuple unpacking and unpacking non sequences. N)ris_inside_abstract_classrnrrrUninferableBaserrrrr3rgvarargrrrr is_iterable_report_unpacking_non_sequence)rCrrryrrs rdrz!VariablesChecker._check_unpacking9 sH  )$ / /  F  !$ ' '  F h 4 5 5  F x 8 8 4:uz22  8?#999 F&&x00+D(;;  7||s6{{**11(GVW+* "8,, ?  / /g > > > > > ? ?rcrfcPt|tjtjftzr|St|t jrItd| Drd| DSdS)z/Return the list of values of the `Assign` node.c3FK|]}|dkVdS)ztyping.NamedTupleN)r?)rrs rdrz4VariablesChecker._nodes_to_unpack.._ sC6 6 8@HNN   3 36 6 6 6 6 6 rccFg|]}t|tj|Srb)rrrrrs rdrKz5VariablesChecker._nodes_to_unpack..b s*PPP! 1e>N0O0OPAPPPrcN) rrrr0r+rrrnr@r ancestorsr)rs rdrz!VariablesChecker._nodes_to_unpackZ s dU[%*5 B C C !;;== dG, - - Q#6 6 DHNNDTDT6 6 6 3 3  QQPt{{}}PPP Ptrcrrc |t|t|dkrdndt|t|dkrdndf}t|trdnd}||||tdS)Nr[rr8r)r )rrrs)rrrrr r)rCrrryrrrsymbols rdrz-VariablesChecker._report_unbalanced_unpackinge s  LLg,,!##BB KKf++""BB  (J// . ' '-  d)LLLLLrccn|r|dsd|}|d||dS)N r#rm)rr )rCrrs rdrz/VariablesChecker._report_unpacking_non_sequence| sL  $7--c22 $#'mmG 17KKKKKrc_base_nodes.ImportNoderu module_namesnodes.Module | NonecX|r|d}|dkrd}n t||d}t |t jsdSnW#tj$r4|j |j vrYdS| d||j f|YdStj $rYdSwxYw||r:|r|j nd}| d|d ||fdSt |t jr|SdS)zCheck that module_names (list of string) are accessible through the given module, if the latest access name corresponds to a module, return it. r__dict__Nr rrrm)r%r~rrrrrrrnrwrgrr rrP)rCrrurrgrms rdrz$VariablesChecker._check_module_attrs s ##A&&Dz!! fnnT2215;;==>>!&%,77 4 (   ;$"77744  'tV[.A!tt)   tt ! $  %+;fkkG   #$chh|6L6Lg5V    4 fel + + MtsAA99C C ;C  C rrct|d}t|tjrdS|dvr)|j|j}}|d|||dSt|ddD]} t| }n#tj $rY7wxYwt|tjrV|j s^t|tjrt|jt"s+|d|||j}||vr||=||jvr|js|d |f|t*j|jd }t*j|d krx|jd z|z} tj| d #t<$r|d |f|Yt>$rYwxYwdS) Nr#> builtins.listbuiltins.tupler)r]rrr rbrrrrrDr) r~igetattrrrrrpytypetolinenorr rrrnrrrrrrhrrpr*ospathsplitextrbasenamergmodutilsfile_from_modpathr ImportError SyntaxError) rCrrassignedr]colrelt_namerrgs rdr&zVariablesChecker._check_all s i0011 h 4 5 5  F ??  $G G G )8+>#D   1SW  X X X F8VR00) !) !C  ,,)    (D$899 ? h 44 J==   !5CMMOORU VVV~H<'' *t{**|!$$0{% "w// ::1=Hw''11Z??#y39 !#,>>tzz#OOOO* ,, 8{QT- +!!!!D !K) !) !s*!B55CC 2H#I: IIdict[str, nodes.NodeNG]c|jrdS|D]#\}}|D]}|d|f|$dS)Nrr)rrr )rCrrgnode_lstrs rdr'zVariablesChecker._check_globals sw  .  F*0022 M MND(  M M  !2$t LLLL M M Mrcct|}t}tjt}|D]\}}|jD]}|dx}} | dkr|}|d} ||vr"||| fvr)||| |jvp| |jv} | o4|jj j o#|jj j | } t|tjs!t|tjry|jsrt|tjrt"| r| s| r| d| } n| d| } t'|s|d| |4t|tjr|jt*krt"| rzt-||r| s| r| dkr$||j|f|| | d|j} n| d|jd | } t'|s|d| ||D]y\}}t3|dkr |d}n2d d |dd Dd |d }|d||df|dz|`dS)Nrrr[rQrPrrrRrSrNc3K|]}|VdSrrbrs rdrz2VariablesChecker._check_imports..5 s" = =q = = = = = =rcrz and r)rrr?rr@rrrrr(r^r`rrrrrsrm SPECIAL_OBJsearchrr rtrwrrrrPr)rCr local_namescheckedunused_wildcard_importsrgrer real_name imported_nameas_nameis_type_annotation_importis_dummy_importr[ru unused_list arg_strings rdr+zVariablesChecker._check_imports s&|44 %%  #D ) ) &D SD SJD$:C SC S,3AJ6 M C'' $I!!*'' 7333 I&&&"T%@@>$"==* N *>N *>DDWMM dEL11-StU%566-S?C|-S"$(899!k>P>P%??! !0!O!!7 77!.FFWFF1$77O((s(NNNe&677SDLF>##(D(,,T488  )-)9$$B$)?  % aA*..tR88 "-J!(EL88 t(<=== $9 %0$6$:$:4$D$D !%:  !$+u|;; EE< M M 000#D))14;-AAA   1TG  L L Lrcnodes.Subscriptcdtj|j}|||dSr)rrslice_check_potential_index_errorrCrinferred_slices rdvisit_subscriptz VariablesChecker.visit_subscript s0)$*55 ))$?????rcrnodes.NodeNG | NonecPt|tjrt|jtsdSt|jtjtjfrDt|jj|jdzkr| d|tdSdS)z,Check for the potential-index-error message.Nr[r(rr) rrrrrintr0r+rr r rrs rdrz-VariablesChecker._check_potential_index_error s .%+66 j  #? ?   F dj5; "; < < 4:?##n&:Q&>>>  +$9! F   rc nodes.Constc|dkrdStj|sdS|j}t |t jr|j}t |t jr;t| d}|tj |drdS t|j }| |dS#t$rYdStj$rYdSwxYw)zTake note of names that appear inside string literal type annotations unless the string is a parameter to `typing.Literal` or `typing.Annotation`. z builtins.strN) AnnotatedLiteral)rrr+rrrrr0r}r~r{is_typing_memberrrra ValueErrorrnAstroidSyntaxError)rCrroriginrs rd visit_constzVariablesChecker.visit_const s ;;==N * * F7==  F fek * * #]F feo . . &--//66F!e&<0''! %dj11J  , ,Z 8 8 8 8 8    DD)    DD s/)C C9'C98C9rr$rir<)rrrir<)rrrir<)rr-rir<)rr9rir<)r=r9rir<)rrCrir<)r=rCrir<)rrJrir<)r=rJrir<)rrOrir<)r=rOrir<)rrrir<)rrprir<)rrrir<)rrrir<)rrrir<)rrrir<)rrrerrir<)rrr7r;rrrir) rrrerrrzrr;rrhrir)rrrir<)rrfrir<)rrrir<)rrrir<)r=rrir<)rrrir<)rrrir<)rir)rir)rrrrrir)rrrrrerrrrrzrrzrrhrrrir)rrrir)rrrrrir)rrrr-rr`rir)rr,r-r.rir)rrrir)rr4rir<)rgrhrrrerrrrkrrlrrir<)rerrgrhrir\) rgrhrrrerrUrcrkrrir<)rrrir<)rerrir)rgrhrir)rrrir)rzrrir<)rrrir<)rrrrryr`rir<)rrrirf) rrrrryr`rr`rrhrir<)rrrrhrir<)rrrurrrcrir)rrrrrir<)rrrir<)rrrir<)rrrir<)ryr-rrrir)rrrir<)rrrrrir<)rrrir<)Ur\r]r^r_rgr1msgsIGNORED_ARGUMENT_NAMESoptionsrDronly_required_for_messagesrrr!r,r1r8r<rArFrIrLrNrQrSr^rovisit_asyncfunctiondefleave_asyncfunctiondefrrrrrrrrrrrrrrrrrr"rrrrrrrrrrrrrrirZrVrrr[r}rarrrrrrrr&r'r+r$rrrr __classcell__)rs@rdr|r|ts    D D  %"     "X %<     "3!     )(1     *3.   " %1 %T     ,%a     )3B    [VGp333333&U%#XXXX@0000 P P P P&U%    )))  )(>>>>(???? FFFF FFFF FFFF &L&L&L&LP,,,,\/.%U%#&  ?M?M?M?MB"""" ! ! ! !&U%&<== C C C>= C&U%&<==///>=/ .N.N.N.N`%%%%PHAHAHAHAT&U%&9::>>>;:>,&U%&9::DDD;:D4&U%$ #    ,FFFF 000000009999 @@@_@222_2FFF_F555\52\8|L|L|L\|L|" " " \" H<<<<|AAA\A,   \ & & & & RNWNWNWNWbeAeAeAeAN++++"3Y3Y3Y3Yj0V0V0V0VdNNNN EEEE 1 1 1\ 1    2????VVVV<????B\MMMM.LLLL ####J3!3!3!3!jMMMMWWWWr ) ) ) )4444l@@@@ &&U% rcr|rr$r<cJ|t|dSr)register_checkerr|)rs rdregisterr s% ,V4455555rc)rerfrgrhrirj)ryrzrgr{rir|)rrrrrirh)rrrrzrrzrir)rrrgrhrir)rrrir)rgrhrrzrir)rerrrrir)rrrir)rrrir)rerrrrirr)`r_r%rr?r>rrresysrcollections.abcrrrenumr functoolsr r(r r r rnr rrr astroid.nodesrastroid.typingrpylint.checkersrrpylint.checkers.utilsrrrpylint.constantsrrrpylint.interfacesrrrr pylint.typingr version_infor"astroid.decoratorsr# pylint.lintr$compilerrtrrrAr~ frozenset TYPING_NAMESr DictValuesDictKeysr node_classesr*rrrrrrrrrZrwrrrrrrrrrrr1r9r3r;r|rrbrcrdrsH *))""""""  ######99999999991111111111444444444444%%%%%%******........ FEEEEEEEEENNNNNNNNNNNN000000v)))))))DDDDDD%$$$$$$bj+,, #$<=='.  y66688 v O O O M#   L O O J L K      $        4&.O*O*O*O*d----+@+@+@+@\,    6666$P+ P+ P+ P+( )P+2 3P+< =P+F GP+R SP+` aP+n oP+z {P+D EP+N OP+X YP+d eP+n oP+x yP+H -$H BCD  0 U >?@    UP+P+P+PPPPfJA A A A A A A A JC!C!C!C!C!{C!C!C!LB666666rc