
    yIfk                       d Z ddlmZ ddlZddlZddlZddlZddlZddlm	Z	 ddl
mZmZ ddlmZ ddlmZmZ ddlZddlmZ dd	lmZm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 m!Z! ddl"m#Z# erddl$m%Z% eej&        e'e'ej(        f         Z) ej*        d           ej*        d          dZ+dZ, e-d          Z. G d de          Z/d-dZ0d.dZ1d/d"Z2d#d$hZ3d0d*Z4 G d+ d,e          Z5dS )1zBasic checker for Python code.    )annotationsN)Iterable)Enumauto)Pattern)TYPE_CHECKINGTuple)nodes)	constants
interfaces)utils)_BasicChecker)KNOWN_NAME_TYPESKNOWN_NAME_TYPES_WITH_STYLENAMING_STYLES_create_naming_options)is_property_deleteris_property_setter)Options)PyLinterzJ^_{0,2}(?!T[A-Z])(?:[A-Z]+|(?:[A-Z]+[a-z]+)+T?(?<!Type))(?:_co(?:ntra)?)?$z9^_{0,2}(?!T[A-Z]|Type)[A-Z]+[a-z0-9]+(?:[A-Z][a-z0-9]+)*$)typevar	typealiaszbuiltins.property)ztyping.TypeVarztyping_extensions.TypeVarc                  ^    e Zd Z e            Z e            Z e            Z e            ZdS )TypeVarVarianceN)__name__
__module____qualname__r   	invariant	covariantcontravariantdouble_variant     ]/var/www/piapp/venv/lib/python3.11/site-packages/pylint/checkers/base/name_checker/checker.pyr   r   :   s:        IIDFFMTVVNNNr#   r   configargparse.Namespacereturntuple[set[str], set[str]]c                    t           h}t                      }| >|                    | j                   |                    d | j        D                        ||fS )zReturns a tuple of property classes and names.

    Property classes are fully qualified, such as 'abc.abstractproperty' and
    property names are the actual names, such as 'abstract_property'.
    Nc              3  N   K   | ] }|                     d d          d         V  !dS ).   N)rsplit).0props     r$   	<genexpr>z"_get_properties.<locals>.<genexpr>K   sF       
 
(,DKKQ#
 
 
 
 
 
r#   )BUILTIN_PROPERTYsetupdateproperty_classes)r%   r5   property_namess      r$   _get_propertiesr7   A   sw     ))"uuN 7888 
 
060G
 
 
 	
 	
 	
 ^++r#   nodenodes.AssignNameboolc                   | }|rGt          |j        t          j                  s(|j        }|rt          |j        t          j                  (|rt	          j        |j        t                    sdS |j        j        }|                    t          j        t          j	        f          D ]0}|j
        D ]&\  }}|r|| j        k    r  dS || j        k    r  dS '1dS )zDetect that the given node (AssignName) is inside an
    exception handler and redefines an import from the tryexcept body.

    Returns True if the node redefines an import, False otherwise.
    FT)
isinstanceparentr
   ExceptHandlerr   error_of_typeImportErrornodes_of_class
ImportFromImportnamesname)r8   current	try_blockimport_noderE   aliass         r$   _redefines_importrJ   Q   s    G
 !*W^U5HII !.  !*W^U5HII ! %-gnkJJ u%I //1A5<0PQQ  &, 	 	KD% DI%%444 &""ttt #		 5r#   nodes.FunctionDefstrc                   t          |          \  }}|                                 sdS t          |           st          |           rdS | j        r| j        j        ng }|D ]~}t          |t
          j                  s#t          |t
          j                  rH|j	        |v r?t          j        |          }|r)t          |d          r|                                |v r dS dS )zDetermine the name type whose regex the function's name should match.

    :param node: A function node.
    :param config: Configuration from which to pull additional property classes.

    :returns: One of ('function', 'method', 'attr')
    functionattrqnamemethod)r7   	is_methodr   r   
decoratorsr
   r<   Name	Attributeattrnamer   
