
    yIf9                       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mZ ddl	m	Z	 ddl
mZ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 dd
lmZmZ eeeeeee         ee         eee                  eedf         f         Z	 d5dZd5dZ h dZ!h dZ"d6dZ#d7dZ$d7dZ%d5dZ&d8dZ'd9dZ(d:dZ)d:dZ*ee eeee$e%e&e'e(e)e*ej+        e#d Z,d!e-d"<   	  G d# d$          Z. G d% d&e.          Z/ G d' d(e/          Z0 G d) d*e/          Z1 G d+ d,e.          Z2 G d- d.e2          Z3 G d/ d0e2          Z4 G d1 d2e2          Z5 G d3 d4e.          Z6d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)glob)AnyLiteralPatternSequenceTupleUnion)
interfaces)utils)_CallbackAction)_NewNamesAction_OldNamesAction.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      J/var/www/piapp/venv/lib/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"   3   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_transformerr.   <   sh    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_transformerr1   H   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_transformerr7   O   s(    7bg0077888r   c                    g }t          |           D ]3}|                    t          t          |          d                     4|S )ziTransforms a comma separated list of paths while expanding user and
    variables and glob patterns.
    T)	recursive)r"   extendr   r7   )r   pathsr4   s      r   _glob_paths_csv_transformerr<   T   sR     E '' D DT+D11TBBBCCCCLr   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>a   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_transformerrK   ^   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   erR   s      r   _regex_transformerrT   i   sp    5z%   8 5 5 5bubbRSRWbb[\[`bb(--145s    A*AASequence[Pattern[str]]c                |    g }t          j        |           D ]$}|                    t          |                     %|S )z9Transforms a comma separated list of regular expressions.)r   _check_regexp_csvappendrT   r   patternspatterns      r   _regexp_csv_transfomerr\   r   sD    #%H1%88 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"   rX   rN   rO   r   pathlibPureWindowsPathrG   as_posixrY   s      r   _regexp_paths_csv_transfomerrc   z   s    #%H#E** 
 
JG+G4455==dFKK)'22;;==> 	
 	
 	
 	
 Or   )choicecsvfloatr@   r   non_empty_stringr4   glob_paths_csv
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%%)rr   ru   rG   helpr   SUPPRESSrv   )selfrr   rt   ru   rv   s        r   __init__z_Argument.__init__   sS     
'"@ $$S$//	. 	* )DI22r   N)
rr   rs   rt   r   ru   r)   rv   rw   r   rx   )__name__
__module____qualname____doc__r~    r   r   rq   rq      s2         3 3 3 3 3 3r   rq   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
    rr   rs   actionr   default_ArgumentTypesrt   ru   r)   rv   rw   r   rx   c               p    t                                          ||||           || _        	 || _        d S N)rr   rt   ru   rv   )superr~   r   r   r}   rr   r   r   rt   ru   rv   	__class__s          r   r~   z_BaseStoreArgument.__init__   sH     	(i 	 	
 	
 	
 600r   )rr   rs   r   r   r   r   rt   r   ru   r)   rv   rw   r   rx   r   r   r   r   r~   __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
    rr   rs   r   r   r   r   arg_typechoiceslist[str] | Nonert   metavarru   r)   rv   rw   r   rx   c       	            t                                          ||||||	           t          |         | _        	 || _        	 || _        d S N)rr   r   r   rt   ru   rv   )r   r~   ro   typer   r   r}   rr   r   r   r   r   rt   r   ru   rv   r   s             r   r~   z_StoreArgument.__init__   sh     	 	 	
 	
 	
 'x0	U	
 	 	r   )rr   rs   r   r   r   r   r   r   r   r   rt   r   r   r   ru   r)   rv   rw   r   rx   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
    rr   rs   r   Literal['store_true']r   r   rt   r   ru   r)   rv   rw   r   rx   c               V    t                                          ||||||           d S r   )r   r~   r   s          r   r~   z_StoreTrueArgument.__init__  sB     	 	 	
 	
 	
 	
 	
