
    c8                       U 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mZmZmZ ddlmZ ddlmZ ddlmZmZ dd	lmZmZ dd
lmZ ej        dk    rddl
mZ nddlmZ eee e!e"ee         ee         eee                  ee df         f         Z#	 d6dZ$d6dZ%h dZ&h dZ'd7dZ(d8dZ)d8dZ*d9dZ+d:dZ,d;dZ-d;d Z.ee%e!e e$e)e*e+e,e-e.ej/        e(d!Z0d"e1d#<   	  G d$ d%          Z2 G d& d'e2          Z3 G d( d)e3          Z4 G d* d+e3          Z5 G d, d-e2          Z6 G d. d/e6          Z7 G d0 d1e6          Z8 G d2 d3e6          Z9 G d4 d5e2          Z:dS )<zDefinition of an Argument class and transformers for various argument types.

An Argument instance represents a pylint option to be handled by an argparse.ArgumentParser
    )annotationsN)Callable)AnyPatternSequenceTupleUnion)
interfaces)utils)_CallbackAction_ExtendAction)_NewNamesAction_OldNamesAction)	PY38_PLUS)      )Literal.valuestrreturnSequence[str]c                    | st           j        S t          j        |           }|D ]6}|t           j        vr&t	          j        |  dg t           j        R            7|S )z9Transforms a comma separated string of confidence values.z should be in )r
   CONFIDENCE_LEVEL_NAMESpylint_utils
_check_csvargparseArgumentTypeError)r   values
confidences      6lib/python3.11/site-packages/pylint/config/argument.py_confidence_transformerr!   -   s     100$U++F  
Z>> 	,MM'L)J'L'LMM  	 M    c                *    t          j        |           S )z$Transforms a comma separated string.)r   r   r   s    r    _csv_transformerr%   :   s    "5)))r"   >   yyestrue>   nnofalseboolc                    |                                  } | t          v rdS | t          v rdS t          j        dd|  dg t          t          R            )z4Transforms a yes/no or stringified bool into a bool.TFNzInvalid yn value 'z', should be in )lower
YES_VALUES	NO_VALUESr   r   r$   s    r    _yn_transformerr1   C   sl    KKMME
 t	 u

