
    c3                       d dl mZ 	 d dlZd dlZdZn# e$ r	 d dlZdZY nw xY wd dlZd dlZd dl	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mZmZmZmZmZmZmZmZ d dlmZm Z m!Z! d d	l"m#Z# d d
l$m%Z% ej&        dk    rd dlm'Z' nd dl(m'Z' erd dl)m*Z* d dl+m,Z, dZ-e'd         Z.e'd         Z/e'd         Z0e'd         Z1e'd         Z2e'd         Z3ee.e/e0e1e2e3f         Z4 ede5e6ee7         ee7         eee7                  ee6df                   Z8e-dfdwdZ9g d Z:dxd$Z;dyd'Z<dzd+Z=d{d.Z>	 d|d}d4Z?	 d~dd<Z@dd?ZAddDZBe	 dddL            ZCe	 dddO            ZCe	 dddS            ZCe	 dddW            ZCe	 ddd[            ZCe	 ddd_            ZC	 d|ddcZCdddgZDddhZEddlZFddmZGddqZH	 d|ddsZIddtZJ G du dv          ZKdS )    )annotationsNTF)Sequence)BufferedReaderBytesIO)	TYPE_CHECKINGAnyListPatternTextIOTupleTypeVarUnionoverload)Modulemodutilsnodes)PY_EXTS)
OptionDict)      )Literal)BaseChecker)PyLinterO   )zsuggestion-modezanalyse-fallback-blockszallow-global-unused-variables)zmax-line-lengthzdocstring-min-lengthzignored-modules)zno-docstring-rgxzdummy-variables-rgxzignored-argument-nameszmixin-class-rgx)zexclude-too-few-public-methodszignore-paths
py-versionT_GlobalOptionReturnTypes. textstrline_lenintindentreturnc                X    d                     t          j        | |||                    S )z'Wrap the text on the given line length.
)widthinitial_indentsubsequent_indent)jointextwrapwrap)r   r    r"   s      2lib/python3.11/site-packages/pylint/utils/utils.pynormalize_textr-   Z   s7     996	
 	
 	
      )=-+aint | floatbc                    | |k    | |k     z
  S N )r2   r4   s     r,   cmpr8   i   s    Ea!er.   oldnewc                t    t          | |z
            }t          t          | |                    |r|dpd }|S )zUGiven an old and new int value, return a string representing the
    difference.
    z.2fr   )absCMPSr8   )r9   r:   diffdiff_strs       r,   diff_stringr@   m   sC     sSy>>Ds3}}%Et'=4'CEEHOr.   nodenodes.NodeNGtuple[str, str]c                p   |                      d          }dg }}|rpt          |t                    r|j        }n$|                    t          |dd                     	 |j                             d          }n# t          $ r Y nw xY w|p|                                 |d	                    |          fS )z6Return the module name and the frame id in the module.T)futurer   namez<lambda>.)
frame
isinstancer   rF   appendgetattrparentAttributeErrorreverser)   )rA   rH   moduleobjs       r,   get_module_and_frameidrQ   v   s    JJdJ##EbCF
 eV$$ 	;ZFFJJwufj99:::	L&&d&33EE 	 	 	E	   KKMMM388C==  s   A; ;
BBtitle	characterc                2    |  d|t          |           z   dS )zgPermit to get a title formatted as ReStructuredText test (underlined with a
    chosen character).
    r%   )len)rR   rS   s     r,   get_rst_titlerV      s&     11y3u::-1111r.   section
str | Noneoptions!list[tuple[str, OptionDict, Any]]docc                   d}| r|t          | d          z  }|rt          |          }|| dz  }|D ]\  }}}|                    d          }|d| dz  }|r0t          |t                    sJ t          |d          }	||	 d	z  }|r@|d
k    r:t	          t          ||                    }|d|                    dd           dz  }|S )zHFormat an option's section using as a ReStructuredText formatted output.r   'z