safe_inferhasattrrP   )r8   r%   r5   r6   rS   	decoratorinferreds          r$   _determine_function_name_typer[   g   s    (7v'>'>$n>> z$ #6t#<#<  v*./A&&rJ  	 i,, 
	y%/22
	"n44'	22HHg.. NN$$(888vv8r#   exemptignorematchre.Match[str] | None	node_type
confidenceinterfaces.Confidencec                d    | d uo,| j         d uo#| j         t          vo|dk    p|t          j        k    S )NrQ   )	lastgroupEXEMPT_NAME_CATEGORIESr   INFERENCE_FAILURE)r^   r`   ra   s      r$   _is_multi_naming_matchrg      sO     	T 	RO4'	RO#99	R ("PjJ4P&P	r#   c                  X    e Zd ZU ddddddgifddd	d
Zddddddfddddddfddddddfddddddfddddddfddd d!d"dfd#d$dd%d&dffZd'ed(<   e e            z   Zd'ed)<   dX fd.ZdYd/Z	dZd1Z
 ej        dd2          d[d5            Zd\d7Z ej        dd2          d]d9            Z ej        dd2          d^d;            ZeZ ej        dd2d<d=d>          d_d@            Zd`dCZdadFZ	 dbdcdNZdddPZdddQZej        dfdedSZedfdU            ZedfdV            ZdgdWZ xZS )hNameChecker)z"%s name "%s" doesn't conform to %sinvalid-nameziUsed when the name doesn't conform to naming rules associated to its type (constant, variable, class...).zDisallowed name "%s"disallowed-namezMUsed when the name matches bad-names or bad-names-rgxs- (unauthorized names).	old_names)C0102zblacklisted-name)z.Type variable name does not reflect variance%stypevar-name-incorrect-varianceaY  Emitted when a TypeVar name doesn't reflect its type variance. According to PEP8, it is recommended to add suffixes '_co' and '_contra' to the variables used to declare covariant or contravariant behaviour respectively. Invariant (default) variables do not require a suffix. The message is also emitted when invariant variables do have a suffix.)z2TypeVar cannot be both covariant and contravarianttypevar-double-variancezgEmitted when both the "covariant" and "contravariant" keyword arguments are set to "True" in a TypeVar.)z<TypeVar name "%s" does not match assigned variable name "%s"typevar-name-mismatchzWEmitted when a TypeVar is assigned to a variable that does not match its name argument.)C0103C0104C0105C0131C0132z
good-names)ijkexRun_csvz<names>zJGood variable names which should always be accepted, separated by a comma.)defaulttypemetavarhelpzgood-names-rgxs 
regexp_csvziGood variable names regexes, separated by a comma. If names match any regex, they will always be acceptedz	bad-names)foobarbaztototututatazHBad variable names which should always be refused, separated by a comma.zbad-names-rgxszgBad variable names regexes, separated by a comma. If names match any regex, they will always be refusedz
name-groupr"   z<name1:name2>zrColon-delimited sets of names that determine each other's naming style when the name regexes allow several styles.zinclude-naming-hintFynz<y or n>z?Include a hint for the correct naming format with invalid-name.zproperty-classes)zabc.abstractpropertyz<decorator names>zList of decorators that produce properties, such as abc.abstractproperty. Add to this list to register other decorators that produce valid properties. These decorators are taken in consideration only for invalid-name.r   _optionsoptionslinterr   r'   Nonec                    t                                          |           i | _        i | _        i | _        i | _        g | _        g | _        d S N)super__init___name_group
_bad_names_name_regexps_name_hints_good_names_rgxs_compiled_bad_names_rgxs_compiled)selfr   	__class__s     r$   r   zNameChecker.__init__  sP       +-FH9;+-@B&?A%%%r#   c                ~   | j         j                                         | j         j        j        D ]'}|                    d          D ]}d| | j        |<   (|                                 \  }}|| _        || _	        d | j         j        j
        D             | _        d | j         j        j        D             | _        d S )N:group_c                6    g | ]}t          j        |          S r"   recompiler/   rgxps     r$   
<listcomp>z$NameChecker.open.<locals>.<listcomp>%  s/     *
 *
 *
!%BJt*
 *
 *
r#   c                6    g | ]}t          j        |          S r"   r   r   s     r$   r   z$NameChecker.open.<locals>.<listcomp>(  s/     )
 )
 )
!%BJt)
 )
 )
r#   )r   statsreset_bad_namesr%   
name_groupsplitr   _create_naming_rulesr   r   good_names_rgxsr   bad_names_rgxsr   )r   group	name_typeregexpshintss        r$   openzNameChecker.open  s    ))+++['2 	? 	?E"[[-- ? ?	.>u.>.> ++? 2244$ *
 *
)-);)K*
 *
 *
&)
 )
)-);)J)
 )
 )
%%%r#   .tuple[dict[str, Pattern[str]], dict[str, str]]c                \   i }i }t           D ]}|t          v rAt          | j        j        | d          }t
          |                             |          ||<   nd}t          |         ||<   | d}t          | j        j        |d           }||||<   ||j        d||<   | d||<   ||fS )N_naming_style
predefined_rgxz patternz naming style)	r   r   getattrr   r%   r   	get_regexDEFAULT_PATTERNSpattern)r   r   r   r   naming_style_namecustom_regex_setting_namecustom_regexs          r$   r   z NameChecker._create_naming_rules,  s   +- ") 	G 	GI777$+K&9(C(C(C% %! &33D%E%O%O& &	"" %1!%5i%@	"+4(:(:(:%"4;#57PRVWWL'%1	"'&2&:#F#F#Fi  &7#F#F#Fi  ~r#   rj   r8   nodes.Modulec                ~    |                      d|j                            d          d         |           i | _        d S )Nmoduler+   r-   )_check_namerE   r   r   )r   r8   s     r$   visit_modulezNameChecker.visit_moduleH  s8    49??3#7#7#;TBBBr#   r{   c                   | j                                         D ](}t          |          dk     rt          j        t
                    }t          j        }t          |	                                d           \  }}|                                D ]G}|t          |                   
                    |           t          t          |          |          }Ht          ||                   dk    r/t          ||         d           }t          j        |dd           }n||         d         }|D ]}	 | j        |g|	R   *d S )N   c                ,    t          | d                   S )Nr,   )len)items    r$   <lambda>z*NameChecker.leave_module.<locals>.<lambda>U  s    #dSTg,, r#   )keyr,   c                4    t          d | D                       S )Nc              3  J   K   | ]}|d          j         |d          j         V  dS )r   N)lineno)r/   warnings     r$   r1   z=NameChecker.leave_module.<locals>.<lambda>.<locals>.<genexpr>\  sB       * *#"1:,8  
)8888* *r#   )min)r   s    r$   r   z*NameChecker.leave_module.<locals>.<lambda>\  s,    c * *',* * * ' ' r#   r   )r   valuesr   collectionsdefaultdictlistsysmaxsizemaxitemsappendr   sorted	itertoolschain_raise_name_warning)
r   r{   
all_groupsgroupsmin_warningsprevalent_groupr   by_linewarningsargss
             r$   leave_modulezNameChecker.leave_moduleM  so   /0022 	A 	AJ:""'--  ;L!$Z%5%5%7%7=V=V!W!W!WOQ#**,, = =s5zz"))%000"3u::|<<6,'((1,, <(    6?_gabbk5R!,/2  A A((@4@@@@@A/	A 	Ar#   nodes.ClassDefc                    |                      d|j        |           |j                                        D ]D\  }}t	          |                    |                    s|                      d||d                    Ed S )NclassrO   r   )r   rE   instance_attrsr   anyinstance_attr_ancestors)r   r8   rO   anodess       r$   visit_classdefzNameChecker.visit_classdefh  s    $)T222 /5577 	: 	:LD&t33D99:: :  vay999	: 	:r#   rK   c                   t           j        }|                                rvt          j        |j                                        |j                  rd S t          j        |j                                                  rt           j	        nt           j
        }|                     t          || j        j                  |j        ||           |j        j        }||                     |           d S d S )N)r%   )r   HIGHrR   r   overrides_a_methodr=   framerE   has_known_bases	INFERENCErf   r   r[   r   r%   r   _recursive_check_names)r   r8   ra   r   s       r$   visit_functiondefzNameChecker.visit_functiondefo  s      _
>> 	'(9(9(;(;TYGG  ():):)<)<==2
$$1  	)$t{7IJJJI		
 	
 	
 y~''----- r#   rn   ro   rp   r9   c                P   |                                 }|                                }t          |t          j                  r|                     d|j        |           dS t          |t          j                  r|                     d|j        |           dS t          |t          j                  r|                     d|j        |           dS t          |t          j	                  rxt          |t          j
                  rt          j        |j                  }t          |j        t          j
                  r|                     |j                  r)|                     d|j        d         j        |           dS |                     |j                  r)|                     d|j        d         j        |           dS t          |j        t          j                  rWt          |j        t          j                  r7|j        j                            |          t+          |j        j                  k     r|j        j        |j        j                            |                   }|                     |          rQ|                     d|j        d         j        |j        j                            |                   j        |           dS |                     |          rQ|                     d|j        d         j        |j        j                            |                   j        |           dS dS t          |t          j                  r|                     d|j        |           dS t/          |          s8t          |t          j                  r|                     d|j        |           dS |                     d|j        |d	
           dS t          |t          j                  rkt          j        |d          r|                     d|j        |           dS |                     |j                  r |                     d|j        |           dS dS dS t          |t          j                  r|j        |v r|j        |                                vrt/          |          stt          |t          j                  r8|                     |j                  r|                     d|j        |           dS |                     d|j        |           dS dS dS dS t          |t          j                  ret          j        |          st          j        |d          r|                     d|j        |           dS |                     d|j        |           dS dS )z"Check module level assigned names.	inlinevarr   r   r   Nr   constvariableT)disallowed_check_onlyFinalclass_constclass_attribute)r   assign_typer<   r
   Comprehensionr   rE   TypeVar	TypeAliasModuleAssignr   rW   valuer=   _assigns_typevartargets_assigns_typealiasr	   eltsindexr   ClassDefrJ   Const	AnnAssignis_assign_name_annotated_with
annotationFunctionDefargnamesis_enum_member)r   r8   r   r   inferred_assign_typeassigners         r$   visit_assignnamezNameChecker.visit_assignname  s    

&&(( k5#677 Z	E[$)T:::::U]33 W	EY	488888U_55 T	E[$)T::::: u|,, P	E+u|44 9C','78I'J'J$ dk5<88 ,,[->?? ((K4G4J4OQUVVV..{/@AA ((k6I!6L6QSWXXX t{EK88&";#4ekBB& (..t44s;;L;Q7R7RRR*05dk6F6L6LT6R6RSH,,X66 ((%'/2!$+"2"8"8">">@!    ..x88 ((''/2!$+"2"8"8">">@!        4enEE $$Wdi>>>>> +400 Z(%+6 6  $$Wdi>>>>>$$"DIt4 %     
 K99 C6tWEE C$$Wdi>>>>>,,[-CDD C$$[$)TBBBBB	C CC C u011 	EyE!!diu~~7G7G&G&G(.. F!#U_  F11+2HIIF ((diFFFFF((TYEEEEE "!&G&GF F u~.. 	E#D)) EU-Pg. . E   	4@@@@@  !2DItDDDDD	E 	Er#   r   list[nodes.AssignName]c                H    |D ]}|                      d|j        |           dS )z/Check names in a possibly recursive list <arg>.argumentN)r   rE   )r   r   args      r$   r   z"NameChecker._recursive_check_names  s8     	8 	8CZ37777	8 	8r#   r`   rL   c                8    | j                             ||          S r   )r   get)r   r`   s     r$   _find_name_groupzNameChecker._find_name_group  s    ##Iy999r#   r   
str | Nonenodes.NodeNGrE   ra   rb   r   c                   t           j        |         }| j        |         }|rd| d| }| j        j        j        r|d| j        |         j        dz  }|dk    r|                                ||fn|                                |f}	| 	                    |||	|           | j        j
                            |d           d S )Nzthe `z` group in the z (z	 pattern)rj   r8   r   ra   r,   )r   HUMAN_READABLE_TYPESr   r   r%   include_naming_hintr   r   
capitalizeadd_messager   increase_bad_name)
r   r   r8   r`   rE   ra   r   
type_labelhintr   s
             r$   r   zNameChecker._raise_name_warning  s     3I>
	* 	B B?AA4AAD;1 	LK+I6>KKKKD .(( ""$$dD11''))40 	 	t$:NNN++Iq99999r#   r:   c                j    | j         j        j        v pt          fd| j        D                       S )Nc              3  B   K   | ]}|                               V  d S r   r^   r/   r   rE   s     r$   r1   z5NameChecker._name_allowed_by_regex.<locals>.<genexpr>  s@       <
 <