$S5SS9R:9R	9R9RSS  r"   c                V    | st          j        d          t          j        |           S )z3Check that a string is not empty and remove quotes.z!Option cannot be an empty string.)r   r   r   _unquoter$   s    r    _non_empty_string_transformerr4   O   s.     N()LMMM '''r"   c                z    t           j                            t           j                            |                     S )z$Expand user and variables in a path.)ospath
expandvars
expanduserr$   s    r    _path_transformerr:   V   s(    7bg0077888r"   tuple[int, ...]c                    	 t          d |                     dd                              d          D                       }n&# t          $ r t	          j        |  d          dw xY w|S )z1Transforms a version string into a version tuple.c              3  4   K   | ]}t          |          V  d S )N)int).0vals     r    	<genexpr>z*_py_version_transformer.<locals>.<genexpr>^   s(      OOSCOOOOOOr"   ,.z? has an invalid format, should be a version string. E.g., '3.8'N)tuplereplacesplit
ValueErrorr   r   )r   versions     r    _py_version_transformerrI   [   s    OOEMM#s,C,C,I,I#,N,NOOOOO   (UUU
 
	 Ns   A A #A&Pattern[str]c                    	 t          j        |           S # t           j        $ r.}d|  d|j         d|j         }t          j        |          d}~ww xY w)zReturn `re.compile(value)`.z&Error in provided regular expression: z beginning at index z: N)recompileerrorposmsgr   r   )r   erP   s      r    _regex_transformerrR   f   sn    .z%   8 . . .bubbRSRWbb[\[`bb(---.s    A)AASequence[Pattern[str]]c                r    g }t          |           D ]$}|                    t          |                     %|S )z9Transforms a comma separated list of regular expressions.)r%   appendrR   r   patternspatterns      r    _regexp_csv_transfomerrY   o   sA    #%H#E** 5 5*7334444Or"   c           
     6   g }t          |           D ]}|                    t          j        t	          t          j        |                                        dd          dz   t          j        |                                          z                        |S )z?Transforms a comma separated list of regular expressions paths.\z\\|)	r%   rU   rL   rM   r   pathlibPureWindowsPathrE   as_posixrV   s      r    _regexp_paths_csv_transfomerr`   w   s    #%H#E** 
 
JG+G4455==dFKK)'22;;==> 	
 	
 	
 	
 Or"   )choicecsvfloatr>   r   non_empty_stringr7   
py_versionregexp
regexp_csvregexp_paths_csvstringynz*dict[str, Callable[[str], _ArgumentTypes]]_TYPE_TRANSFORMERSc                      e Zd ZdZddZdS )	_Argumenta  Class representing an argument to be parsed by an argparse.ArgumentsParser.

    This is based on the parameters passed to argparse.ArgumentsParser.add_message.
    See:
    https://docs.python.org/3/library/argparse.html#argparse.ArgumentParser.add_argument
    flags	list[str]arg_helpr   	hide_helpr,   section
str | Noner   Nonec                   || _         	 || _        	 |                    dd          | _        	 |rt          j        | _        || _        d S )N%z%%)rn   rq   rE   helpr   SUPPRESSrr   )selfrn   rp   rq   rr   s        r    __init__z_Argument.__init__   sS     
'"@ $$S$//	. 	* )DI22r"   N)
rn   ro   rp   r   rq   r,   rr   rs   r   rt   )__name__
__module____qualname____doc__rz    r"   r    rm   rm      s2         3 3 3 3 3 3r"   rm   c                  $     e Zd ZdZd fdZ xZS )_BaseStoreArgumenta  Base class for store arguments to be parsed by an argparse.ArgumentsParser.

    This is based on the parameters passed to argparse.ArgumentsParser.add_message.
    See:
    https://docs.python.org/3/library/argparse.html#argparse.ArgumentParser.add_argument
    rn   ro   actionr   default_ArgumentTypesrp   rq   r,   rr   rs   r   rt   c               p    t                                          ||||           || _        	 || _        d S N)rn   rp   rq   rr   )superrz   r   r   ry   rn   r   r   rp   rq   rr   	__class__s          r    rz   z_BaseStoreArgument.__init__   sH     	(i 	 	
 	
 	
 600r"   )rn   ro   r   r   r   r   rp   r   rq   r,   rr   rs   r   rt   r{   r|   r}   r~   rz   __classcell__r   s   @r    r   r      sG         1 1 1 1 1 1 1 1 1 1r"   r   c                  $     e Zd ZdZd fdZ xZS )_StoreArgumenta  Class representing a store argument to be parsed by an argparse.ArgumentsParser.

    This is based on the parameters passed to argparse.ArgumentsParser.add_message.
    See:
    https://docs.python.org/3/library/argparse.html#argparse.ArgumentParser.add_argument
    rn   ro   r   r   r   r   arg_typechoiceslist[str] | Nonerp   metavarrq   r,   rr   rs   r   rt   c       	            t                                          ||||||	           t          |         | _        	 || _        	 || _        d S N)rn   r   r   rp   rq   rr   )r   rz   rk   typer   r   ry   rn   r   r   r   r   rp   r   rq   rr   r   s             r    rz   z_StoreArgument.__init__   sh     	 	 	
 	
 	
 'x0	U	
 	 	r"   )rn   ro   r   r   r   r   r   r   r   r   rp   r   r   r   rq   r,   rr   rs   r   rt   r   r   s   @r    r   r      sG         $ $ $ $ $ $ $ $ $ $r"   r   c                  $     e Zd ZdZd fdZ xZS )_StoreTrueArgumenta  Class representing a 'store_true' argument to be parsed by an
    argparse.ArgumentsParser.

    This is based on the parameters passed to argparse.ArgumentsParser.add_message.
    See:
    https://docs.python.org/3/library/argparse.html#argparse.ArgumentParser.add_argument
    rn   ro   r   Literal['store_true']r   r   rp   r   rq   r,   rr   rs   r   rt   c               V    t                                          ||||||           d S r   )r   rz   r   s          r    rz   z_StoreTrueArgument.__init__  sB     	 	 	
 	
 	
 	
 	
r"   )rn   ro   r   r   r   r   rp   r   rq   r,   rr   rs   r   rt   r   r   s   @r    r   r   
  sG         
 
 
 
 
 
 
 
 
 
r"   r   c                  $     e Zd ZdZd fdZ xZS )_DeprecationArgumenta  Store arguments while also handling deprecation warnings for old and new names.

    This is based on the parameters passed to argparse.ArgumentsParser.add_message.
    See:
    https://docs.python.org/3/library/argparse.html#argparse.ArgumentParser.add_argument
    rn   ro   r   type[argparse.Action]r   r   r   r   r   r   rp   r   rq   r,   rr   rs   r   rt   c       	            t                                          ||||	           || _        	 || _        	 t          |         | _        	 || _        	 || _        d S r   )r   rz   r   r   rk   r   r   r   r   s             r    rz   z_DeprecationArgument.__init__0  ss     	(i 	 	
 	
 	
 60&x0	U	
 	 	r"   )rn   ro   r   r   r   r   r   r   r   r   rp   r   r   r   rq   r,   rr   rs   r   rt   r   r   s   @r    r   r   (  sG         % % % % % % % % % %r"   r   c                  $     e Zd ZdZd fdZ xZS )_ExtendArgumenta  Class for extend arguments to be parsed by an argparse.ArgumentsParser.

    This is based on the parameters passed to argparse.ArgumentsParser.add_message.
    See:
    https://docs.python.org/3/library/argparse.html#argparse.ArgumentParser.add_argument
    rn   ro   r   Literal['extend']r   r   r   r   r   rp   rq   r,   rr   rs   r   r   destr   rt   c       
            t           rt          j        }nt          }|
| _        	 t	                                          |||||	||||	  	         d S N)	rn   r   r   r   r   rp   r   rq   rr   )r   r   r   r   r   rz   )ry   rn   r   r   r   r   rp   rq   rr   r   r   action_classr   s               r    rz   z_ExtendArgument.__init__`  sl      	)#1LL(L	. 	 
	
 
	
 
	
 
	
 
	