r   )rr   rs   r   r   r   r   rt   r   ru   r)   rv   rw   r   rx   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
    rr   rs   r   type[argparse.Action]r   r   r   r   r   r   rt   r   ru   r)   rv   rw   r   rx   c       	            t                                          ||||	           || _        	 || _        	 t          |         | _        	 || _        	 || _        d S r   )r   r~   r   r   ro   r   r   r   r   s             r   r~   z_DeprecationArgument.__init__6  ss     	(i 	 	
 	
 	
 60&x0	U	
 	 	r   )rr   rs   r   r   r   r   r   r   r   r   rt   r   r   r   ru   r)   rv   rw   r   rx   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
    rr   rs   r   Literal['extend']r   r   r   r   r   rt   ru   r)   rv   rw   r   r   destr   rx   c       
            t           j        }|
| _        	 t                                          |||||	||||	  	         d S N)	rr   r   r   r   r   rt   r   ru   rv   )r   _ExtendActionr   r   r~   )r}   rr   r   r   r   r   rt   ru   rv   r   r   action_classr   s               r   r~   z_ExtendArgument.__init__g  s]      -	. 	 
	
 
	
 
	
 
	
 
	
r   )rr   rs   r   r   r   r   r   r   r   r   rt   r   ru   r)   rv   rw   r   r   r   rw   r   rx   r   r   s   @r   r   r   ^  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
    rr   rs   r   r   r   r   r   r   rt   r   ru   r)   kwargsdict[str, Any]rv   rw   r   rx   c       	        t    t                                          |t          |||||||		  	         || _        d S r   )r   r~   r   r   r}   rr   r   r   r   rt   r   ru   r   rv   r   s             r   r~   z_StoreOldNamesArgument.__init__  P     	" 	 
	
 
	
 
	
 <<r   rr   rs   r   r   r   r   r   r   rt   r   r   r   ru   r)   r   r   rv   rw   r   rx   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
    rr   rs   r   r   r   r   r   r   rt   r   ru   r)   r   r   rv   rw   r   rx   c       	        t    t                                          |t          |||||||		  	         || _        d S r   )r   r~   r   r   r   s             r   r~   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
    rr   rs   r   type[_CallbackAction]rt   r   r   r   ru   r)   rv   rw   r   r   rx   c                   t                                          ||||           || _        	 || _        	 || _        d S r   )r   r~   r   r   r   )	r}   rr   r   rt   r   ru   rv   r   r   s	           r   r~   z_CallableArgument.__init__  sV     	(i 	 	
 	
 	
 6<	 	r   )rr   rs   r   r   rt   r   r   r   ru   r)   rv   rw   r   r   r   rx   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   rL   )r   r   r   rU   )7r   
__future__r   r   r3   r`   rN   collections.abcr   r   typingr   r   r   r	   r
   r   pylintr   r   r   pylint.config.callback_actionsr   !pylint.config.deprecation_actionsr   r   r   r@   rf   r)   r   r   r"   r,   r-   r.   r1   r7   r<   rK   rT   r\   rc   r0   ro   __annotations__rq   r   r   r   r   r   r   r   r   r   r   r   <module>r      s  
  
 # " " " " "  				  				 $ $ $ $ $ $       @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @       ( ( ( ( ( ( : : : : : : N N N N N N N N	CLSMWS\	#s(O	 '
 
 
 
* * * *
 "!!
   		 	 	 	( ( ( (9 9 9 9
      5 5 5 5       )51) (4#
B B      3 3 3 3 3 3 3 3B1 1 1 1 1 1 1 1:- - - - -' - - -`
 
 
 
 
+ 
 
 
<. . . . .9 . . .b&
 &
 &
 &
 &
* &
 &
 &
R#= #= #= #= #=1 #= #= #=L#= #= #= #= #=1 #= #= #=L# # # # #	 # # # # #r   