$+GMM$<
 <
 <
 <
 <
 <
r#   )r   r%   
good_namesr   r   r   rE   s    `r$   _name_allowed_by_regexz"NameChecker._name_allowed_by_regex  sR    t{)44 
 <
 <
 <
 <
/3/M<
 <
 <
 9
 9
 	
r#   c                j    | j         j        j        v pt          fd| j        D                       S )Nc              3  B   K   | ]}|                               V  d S r   r&  r'  s     r$   r1   z8NameChecker._name_disallowed_by_regex.<locals>.<genexpr>  s@       ;
 ;
$+GMM$;
 ;
 ;
 ;
 ;
 ;
r#   )r   r%   	bad_namesr   r   r)  s    `r$   _name_disallowed_by_regexz%NameChecker._name_disallowed_by_regex  sR    t{)33 
s ;
 ;
 ;
 ;
/3/L;
 ;
 ;
 8
 8
 	
r#   r   c                   dfd}|                      |          rdS |                     |          rE| j        j                            d           |                     d	||t          j        
           dS | j                 }|	                    |          }t          ||          rd|                               }	| j                            |	i           }
|
                    |j        g           }|                    |||f           |&|s$ ||          s|                     d|||           dk    r|                     ||           dS dS )z)Check for a name using the type's regexp.r8   r  r'   r:   c                t    dk    r0t          j        |           }t          |t          j                  rdS dS )Nr   TF)r   rW   r<   r
   r  )r8   rZ   r`   s     r$    _should_exempt_from_invalid_namezANameChecker._check_name.<locals>._should_exempt_from_invalid_name,  s<    J&& +D11h77  45r#   )rE   Nr,   rk   r  r   )r8   r  r'   r:   )r*  r.  r   r   r!  r   r   r   r   r^   rg   r  r   
setdefaultrd   r   r   _check_typevar)r   r`   rE   r8   ra   r   r1  regexpr^   r   bad_name_groupr   s    `          r$   r   zNameChecker._check_name"  s   	 	 	 	 	 	 &&D&11 	F))t)44 	K//	1===!4JO     F#I.T""!%J?? 	A..y99J!_77
BGGN%00"EEHOOT9dJ?@@@ M) 44T::  $$T4D*MMM 	!!d+++++ "!r#   nodes.NodeNG | Nonec                    t          | t          j                  rPt          j        | j                  }t          |t          j                  r|                                t          v rdS dS )z'Check if a node is assigning a TypeVar.TF)	r<   astroidCallr   rW   funcr  rP   TYPE_VAR_QNAME)r8   rZ   s     r$   r  zNameChecker._assigns_typevarP  s^     dGL)) 	'	22H8W%566NN$$66tur#   c                X   t          j        |           }t          |t          j                  rG|                                }|dk    rdS |dk    r$| J t          | j        t          j                   S n4t          |t          j                  r|                                dk    rdS dS )z)Check if a node is assigning a TypeAlias.ztyping.TypeAliasTz.UnionNF)	r   rW   r<   r
   r  rP   r=   r	  r  )r8   rZ   rP   s      r$   r  zNameChecker._assigns_typealias\  s     #D))h// 	NN$$E***t   '''%dk5?CCCC	 !
 %"344 	 ~~#555tur#   c           	        t          |j        t          j                  r=|                                j        j        }|                                j        j        }nt          |j        t          j                  r|                                j        j	        |j        j	        
                    |                   j        }|                                j        j	        |j        j	        
                    |                   j        }nd}d}t          j        }d}|D ]}|t          j        k    rn|j        dk    r5|j        j        r)|t          j        k    rt          j        nt          j        }n?|j        dk    r4|j        j        r(|t          j        k    rt          j        nt          j        }|j        dk    r+t          |j        t          j                  r|j        j        }|/|r-t          |d         t          j                  r|d         j        }|t          j        k    rG|                     d|t&          j                   |                     d	|d
t&          j                   nL|t          j        k    rY|                    d          sDt-          j        dd|           d}|                     d	|d| d| dt&          j                   n|t          j        k    rY|                    d          sDt-          j        dd|           d}|                     d	|d| d| dt&          j                   nz|t          j        k    rj|                    d          s|                    d          r@t-          j        dd|          }|                     d	|d| d| dt&          j                   |-||k    r)|                     d|||ft&          j                   dS dS dS )z"Check for TypeVar lint violations.r"   Nr   r    rE   r   ro   )r8   ra   rn   )r   r  _coz_contra$r   z. "z" is covariant, use "z	" instead_contraz_co$z" is contravariant, use "z_contra$|_co$z" is invariant, use "rp   )r<   r=   r
   r   r   r  keywordsr   r	   r  r  r   r   r!   r  r    r   r  r   r   r   endswithr   sub)	r   rE   r8   r@  r   variancename_argkwsuggest_names	            r$   r3  zNameChecker._check_typevarp  s&   dk5<00 
	''))/8H##%%+0DDU[11 	  ""(-dk.>.D.DT.J.JKT  ##%%+01A1G1G1M1MNSDDHD", 	* 	*B?999;&&28>&  ?#@@@ $--(7 
 ?**rx~*  ?#<<< $11(7  vJrx$E$E8>DGU[)I)IAw}H555)%/    
 1%/	      2224==;O;O2 fZT::???L1NDNN|NNN%/	      666t}}Y?W?W6 fVR66???L1RDRR<RRR%/	      222MM%   3$(MM)$<$< 3 6/2t<<L1NDNN|NNN%/	     H$4$4'%%/	        $4$4r#   )r   r   r'   r   )r'   r   )r'   r   )r8   r   r'   r   )r{   r   r'   r   )r8   r   r'   r   )r8   rK   r'   r   )r8   r9   r'   r   )r   r  r'   r   )r`   rL   r'   rL   )rj   )r   r  r8   r  r`   rL   rE   rL   ra   rb   r   rL   r'   r   )rE   rL   r'   r:   )r`   rL   rE   rL   r8   r  ra   rb   r   r:   r'   r   )r8   r6  r'   r:   )rE   rL   r8   r9   r'   r   ) r   r   r   msgsr   __annotations__r   r   r   r   r   r   only_required_for_messagesr   r   r   r   visit_asyncfunctiondefr  r   r  r   r*  r.  r   r   r   staticmethodr  r  r3  __classcell__)r   s   @r$   ri   ri      s        
 #[1		
	