help:z:
z  r"   r%   r   z
  Default: ``z`` z```` ``z``
)rV   r-   getrI   r   _format_option_valuereplace)
rW   rY   r[   resultformatted_docoptnameoptdictvaluehelp_optformatted_helps
             r,   get_rst_sectionrk      s'    F .----
 )&s++]((((#* 	N 	N%;;v&&"g"""" 	,h,,,,,+HTBBBN++++F 	NW, 	N,We<<==EMeY(G(GMMMMFMr.   strictstreamBufferedReader | BytesIOencodingerrorsLiteral['strict']codecs.StreamReaderc                    	 t          j        |pt          j                              }n5# t          $ r( t          j        t          j                              }Y nw xY w || |          S r6   )codecs	getreadersysgetdefaultencodingLookupError)rm   ro   rp   
reader_clss       r,   decoding_streamrz      sv    
@%h&J#2H2J2JKK

 @ @ @%c&<&>&>??


@:ff%%%s   '* /AAnodes.Modulelist[tokenize.TokenInfo]c                    |                                  5 }|j        }t          t          j        |                    cd d d            S # 1 swxY w Y   d S r6   )rm   readlinelisttokenize)rA   rm   r~   s      r,   tokenize_moduler      s    	 1&?H%h//001 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1s   (A

AAlinterr   	directoryNonec                   i }t          j        |          D ]5}t           j                            |          \  }}||v s|dk    r0|t          v r|dk    sT|st           j                            t           j                            ||                    r|                    d          s	 t          j	        t           j                            ||                    }t          |d          r|                    |            d||<   # t          $ r Y t          $ r,}t          d| d| t          j                   Y d	}~-d	}~ww xY w7d	S )
zLoad all module and package in the given directory, looking for a
    'register' function in each one, used to register pylint checkers.
    __pycache____init__rG   register   zProblem importing module z: fileN)oslistdirpathsplitextr   isdirr)   
startswithr   load_module_from_filehasattrr   
ValueErrorImportErrorprintrv   stderr)r   r   importedfilenamebase	extensionrO   excs           r,   register_pluginsr      s    HJy)) ' ''**844i8 	t}4 	 	'
"	' 		'
 GMM"',,y$"?"?@@	' !++C00	''!7GLLH55  6:.. 'OOF+++%&HTN     V V VC(CCcCC#*UUUUUUUUUV)' 's   +2D
E		E	!EE	checkerr   optionGLOBAL_OPTION_BOOLdefaultbool | Noneboolc                    d S r6   r7   r   r   r   s      r,   get_global_optionr      	     Cr.   GLOBAL_OPTION_INT
int | Nonec                    d S r6   r7   r   s      r,   r   r      r   r.   GLOBAL_OPTION_LISTlist[str] | None	list[str]c                    d S r6   r7   r   s      r,   r   r      	     Cr.   GLOBAL_OPTION_PATTERNPattern[str] | NonePattern[str]c                    d S r6   r7   r   s      r,   r   r      r   r.   GLOBAL_OPTION_PATTERN_LISTlist[Pattern[str]] | Nonelist[Pattern[str]]c                    d S r6   r7   r   s      r,   r   r      r   r.   GLOBAL_OPTION_TUPLE_INTtuple[int, ...] | Nonetuple[int, ...]c                    d S r6   r7   r   s      r,   r   r     r   r.   GLOBAL_OPTION_NAMES T_GlobalOptionReturnTypes | None&T_GlobalOptionReturnTypes | None | Anyc                    t          j        dt          d           t          | j        j        |                    dd                    S )a  DEPRECATED: Retrieve an option defined by the given *checker* or
    by all known option providers.

    It will look in the list of all options providers
    until the given *option* will be found.
    If the option wasn't found, the *default* value will be returned.
    zkget_global_option has been deprecated. You can use checker.linter.config to get all global options instead.   
stacklevelr0   _)warningswarnDeprecationWarningrK   r   configrc   r   s      r,   r   r     sN     M	C	    7>(&..c*B*BCCCr.   ,stringsepc                @    d |                      |          D             S )a&  Return a list of stripped string by splitting the string given as
    argument on `sep` (',' by default), empty strings are discarded.

    >>> _splitstrip('a, b, c   ,  4,,')
    ['a', 'b', 'c', '4']
    >>> _splitstrip('a')
    ['a']
    >>> _splitstrip('a,
b,
c,')
    ['a', 'b', 'c']

    :type string: str or unicode
    :param string: a csv line

    :type sep: str or unicode
    :param sep: field separator, default to the comma (',')

    :rtype: str or unicode
    :return: the unquoted string (or the input string if it wasn't quoted)
    c                ^    g | ]*}|                                 |                                 +S r7   strip).0words     r,   