r"   )rn   ro   r   r   r   r   r   r   r   r   rp   r   rq   r,   rr   rs   r   r   r   rs   r   rt   r   r   s   @r    r   r   X  sG         !
 !
 !
 !
 !
 !
 !
 !
 !
 !
r"   r   c                  $     e Zd ZdZd fdZ xZS )_StoreOldNamesArgumentzStore arguments while also handling old names.

    This is based on the parameters passed to argparse.ArgumentsParser.add_message.
    See:
    https://docs.python.org/3/library/argparse.html#argparse.ArgumentParser.add_argument
    rn   ro   r   r   r   r   r   r   rp   r   rq   r,   kwargsdict[str, Any]rr   rs   r   rt   c       	        t    t                                          |t          |||||||		  	         || _        d S r   )r   rz   r   r   ry   rn   r   r   r   rp   r   rq   r   rr   r   s             r    rz   z_StoreOldNamesArgument.__init__  P     	" 	 
	
 
	
 
	
 <<r"   rn   ro   r   r   r   r   r   r   rp   r   r   r   rq   r,   r   r   rr   rs   r   rt   r   r   s   @r    r   r     G         = = = = = = = = = =r"   r   c                  $     e Zd ZdZd fdZ xZS )_StoreNewNamesArgumentzStore arguments while also emitting deprecation warnings.

    This is based on the parameters passed to argparse.ArgumentsParser.add_message.
    See:
    https://docs.python.org/3/library/argparse.html#argparse.ArgumentParser.add_argument
    rn   ro   r   r   r   r   r   r   rp   r   rq   r,   r   r   rr   rs   r   rt   c       	        t    t                                          |t          |||||||		  	         || _        d S r   )r   rz   r   r   r   s             r    rz   z_StoreNewNamesArgument.__init__  r   r"   r   r   r   s   @r    r   r     r   r"   r   c                  $     e Zd ZdZd fdZ xZS )_CallableArgumenta  Class representing an callable argument to be parsed by an
    argparse.ArgumentsParser.

    This is based on the parameters passed to argparse.ArgumentsParser.add_message.
    See:
    https://docs.python.org/3/library/argparse.html#argparse.ArgumentParser.add_argument
    rn   ro   r   type[_CallbackAction]rp   r   r   r   rq   r,   rr   rs   r   r   rt   c                   t                                          ||||           || _        	 || _        	 || _        d S r   )r   rz   r   r   r   )	ry   rn   r   rp   r   rq   rr   r   r   s	           r    rz   z_CallableArgument.__init__  sV     	(i 	 	
 	
 	
 6<	 	r"   )rn   ro   r   r   rp   r   r   r   rq   r,   rr   rs   r   r   r   rt   r   r   s   @r    r   r     sG                  r"   r   )r   r   r   r   )r   r   r   r,   )r   r   r   r   )r   r   r   r;   )r   r   r   rJ   )r   r   r   rS   );r~   
__future__r   r   r6   r]   rL   syscollections.abcr   typingr   r   r   r   r	   pylintr
   r   r   pylint.config.callback_actionsr   r   !pylint.config.deprecation_actionsr   r   pylint.constantsr   version_infor   typing_extensionsr   r>   rc   r,   r   r!   r%   r/   r0   r1   r4   r:   rI   rR   rY   r`   r3   rk   __annotations__rm   r   r   r   r   r   r   r   r   r   r"   r    <module>r      s"  
  
 # " " " " "  				  				 



 $ $ $ $ $ $ 7 7 7 7 7 7 7 7 7 7 7 7 7 7       ( ( ( ( ( ( I I I I I I I I N N N N N N N N & & & & & &v *)))))) 	CLSMWS\	#s(O	 '
 
 
 
* * * *
 "!!
   		 	 	 	( ( ( (9 9 9 9
   . . . .       )5) (4#
B B     3 3 3 3 3 3 3 3B1 1 1 1 1 1 1 1:, , , , ,' , , ,^
 
 
 
 
+ 
 
 
<- - - - -9 - - -`)
 )
 )
 )
 )
* )
 )
 )
X"= "= "= "= "=1 "= "= "=J"= "= "= "= "=1 "= "= "=J# # # # #	 # # # # #r"   