C' 'DV <$)	 		
 $$0	 		
 H$(	 		
 $$/	 		
 *-	 		
 " %Y	 	
 4.U	 	
KH K K K KX  "8"8":"::G::::B B B B B B
 
 
 
    8 &U%&7HH   IHA A A A6 &U%&7HH: : : IH: &U%&7HH. . . IH.0 /%U%)! bE bE bE bEH8 8 8 8
: : : : &: : : : :6
 
 
 


 
 
 
 -7O&+,, ,, ,, ,, ,,\ 	 	 	 \	    \&S S S S S S S Sr#   ri   )r%   r&   r'   r(   )r8   r9   r'   r:   )r8   rK   r%   r&   r'   rL   )r^   r_   r`   rL   ra   rb   r'   r:   )6__doc__
__future__r   argparser   r   r   r   collections.abcr   enumr   r   r   typingr   r	   r8  r
   pylintr   r   pylint.checkersr   "pylint.checkers.base.basic_checkerr   .pylint.checkers.base.name_checker.naming_styler   r   r   r   pylint.checkers.utilsr   r   pylint.typingr   pylint.lint.pylinterr   NodeNGrL   
Confidence_BadNamesTupler   r   r2   	frozensetr;  r   r7   rJ   r[   re   rg   ri   r"   r#   r$   <module>r^     s  
 % $ " " " " " "          				 



 $ $ $ $ $ $               ' ' ' ' ' ' ' '        ( ( ( ( ( ( ( ( ! ! ! ! ! ! < < < < < <            J I I I I I I I ! ! ! ! ! ! .------u|S#z/DDE rzU  D 	   '      d   , , , ,    ," " " "L #H-    h h h h h- h h h h hr#   