<listcomp>z_splitstrip.<locals>.<listcomp>5  s-    GGGT$**,,GDJJLLGGGr.   )split)r   r   s     r,   _splitstripr   !  s%    ( HGV\\#%6%6GGGGr.   c                ^    | s| S | d         dv r
| dd         } | d         dv r
| dd         } | S )zRemove optional quotes (simple or double) from the string.

    :param string: an optionally quoted string
    :return: the unquoted string (or the input string if it wasn't quoted)
    r   z"'r   Nr7   )r   s    r,   _unquoter   8  sR      ayE bzU Mr.   rh   list[str] | tuple[str] | strSequence[str]c                \    t          | t          t          f          r| S t          |           S r6   )rI   r   tupler   )rh   s    r,   
_check_csvr   G  s+    %$'' ur.   c                x    d |                                  D             }d}d| d                    |          z   S )zReturn string as a comment.c                6    g | ]}|                                 S r7   r   )r   lines     r,   r   z_comment.<locals>.<listcomp>O  s     :::dTZZ\\:::r.   r%   # )
splitlinesr)   )r   linesr   s      r,   _commentr   M  sC    ::f&7&7&9&9:::E
CS***//%((((r.   rg   r   r   c                n                          dd          dk    r d                    d |D                       }nt          |t          t          f          r"d                     fd|D                       }nt          |t
                    r2d                    d |                                D                       }ngt          |d	          r|j        }nO                      d          d
k    r|rdnd}n/t          |t                    r|
                                rd| d}t          |          S )zfReturn the user input's value from a 'compiled' value.

    TODO: 3.0: Remove deprecated function
    typeN
py_versionrG   c              3  4   K   | ]}t          |          V  d S r6   )r   )r   items     r,   	<genexpr>z'_format_option_value.<locals>.<genexpr>Z  s(      55tT555555r.   r   c              3  8   K   | ]}t          |          V  d S r6   )rb   )r   r   rg   s     r,   r   z'_format_option_value.<locals>.<genexpr>\  s.      OO-gt<<OOOOOOr.   c              3  *   K   | ]\  }}| d | V  dS )r_   Nr7   )r   kvs      r,   r   z'_format_option_value.<locals>.<genexpr>^  s0      >>1A>>>>>>r.   matchynyesnor]   )ra   r)   rI   r   r   dictitemsr   patternr   isspace)rg   rh   s   ` r,   rb   rb   T  s:   
 {{64  L0 55u55555	ED%=	)	) 
OOOOOOOOO	E4	 	  >>>>>>>		 	  	V			$ (D	E3		 EMMOO Eu::r.   r   c                V   t          j        dt          d           |rt          t	          |          |            t          d| d|            t          j                    5  t          j        dt                     t          | |           d	d	d	           d	S # 1 swxY w Y   d	S )
z0Format an option's section using the INI format.zEformat_section has been deprecated. It will be removed in pylint 3.0.r   r   r   []ignore)categoryN)r   r   r   r   r   catch_warningsfilterwarnings_ini_format)rm   rW   rY   r[   s       r,   format_sectionr   i  s     MO   
  *hsmm&))))	.g...v&&&&		 	"	" % %3EFFFFFG$$$% % % % % % % % % % % % % % % % % %s   %,BB"%B"c                P   t          j        dt          d           |D ]\  }}}d|v r(t          |d         t                    sJ d|d         v r3t          ||          }|                    d          }|rJt          |t                    sJ t          |d          }t          | 	           t          || 	           nt          | 	           |d
v rt          d| d| 	           t          |          
                                }t          j        dt          |                    r^ddt          |          z  z   }|                    d t          |                              d          D                       }|dd         }t          | d| | 	           dS )z$Format options using the INI format.zB_ini_format has been deprecated. It will be removed in pylint 3.0.r   r   kwargs	new_namesr^   r   r`   r   >   r   False#r/   z^([\w-]+,)+[\w-]+$z
  c              3      K   | ]	}|d z   V  
dS )r   Nr7   )r   xs     r,   r   z_ini_format.<locals>.<genexpr>  s&      &N&N1q3w&N&N&N&N&N&Nr.   r   Nr   )r   r   r   rI   r   rb   ra   r   r-   r   r   rer   rU   r)   r   )rm   rY   rf   rg   rh   ri   	separators          r,   r   r   }  s   ML   
 $+ 5 5%w 	gh/66666gh// $We44;;v&& 	h,,,,,%ht<<<Hv((((((v%% 		5.g...v.....JJ$$&&Ex-s5zz:: #!C#g,,$66	!&N&NE

8H8H8M8M&N&N&NNNcrc
W&&u&&V4444415 5r.   c                  "    e Zd ZdZddZdd	Zd
S )IsortDriverzAA wrapper around isort API that changed between versions 4 and 5.r   argparse.Namespacer#   r   c                    t           r2t          j                            |j        |j                  | _        d S t          j        d|j        |j                  | _        d S )N)extra_standard_libraryknown_third_partyr   )file_contentsknown_standard_libraryr  )	HAS_ISORT_5isortsettingsConfigr  r  isort5_configSortImports
isort4_obj)selfr   s     r,   r   zIsortDriver.__init__  sk     	!&!6!6
 (.'D"(": "7 " "D $/ '-'D"(":  DOOOr.   packager   c                    t           r%t          j                            || j                  S | j                            |          S r6   )r  r  apiplace_moduler  r  )r  r  s     r,   r  zIsortDriver.place_module  s<     	G9))'43EFFF++G444r.   N)r   r
  r#   r   )r  r   r#   r   )__name__
__module____qualname____doc__r   r  r7   r.   r,   r	  r	    sB        KK   $5 5 5 5 5 5r.   r	  )r   r   r    r!   r"   r   r#   r   )r2   r3   r4   r3   r#   r!   )r9   r3   r:   r3   r#   r   )rA   rB   r#   rC   )rR   r   rS   r   r#   r   r6   )rW   rX   rY   rZ   r[   rX   r#   r   )rl   )rm   rn   ro   r   rp   rq   r#   rr   )rA   r{   r#   r|   )r   r   r   r   r#   r   ).)r   r   r   r   r   r   r#   r   )r   r   r   r   r   r   r#   r!   )r   r   r   r   r   r   r#   r   )r   r   r   r   r   r   r#   r   )r   r   r   r   r   r   r#   r   )r   r   r   r   r   r   r#   r   )r   r   r   r   r   r   r#   r   )r   )r   r   r   r   r#   r   )r   r   r#   r   )rh   r   r#   r   )rg   r   rh   r   r#   r   )
rm   r   rW   r   rY   rZ   r[   rX   r#   r   )rm   r   rY   rZ   r#   r   )L
__future__r   	isort.apir  isort.settingsr  r   argparsert   r   r  rv   r*   r   r   collections.abcr   ior   r   typingr   r   r	   r
   r   r   r   r   r   astroidr   r   r   pylint.constantsr   pylint.typingr   version_infor   typing_extensionspylint.checkers.base_checkerr   pylint.lintr   DEFAULT_LINE_LENGTHr   r   r   r   r   r   r   r   r!   r   r   r-   r=   r8   r@   rQ   rV   rk   rz   r   r   r   r   r   r   r   rb   r   r   r	  r7   r.   r,   <module>r/     s  
 # " " " " "KK   LLLKKK
   				 				 



    $ $ $ $ $ $ & & & & & & & &
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 , + + + + + + + + + $ $ $ $ $ $ $ $ $ $ $ $v *)))))) %888888$$$$$$  % 
 EF ./   %%UV !,/   $GICL	#s(O    3"           ! ! ! !"2 2 2 2     8 !)	& 	& 	& 	& 	&1 1 1 1' ' ' 'B 
MP    
 
KN    
 
 !$    
 
 $'    
 
 *-    
 
 '*    
 15D D D D D*H H H H H.      ) ) ) )   2 	% % % % %(5 5 5 5D5 5 5 5 5 5 5 5 5 5s   
 !!