§
    öyIfñ®  ã                  óL  — 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	m
Z
 ddlmZmZ ddlZddlmZmZmZ ddlmZ dd	lmZmZmZmZ dd
lmZ ddlmZ ddlmZ erddlm Z  dZ!h d£Z"ej#        ej$        ej%        fZ& ej'        dd (                    e"¦  «        › d�¦  «        Z) ej'        dd (                    e"¦  «        › d�¦  «        Z* ej'        dd (                    e"¦  «        › d�ej+        ¦  «        Z,i dd“dd“dd“dd“dd“dd “d!d"“d#d$“d%d&“d'd(“d)d*“d+d,“d-d.“d/d0“d1d2“d3d4“d5d6“d7d8d9d:œ¥Z-d;e.d<<   ej/        ej0        ej1        ej2        ej3        ej4        ej5        fZ6dWdC„Z7dXdH„Z8 G dI„ dJe¦  «        Z9 G dK„ dLee¦  «        Z:dYdP„Z;dZdR„Z<d[dT„Z=d\dU„Z>d[dV„Z?dS )]z)Checker for string formatting operations.é    )ÚannotationsN)ÚCounter)ÚIterableÚSequence)ÚTYPE_CHECKINGÚLiteral)ÚbasesÚnodesÚutil)ÚSuccessfulInferenceResult)ÚBaseCheckerÚBaseRawFileCheckerÚBaseTokenCheckerÚutils)Úonly_required_for_messages)ÚHIGH)ÚMessageDefinitionTuple)ÚPyLinter)z__builtin__.unicodez__builtin__.strúbuiltins.str>   ÚBÚFÚRÚUÚbÚfÚrÚuÚBRÚBrÚFRÚFrÚRBÚRFÚRbÚRfÚbRÚbrÚfRÚfrÚrBÚrFÚrbÚrfú(ú|z)?'''z)?"""z)?("|')ÚE1300)z3Unsupported format character %r (%#02x) at index %dúbad-format-characterzEUsed when an unsupported format character is used in a format string.ÚE1301)z4Format string ends in middle of conversion specifierútruncated-format-stringzNUsed when a format string terminates before the end of a conversion specifier.ÚE1302)z?Mixing named and unnamed conversion specifiers in format stringúmixed-format-stringzÛUsed when a format string contains both named (e.g. '%(foo)d') and unnamed (e.g. '%d') conversion specifiers.  This is also used when a named conversion specifier contains * for the minimum field width and/or precision.ÚE1303)z*Expected mapping for format string, not %súformat-needs-mappingzoUsed when a format string that uses named conversion specifiers is used with an argument that is not a mapping.ÚW1300)z7Format string dictionary key should be a string, not %súbad-format-string-keyzyUsed when a format string that uses named conversion specifiers is used with a dictionary whose keys are not all strings.ÚW1301)z)Unused key %r in format string dictionaryúunused-format-string-keyz�Used when a format string that uses named conversion specifiers is used with a dictionary that contains keys not required by the format string.ÚE1304)z*Missing key %r in format string dictionaryúmissing-format-string-keyzšUsed when a format string that uses named conversion specifiers is used with a dictionary that doesn't contain all the keys required by the format string.ÚE1305)z$Too many arguments for format stringútoo-many-format-argsz^Used when a format string that uses unnamed conversion specifiers is given too many arguments.ÚE1306)z&Not enough arguments for format stringútoo-few-format-argsz\Used when a format string that uses unnamed conversion specifiers is given too few argumentsÚE1307)z)Argument %r does not match format type %rúbad-string-format-typezSUsed when a type required by format string is not suitable for actual argument typeÚE1310)z!Suspicious argument in %s.%s callúbad-str-strip-callzFThe argument to a str.{l,r,}strip call contains a duplicate character,ÚW1302)zInvalid format stringúbad-format-stringz.Used when a PEP 3101 format string is invalid.ÚW1303)z-Missing keyword argument %r for format stringúmissing-format-argument-keyzhUsed when a PEP 3101 format string that uses named fields doesn't receive one or more required keywords.ÚW1304)zUnused format argument %rúunused-format-string-argumentz}Used when a PEP 3101 format string that uses named fields is used with an argument that is not required by the format string.ÚW1305)zTFormat string contains both automatic field numbering and manual field specificationúformat-combined-specificationzƒUsed when a PEP 3101 format string contains both automatic field numbering (e.g. '{}') and manual field specification (e.g. '{0}').ÚW1306)z2Missing format attribute %r in format specifier %rúmissing-format-attributez�Used when a PEP 3101 format string uses an attribute specifier ({0.length}), but the argument passed for formatting doesn't have that attribute.ÚW1307)z2Using invalid lookup key %r in format specifier %rúinvalid-format-indexz¥Used when a PEP 3101 format string uses a lookup specifier ({a[1]}), but the argument passed for formatting doesn't contain or doesn't have that key as an attribute.)zKDuplicate string formatting argument %r, consider passing as named argumentú$duplicate-string-formatting-argumentzmUsed when we detect that a string formatting is repeating an argument instead of using named string arguments)z?Using an f-string that does not have any interpolated variablesúf-string-without-interpolationz“Used when we detect an f-string that does not use any interpolation variables, in which case it can be either a normal string or a bug in the code.)zKUsing formatting for a string that does not have any interpolated variablesú#format-string-without-interpolationz¤Used when we detect a string that does not have any interpolation variables, in which case it can be either a normal string without formatting or a bug in the code.)ÚW1308ÚW1309ÚW1310z!dict[str, MessageDefinitionTuple]ÚMSGSÚkeyústr | Literal[0]Úpartsúlist[tuple[bool, str]]ÚreturnÚstrc                óÈ   — g }|D ]9\  }}|r|                      d|› �¦  «         Œ |                      d|›d�¦  «         Œ:t          | ¦  «        d                     |¦  «        z   S )z]Given a list of format specifiers, returns
    the final access path (e.g. a.b.c[0][1]).
    ú.ú[ú]Ú )Úappendr^   Újoin)rY   r[   ÚpathÚis_attributeÚ	specifiers        úK/var/www/piapp/venv/lib/python3.11/site-packages/pylint/checkers/strings.pyÚget_access_pathrj   Ò   s|   € ð €DØ#(ð ,ð ,Ñˆ�iØð 	,Ø�KŠK˜˜I˜˜Ñ(Ô(Ð(Ð(à�KŠKÐ*˜IÐ*Ð*Ð*Ñ+Ô+Ð+Ð+Ýˆs‰8Œ8�b—g’g˜d‘m”mÑ#Ð#ó    Úarg_typer   Úformat_typeÚboolc                ó®   — |dv rdS t          | t          j        ¦  «        r4|                      ¦   «         } | dk    r|dk    S | dk    r|dv S | dk    rdS dS dS )	NÚsrTr   Úczbuiltins.floatz	deEfFgGn%zbuiltins.intF)Ú
isinstanceÚastroidÚInstanceÚpytype)rl   rm   s     ri   Úarg_matches_format_typerv   ß   s   € ð �dÐÐàˆtÝ�(�GÔ,Ñ-Ô-ð 	Ø—?’?Ñ$Ô$ˆØ�~Ò%Ð%Ø #Ò%Ð%ØÐ'Ò'Ð'Ø +Ð-Ð-Ø�~Ò%Ð%à�4ØˆuØˆ4rk   c                  óª   — e Zd ZdZdZeZ eddddddd	d
ddd¦  «        d%d„¦   «         Z ed¦  «        d&d„¦   «         Z	d&d„Z
d'd„Zd(d„Zd)d„Zd*d#„Zd$S )+ÚStringFormatCheckerz�Checks string formatting operations to ensure that the format string
    is valid and the arguments match the format string.
    Ústringr1   r3   r5   r9   r=   r;   rC   r7   r?   rA   rT   Únodeúnodes.BinOpr]   ÚNonec           	     óî	  — |j         dk    rd S |j        }|j        }t          |t          j        ¦  «        rt          |j        t          ¦  «        sd S |j        }	 t          j	        |¦  «        \  }}}}n# t          j
        $ rE}	||	j                 }
|                      d||
t          |
¦  «        |	j        f¬¦  «         Y d }	~	d S d }	~	wt          j        $ r |                      d|¬¦  «         Y d S w xY w|s|s|                      d|¬¦  «         d S |r|r|                      d|¬¦  «         d S |�rçt          |t          j        ¦  «        �r{t!          ¦   «         }d}|j        D ]l\  }}t          |t          j        ¦  «        rK|j        }t          |t          ¦  «        r|                     |¦  «         ŒQ|                      d	||¬¦  «         Œjd
}Œm|s!|D ]}||vr|                      d||¬¦  «         Œ|D ]}||vr|                      d||¬¦  «         Œ|j        D ]©\  }}t          |t          j        ¦  «        sŒ |                     |j        d ¦  «        }t          j        |¦  «        }|�X|rVt          |t*          j        ¦  «        s<t/          ||¦  «        s,|                      d||                     ¦   «         |f¬¦  «         Œªd S t          |t2          t          j        f¦  «        r.t7          |¦  «        j        }|                      d||¬¦  «         d S d S g }t          |t          j        ¦  «        rGt          j        |¦  «        }d }t          |t          j        ¦  «        r|j        }t?          |¦  «        }n·t          |t2          t          j        t          j         ff¦  «        r|g}d}n„t          |t          j!        ¦  «        rht          j        |¦  «        }t          |t          j        ¦  «        r|j        }t?          |¦  «        }n%t          |t          j        ¦  «        r|g}d}nd }nd }|�À||k    r|                      d|¬¦  «         n||k     r|                      d|¬¦  «         tE          ||¦  «        D ]v\  }}|sŒt          j        |¦  «        }|rVt          |t*          j        ¦  «        s<t/          ||¦  «        s,|                      d||                     ¦   «         |f¬¦  «         Œud S d S )Nú%r1   ©rz   Úargsr3   ©rz   rT   r5   Fr9   Tr=   r;   rC   r7   é   r?   rA   )#ÚopÚleftÚrightrr   r
   ÚConstÚvaluer^   r   Úparse_format_stringÚUnsupportedFormatCharacterÚindexÚadd_messageÚordÚIncompleteFormatStringÚDictÚsetÚitemsÚaddÚgetÚ
safe_inferr   ÚUninferableBaserv   ru   ÚOTHER_NODESÚTupleÚtypeÚ__name__ÚBaseContainerÚeltsÚlenÚDictCompÚNameÚzip)Úselfrz   r„   r€   Úformat_stringÚrequired_keysÚrequired_num_argsÚrequired_key_typesÚrequired_arg_typesÚexcÚ	formattedÚkeysÚunknown_keysÚkÚ_rY   Úargrm   rl   Ú	type_nameÚ	args_eltsÚ	rhs_tupleÚnum_argsÚinferreds                           ri   Úvisit_binopzStringFormatChecker.visit_binopû   sø  € ð Œ7�cŠ>ˆ>ØˆFØŒyˆØŒzˆå˜4¥¤Ñ-Ô-ð 	µ*¸T¼ZÍÑ2MÔ2Mð 	ØˆFØœ
ˆð	õ Ô)¨-Ñ8Ô8ñØØ!Ø"Ø"Ð"øåÔ/ð 	ð 	ð 	Ø% c¤iÔ0ˆIØ×ÒØ&ØØ¥ Y¡¤°´Ð;ð ñ ô ð ð
 ˆFˆFˆFˆFˆFøøøøÝÔ+ð 	ð 	ð 	Ø×ÒÐ6¸TÐÑBÔBÐBØˆFˆFð	øøøð ð 	Ð%6ð 	Ø×ÒÐBÈÐÑNÔNÐNØˆFØð o	Ð.ð o	ð ×ÒÐ2¸ÐÑ>Ô>Ð>Ð>Ð>Øñ k	õ
 ˜$¥¤
Ñ+Ô+ñ /TÝ‘u”u�Ø$�Ø œJð ,ð ,‘D�A�qÝ! !¥U¤[Ñ1Ô1ð ,Øœg˜Ý% c­3Ñ/Ô/ð Ø ŸHšH S™MœM˜M˜Mà ×,Ò,Ø 7¸dÈð -ñ ô ð ð ð (,˜˜Ø#ð Ø,ð ð ˜Ø d˜?˜?Ø ×,Ò,Ø ;À$ÈSð -ñ ô ð øð  ð ð �CØ -Ð/Ð/Ø×(Ò(Ø6¸TÈð )ñ ô ð øð !%¤
ð ð ‘H�C˜Ý% c­5¬;Ñ7Ô7ð !Ø Ø"4×"8Ò"8¸¼ÀDÑ"IÔ"I�KÝ$Ô/°Ñ4Ô4�Hà#Ð/Ø$ð 0å *¨8µTÔ5IÑ JÔ Jð 0õ !8¸À+Ñ NÔ Nð 0ð
 ×(Ò(Ø4Ø!%Ø"*§/¢/Ñ"3Ô"3°[Ð!Að )ñ ô ð øðð õ  ˜D¥;µ´Ð"<Ñ=Ô=ð TÝ  ™JœJÔ/�	Ø× Ò Ð!7¸dÈÐ ÑSÔSÐSÐSÐSðTð Tð ˆIÝ˜$¥¤Ñ,Ô,ð  Ý!Ô,¨TÑ2Ô2�	Ø�Ý˜i­Ô)<Ñ=Ô=ð .Ø )¤�IÝ" 9™~œ~�HøÝ˜D¥;µ´½U¼^Ð0LÐ"MÑNÔNð  Ø!˜F�	Ø��Ý˜D¥%¤*Ñ-Ô-ð  Ý Ô+¨DÑ1Ô1�Ý˜h­¬Ñ4Ô4ð 	$ð !)¤�IÝ" 9™~œ~�H�HÝ ­%¬+Ñ6Ô6ð $Ø!) 
�IØ �H�Hà#�H�Hð
  �ØÐ#ØÐ/Ò/Ð/Ø×$Ò$Ð%;À$Ð$ÑGÔGÐGÐGØÐ 1Ò1Ð1Ø×$Ò$Ð%:ÀÐ$ÑFÔFÐFÝ(+¨IÐ7IÑ(JÔ(Jð ð Ñ$�C˜Øð !Ø Ý$Ô/°Ñ4Ô4�Hà ð	å *¨8µTÔ5IÑ JÔ Jð	õ !8¸À+Ñ NÔ Nð	ð
 ×(Ò(Ø4Ø!%Ø"*§/¢/Ñ"3Ô"3°[Ð!Að )ñ ô ð øð $Ð#ð
ð s   ÁA4 Á4C0Â:CÃ)C0Ã/C0rS   únodes.JoinedStrc                ó0   — |                       |¦  «         d S ©N)Ú_check_interpolation©rŸ   rz   s     ri   Úvisit_joinedstrz#StringFormatChecker.visit_joinedstr—  s   € à×!Ò! $Ñ'Ô'Ð'Ð'Ð'rk   c                óÄ   — t          |j        t          j        ¦  «        rd S |j        D ]}t          |t          j        ¦  «        r d S Œ |                      d|¬¦  «         d S )NrS   r�   )rr   Úparentr
   ÚFormattedValueÚvaluesr‹   )rŸ   rz   r‡   s      ri   rµ   z(StringFormatChecker._check_interpolation›  sp   € Ý�d”k¥5Ô#7Ñ8Ô8ð 	ØˆFØ”[ð 	ð 	ˆEÝ˜%¥Ô!5Ñ6Ô6ð Ø��ðà×ÒÐ9ÀÐÑEÔEÐEÐEÐErk   ú
nodes.Callc                ó¬  — t          j        |j        ¦  «        }t          |t          j        ¦  «        �rt          |j        t          j        ¦  «        rü|j        j        dv rð|j        dv rÀ|j	        r¹t          j        |j	        d         ¦  «        }t          |t          j        ¦  «        rt          |j        t          ¦  «        sd S t          |j        ¦  «        t          t          |j        ¦  «        ¦  «        k    r+|                      d||j        j        |j        f¬¦  «         d S d S |j        dk    r|                      ||¦  «         d S d S d S d S d S )N>   r^   ÚbytesÚunicode>   ÚstripÚlstripÚrstripr   rE   r   Úformat)r   r“   Úfuncrr   rs   ÚBoundMethodÚboundrt   Únamer€   r
   r†   r‡   r^   r›   r�   r‹   Ú_check_new_format)rŸ   rz   rÄ   r«   s       ri   Ú
visit_callzStringFormatChecker.visit_call£  s_  € ÝÔ ¤	Ñ*Ô*ˆå�t�WÔ0Ñ1Ô1ñ	3å˜4œ:¥wÔ'7Ñ8Ô8ð	3ð ”
”Ð#>Ð>Ð>àŒyÐ9Ð9Ð9¸d¼iÐ9ÝÔ& t¤y°¤|Ñ4Ô4�Ý! #¥u¤{Ñ3Ô3ð ½:ÀcÄiÕQTÑ;UÔ;Uð Ø�FÝ�s”y‘>”>¥S­¨S¬Y©¬Ñ%8Ô%8Ò8Ð8Ø×$Ò$Ø,Ø!Ø"œjœo¨t¬yÐ9ð %ñ ô ð ð ð ð 9Ð8ð ”˜hÒ&Ð&Ø×&Ò& t¨TÑ2Ô2Ð2Ð2Ð2ð!	3ð 	3ð 	3ð 	3ð ?Ð>ð 'Ð&rk   Úpositional_argumentsúlist[SuccessfulInferenceResult]c                ó¶   — t          j        d„ |D ¦   «         ¦  «        }|                     ¦   «         D ]%\  }}|dk    rŒ|                      d||f¬¦  «         Œ&d S )Nc              3  óX   K  — | ]%}t          |t          j        ¦  «        ¯|j        V — Œ&d S r´   )rr   r
   r�   rÇ   )Ú.0r«   s     ri   ú	<genexpr>zAStringFormatChecker._detect_vacuous_formatting.<locals>.<genexpr>º  sI   è è € ð &
ð &
Ø½
À3ÍÌ
Ñ8SÔ8Sð&
ØŒHð&
ð &
ð &
ð &
ð &
ð &
rk   r‚   rR   r   )Úcollectionsr   r�   r‹   )rŸ   rz   rÊ   ÚcounterrÇ   Úcounts         ri   Ú_detect_vacuous_formattingz.StringFormatChecker._detect_vacuous_formatting·  s�   € õ Ô%ð &
ð &
Ø 4ð&
ñ &
ô &
ñ 
ô 
ˆð #Ÿ=š=™?œ?ð 	ð 	‰KˆD�%Ø˜ŠzˆzØØ×ÒØ6¸TÈÈð ñ ô ð ð ð	ð 	rk   rÄ   úbases.BoundMethodc                ó~  — t          |j        t          j        ¦  «        r&t          |j        j        t          j        ¦  «        sdS |j        s|j        rdS 	 t          |j	         
                    ¦   «         ¦  «        }n# t          j        $ r Y dS w xY wt          |t          j        ¦  «        rt          |j        t          ¦  «        sdS 	 t          j        j                             |¦  «        }n# t          j        $ r Y dS w xY w	 t%          j        |j        ¦  «        \  }}}n-# t$          j        $ r |                      d|¬¦  «         Y dS w xY w|j        }|j        }	d„ |D ¦   «         }
|r|r|                      d|¬¦  «         dS d}|t1          d„ |
D ¦   «         ¦  «        z  }|
ro|
D ]!}|r||	vr|                      d||f¬	¦  «         Œ"|	D ]}||
vr|                      d
||f¬	¦  «         Œ |p|}|s|r t3          d„ |
D ¦   «         ¦  «         }|	s|rd}nd}|rt|p|}|s|                      d|¬¦  «         dS t5          |¦  «        |k    r|                      d|¬¦  «         n*t5          |¦  «        |k     r|                      d|¬¦  «         |                      ||¦  «         |                      |||	¦  «         dS )z Check the new string formatting.NrG   r�   c                óT   — h | ]%}t          |d          t          ¦  «        ¯|d          ’Œ&S )r   )rr   r^   ©rÎ   Úfields     ri   ú	<setcomp>z8StringFormatChecker._check_new_format.<locals>.<setcomp>ê  s/   € ÐRÐRÐR U½
À5ÈÄ8ÍSÑ8QÔ8QÐR˜˜aœÐRÐRÐRrk   rM   Fc              3  ó   K  — | ]}|°d V — Œ	dS )r‚   N© r×   s     ri   rÏ   z8StringFormatChecker._check_new_format.<locals>.<genexpr>ñ  s'   è è € ÐAÐA˜e¸5ÐA˜ÐAÐAÐAÐAÐAÐArk   rI   r   rK   c              3  ó   K  — | ]}|V — Œd S r´   rÛ   r×   s     ri   rÏ   z8StringFormatChecker._check_new_format.<locals>.<genexpr>   s"   è è € Ð@Ð@¨% Ð@Ð@Ð@Ð@Ð@Ð@rk   TrT   r?   rA   )rr   rÄ   r
   Ú	AttributeÚexprr†   ÚstarargsÚkwargsÚnextrÆ   Úinferrs   ÚInferenceErrorr‡   r^   Ú	argumentsÚCallSiteÚ	from_callr   Úparse_format_method_stringr�   r‹   rÊ   Úkeyword_argumentsÚsumÚallr›   rÓ   Ú_check_new_format_specifiers)rŸ   rz   rÄ   ÚstrnodeÚ	call_siteÚfieldsr¯   Ú
manual_posrÊ   Únamed_argumentsÚnamed_fieldsÚ
check_argsrØ   Úemptys                 ri   rÈ   z%StringFormatChecker._check_new_formatÄ  s¤  € õ �d”i¥¤Ñ1Ô1ð 	½*ØŒIŒN�EœKñ;
ô ;
ð 	ð ˆFØŒ=ð 	˜DœKð 	ØˆFð	Ý˜4œ:×+Ò+Ñ-Ô-Ñ.Ô.ˆGˆGøÝÔ%ð 	ð 	ð 	ØˆFˆFð	øøøå˜7¥E¤KÑ0Ô0ð 	µZÀÄÍsÑ5SÔ5Sð 	ØˆFð	ÝÔ)Ô2×<Ò<¸TÑBÔBˆIˆIøÝÔ%ð 	ð 	ð 	ØˆFˆFð	øøøð	Ý+0Ô+KØ”ñ,ô ,Ñ(ˆF�H˜j˜jøõ Ô+ð 	ð 	ð 	Ø×ÒÐ0°tÐÑ<Ô<Ð<ØˆFˆFð	øøøð  )Ô=ÐØ#Ô5ˆØRÐR¨fÐRÑRÔRˆØð 	˜
ð 	Ø×ÒÐ<À4ÐÑHÔHÐHØˆFàˆ
à•CÐAÐA |ÐAÑAÔAÑAÔAÑAˆØð 	Ø%ð ð �Øð ˜U¨/Ð9Ð9Ø×$Ò$Ø5¸DÈÀxð %ñ ô ð øð )ð ð �Ø Ð,Ð,Ø×$Ò$Ø7¸dÈ%Èð %ñ ô ð øð  Ð- :ˆHØ#ð & xð &ÝÐ@Ð@°<Ð@Ñ@Ô@Ñ@Ô@Ð@�Ø"ð & eð &ð "&�JøàˆJØð 		CàÐ- :ˆHØð Ø× Ò Ð!FÈTÐ ÑRÔRÐRØ�ÝÐ'Ñ(Ô(¨8Ò3Ð3Ø× Ò Ð!7¸dÐ ÑCÔCÐCÐCÝÐ)Ñ*Ô*¨XÒ5Ð5Ø× Ò Ð!6¸TÐ ÑBÔBÐBà×'Ò'¨Ð.BÑCÔCÐCØ×)Ò)¨$°¸ÑHÔHÐHÐHÐHs6   Á&A> Á>BÂBÃ$C0 Ã0DÄDÄD% Ä%&EÅErî   ú(list[tuple[str, list[tuple[bool, str]]]]Únamedú$dict[str, SuccessfulInferenceResult]c                ó”  — |D �]Ã\  }}|sd}t          |t          ¦  «        r,	 t          j        ||¦  «        }n"# t          j        $ r Y ŒGw xY w||vrŒP||         }|�t          |t
          j        ¦  «        rŒu	 t          j        |¦  «        }n# t          j	        $ r Y Œœw xY w|r|sŒ¥|j
        r t          |j
        t          j        ¦  «        rŒÌ|}g }	|D �]ï\  }
}t          |t
          j        ¦  «        r �nÎ|	                     |
|f¦  «         |
r‡	 |                     |¦  «        d         }�n]# t          j        $ rW t!          |d¦  «        r|                     ¦   «         rY  �n`t%          ||	¦  «        }|                      d||f|¬¦  «         Y  �n2w xY wd}t!          |d¦  «        r…	 |                     t          j        |¦  «        ¦  «        }n?# t          j        t          j        t          j        f$ r d}Y nt          j	        $ r Y  n¸w xY wt          |t
          j        ¦  «        r n˜n/	 |                     d	¦  «          n# t          j        $ r d}Y nw xY w|r,t%          ||	¦  «        }|                      d
||f|¬¦  «          n:	 t3          |                     ¦   «         ¦  «        }�ŒÛ# t          j	        $ r Y  nw xY w�ŒÅdS )z^Check attribute and index access in the format
        string ("{0.a}" and "{0[a]}").
        r   NÚhas_dynamic_getattrrO   )r€   rz   FÚgetitemTÚ__getitem__rQ   )rr   Úintr   Úget_argument_from_callÚNoSuchArgumentErrorr   r”   r“   rs   rã   r¹   r
   Ú	Argumentsrd   ÚgetattrÚNotFoundErrorÚhasattrrø   rj   r‹   rù   r†   ÚAstroidIndexErrorÚAstroidTypeErrorÚAttributeInferenceErrorrá   râ   )rŸ   rz   rî   rõ   rY   Ú
specifiersÚargnameÚargumentÚpreviousÚparsedrg   rh   rf   Ú
warn_errors                 ri   rë   z0StringFormatChecker._check_new_format_specifiers  sµ  € ð  &ð Y	ñ Y	‰OˆC�ð ð ð �Ý˜#�sÑ#Ô#ð %ðÝ#Ô:¸4ÀÑEÔE�G�GøÝÔ0ð ð ð Ø�Hðøøøð ˜eÐ#Ð#ØØ œ*�Øˆ¥*¨WµdÔ6JÑ"KÔ"KˆØðÝ Ô+¨GÑ4Ô4��øÝÔ)ð ð ð Ø�ðøøøàð  Xð ð ØŒð ¥:¨h¬o½u¼Ñ#OÔ#Oð ð ØˆHØ-/ˆFØ+5ð 8ñ 8Ñ'�˜iÝ˜h­Ô(<Ñ=Ô=ð Ø‘EØ—’˜|¨YÐ7Ñ8Ô8Ð8Øð .ðØ#+×#3Ò#3°IÑ#>Ô#>¸qÔ#A˜™øÝ"Ô0ð ð ð å# HÐ.CÑDÔDð"à (× <Ò <Ñ >Ô >ð"ð
 "˜E™EÝ.¨s°FÑ;Ô;˜Ø×(Ò(Ø6Ø"+¨TÐ!2Ø!%ð )ñ ô ð ð
 ˜™ðøøøð "'�JÝ˜x¨Ñ3Ô3ð .ð	"Ø'/×'7Ò'7½¼ÀIÑ8NÔ8NÑ'OÔ'O˜H˜Høå#Ô5Ý#Ô4Ý#Ô;ð ð .ð .ð .ð
 *.˜J˜J˜JÝ&Ô5ð "ð "ð "Ø!˜E˜Eð"øøøå% hµÔ0DÑEÔEð "Ø!˜Eð"ð.ð %×,Ò,¨]Ñ;Ô;Ð;Ø!˜EøÝ&Ô4ð .ð .ð .Ø)-˜J˜J˜Jð.øøøà!ð Ý.¨s°FÑ;Ô;˜Ø×(Ò(Ø2¸)ÀTÐ9JÐQUð )ñ ô ð ð ˜ðÝ# H§N¢NÑ$4Ô$4Ñ5Ô5�H‘HøÝÔ-ð ð ð à�E�EðøøøùðoY	ð Y	su   £9¹AÁ
AÁ9BÂB ÂB ÄD/Ä/3FÅ&*FÆFÆ+'GÇ(HÇ=HÈHÈ0IÉIÉIÊ!J0Ê0KËKN)rz   r{   r]   r|   )rz   r²   r]   r|   ©rz   r¼   r]   r|   )rz   r¼   rÊ   rË   r]   r|   )rz   r¼   rÄ   rÔ   r]   r|   )rz   r¼   rî   rô   rõ   rö   r]   r|   )r˜   Ú
__module__Ú__qualname__Ú__doc__rÇ   rX   Úmsgsr   r±   r·   rµ   rÉ   rÓ   rÈ   rë   rÛ   rk   ri   rx   rx   ò   s%  € € € € € ðð ð €DØ€Dð  ÐØØ!ØØØ#Ø"Ø ØØØØ-ñô ðMð Mð Mñô ðMð^  ÐÐ @ÑAÔAð(ð (ð (ñ BÔAð(ðFð Fð Fð Fð3ð 3ð 3ð 3ð(ð ð ð ðRIð RIð RIð RIðjcð cð cð cð cð crk   rx   c                  ó°  ‡ — e Zd ZdZdZddddddd	gifd
ddœZddddddœfddddddœffZdZdZdKˆ fd„Z	dLd„Z
dMd!„ZdNd&„ZdOd'„Zed(œdPd,„Zed(œdPd-„Z ed¦  «        dQd/„¦   «         Z ed¦  «        dRd1„¦   «         Z ed¦  «        dSd3„¦   «         Z ed¦  «        dTd5„¦   «         ZdUd7„ZdVd9„ZdWd>„ZdXdB„ZdYdF„Z edG¦  «        dZdI„¦   «         ZdZdJ„Zˆ xZS )[ÚStringConstantCheckerzCheck string literals.ry   )zRAnomalous backslash in string: '%s'. String constant might be missing an r prefix.úanomalous-backslash-in-stringzBUsed when a backslash is in a literal string but not as an escape.)zaAnomalous Unicode escape in byte string: '%s'. String constant might be missing an r or u prefix.ú"anomalous-unicode-escape-in-stringzSUsed when an escape like \u is encountered in a byte string where it has no effect.z)Implicit string concatenation found in %súimplicit-str-concatziString literals are implicitly concatenated in a literal iterable definition : maybe a comma is missing ?Ú	old_names)ÚW1403zimplicit-str-concat-in-sequence)z<Quote delimiter %s is inconsistent with the rest of the fileúinconsistent-quoteszxQuote delimiters are not used consistently throughout a module (with allowances made for avoiding unnecessary escaping).)z?The u prefix for strings is no longer necessary in Python >=3.0úredundant-u-string-prefixz®Used when we detect a string with a u prefix. These prefixes were necessary in Python 2 to indicate a string was Unicode, but since Python 3.0 strings are Unicode by default.)ÚW1401ÚW1402ÚW1404ÚW1405ÚW1406z check-str-concat-over-line-jumpsFÚynz<y or n>z–This flag controls whether the implicit-str-concat should generate a warning on implicit string concatenation in sequences defined over several lines.)Údefaultr—   ÚmetavarÚhelpzcheck-quote-consistencyz—This flag controls whether inconsistent-quotes generates a warning when the character used as a quote delimiter is used inconsistently within a module.zabfnrtvx
	\'"01234567ÚuUNÚlinterr   r]   r|   c                óh   •— t          ¦   «                              |¦  «         i | _        	 i | _        d S r´   )ÚsuperÚ__init__Ústring_tokensÚ_parenthesized_string_tokens)rŸ   r#  Ú	__class__s     €ri   r&  zStringConstantChecker.__init__É  s;   ø€ Ý‰Œ×Ò˜Ñ Ô Ð ð ð 	Ôð 	;ØIKˆÔ)Ð)Ð)rk   rz   únodes.Modulec                ó"   — d|j         v | _        d S )NÚunicode_literals)Úfuture_importsÚ_unicode_literalsr¶   s     ri   Úprocess_modulez$StringConstantChecker.process_moduleÑ  s   € Ø!3°tÔ7JÐ!JˆÔÐÐrk   Útokensúlist[tokenize.TokenInfo]c                ó–  — d}t          |¦  «        D �]�\  }\  }}}}}|t          j        k    r|}Œ|t          j        k    �r]|                      ||d         |d         ¦  «         |dz   }	|	t          |¦  «        k     rx||	         j        t          j        t          j        t          j	        fv rH|	dz  }	|	t          |¦  «        k     r0||	         j        t          j        t          j        t          j	        fv °H|	t          |¦  «        k     r||	         nd }
|dk    r8|d         t          |d |d         …          
                    |¦  «        ¦  «        f}t          |¦  «        |
f| j        |<   |                      ||¦  «        o|                      ||¦  «        }|| j        |<   �Œ�| j        j        j        r|                      |¦  «         d S d S )NÚasciir   r‚   )Ú	enumerateÚtokenizeÚENCODINGÚSTRINGÚprocess_string_tokenr›   r—   ÚNEWLINEÚNLÚCOMMENTÚencodeÚstr_evalr'  Ú_is_initial_string_tokenÚ_is_parenthesizedr(  r#  ÚconfigÚcheck_quote_consistencyÚ&check_for_consistent_string_delimiters)rŸ   r0  ÚencodingÚiÚ
token_typeÚtokenÚstartrª   ÚlineÚjÚ
next_tokenÚis_parenthesizeds               ri   Úprocess_tokensz$StringConstantChecker.process_tokensÔ  sè  € ØˆÝ6?ÀÑ6GÔ6Gð 	Lñ 	LÑ2ˆAÑ2�
˜E 5¨!¨TØ�XÔ.Ò.Ð.à ��Ø�xœÒ.Ñ.ð ×)Ò)¨%°°q´¸5À¼8ÑDÔDÐDà˜‘E�Ø�#˜f™+œ+’o�o¨&°¬)¬.ÝÔ$Ý”KÝÔ$ð=ð +ð +ð
 ˜‘F�Að �#˜f™+œ+’o�o¨&°¬)¬.ÝÔ$Ý”KÝÔ$ð=ð +ð +ð +,­c°&©k¬kª/¨/˜V AœY˜Y¸t�
Ø˜wÒ&Ð&ð # 1œX¥s¨4°
°%¸´(°
Ô+;×+BÒ+BÀ8Ñ+LÔ+LÑ'MÔ'MÐN�EÝ-5°e©_¬_¸jÐ,I�Ô" 5Ñ)Ø#'×#@Ò#@Ø�vñ$ô $ð $8à×,Ò,¨Q°Ñ7Ô7ð !ð <L�Ô1°%Ñ8ùàŒ;ÔÔ5ð 	@Ø×7Ò7¸Ñ?Ô?Ð?Ð?Ð?ð	@ð 	@rk   rŠ   rû   úSequence[tokenize.TokenInfo]rn   c                óÔ   — |                       ||¦  «        }|r|j        t          j        k    rdS |                      ||¦  «        }t          |o|j        t          j        k    ¦  «        S )NF)Ú_find_prev_tokenr—   r5  r7  Ú_find_next_tokenrn   ©rŸ   rŠ   r0  Ú
prev_tokenrJ  s        ri   r>  z.StringConstantChecker._is_initial_string_tokenô  se   € ð ×*Ò*¨5°&Ñ9Ô9ˆ
Øð 	˜*œ/­X¬_Ò<Ð<Ø�5à×*Ò*¨5°&Ñ9Ô9ˆ
Ý�JÐE :¤?µh´oÒ#EÑFÔFÐFrk   c                ó\  — |                       ||g t          ¢t          j        ‘R ¬¦  «        }|r!|j        t          j        k    s|d         dk    rdS |                      ||g t          ¢t          j        ‘R ¬¦  «        }t          |o |j        t          j        k    o|d         dk    ¦  «        S )N©Úignorer‚   r.   Fú))rO  Ú_PAREN_IGNORE_TOKEN_TYPESr5  r7  r—   ÚOPrP  rn   rQ  s        ri   r?  z'StringConstantChecker._is_parenthesizedÿ  sÅ   € Ø×*Ò*Ø�6Ð"OÕ$=Ð"O½x¼Ð"OÐ"Oð +ñ 
ô 
ˆ
ð ð 	˜Zœ_µ´Ò;Ð;¸zÈ!¼}ÐPSÒ?SÐ?SØ�5Ø×*Ò*Ø�6Ð"OÕ$=Ð"O½x¼Ð"OÐ"Oð +ñ 
ô 
ˆ
õ ØÐR˜:œ?­h¬kÒ9ÐR¸jÈ¼mÈsÒ>Rñ
ô 
ð 	
rk   rT  rU  útuple[int, ...]útokenize.TokenInfo | Nonec               óŠ   — |dz
  }|dk    r)||         j         |v r|dz  }|dk    r||         j         |v °|dk    r||         nd S )Nr‚   r   )r—   ©rŸ   rŠ   r0  rU  rD  s        ri   rO  z&StringConstantChecker._find_prev_token  s`   € ð �A‰IˆØ�1Šfˆf˜ œœ¨6Ð1Ð1Ø�‰FˆAð �1Šfˆf˜ œœ¨6Ð1Ð1à šF˜Fˆv�aŒyˆy¨Ð,rk   c               óØ   — |dz   }|t          |¦  «        k     r6||         j        |v r'|dz  }|t          |¦  «        k     r||         j        |v °'|t          |¦  «        k     r||         nd S )Nr‚   )r›   r—   r\  s        ri   rP  z&StringConstantChecker._find_next_token  sr   € ð �A‰IˆØ•#�f‘+”+Šoˆo &¨¤)¤.°FÐ":Ð":Ø�‰FˆAð •#�f‘+”+Šoˆo &¨¤)¤.°FÐ":Ð":à¥ F¡¤šO˜Oˆv�aŒyˆy°Ð5rk   r¼   c                ó<   — |                       |j        d¦  «         d S )NÚcall)Úcheck_for_concatenated_stringsr€   r¶   s     ri   rÉ   z StringConstantChecker.visit_call$  ó    € à×+Ò+¨D¬I°vÑ>Ô>Ð>Ð>Ð>rk   ú
nodes.Listc                ó<   — |                       |j        d¦  «         d S )NÚlist©r`  rš   r¶   s     ri   Ú
visit_listz StringConstantChecker.visit_list(  ra  rk   ú	nodes.Setc                ó<   — |                       |j        d¦  «         d S )Nr�   re  r¶   s     ri   Ú	visit_setzStringConstantChecker.visit_set,  s    € à×+Ò+¨D¬I°uÑ=Ô=Ð=Ð=Ð=rk   únodes.Tuplec                ó<   — |                       |j        d¦  «         d S )NÚtuplere  r¶   s     ri   Úvisit_tuplez!StringConstantChecker.visit_tuple0  s    € à×+Ò+¨D¬I°wÑ?Ô?Ð?Ð?Ð?rk   únodes.Assignc                óÂ   — t          |j        t          j        ¦  «        r=t          |j        j        t          ¦  «        r |                      |j        gd¦  «         d S d S d S )NÚ
assignment)rr   r‡   r
   r†   r^   r`  r¶   s     ri   Úvisit_assignz"StringConstantChecker.visit_assign4  si   € Ý�d”j¥%¤+Ñ.Ô.ð 	Lµ:¸d¼jÔ>NÕPSÑ3TÔ3Tð 	LØ×/Ò/°´°¸lÑKÔKÐKÐKÐKð	Lð 	Lð 	Lð 	Lrk   úIterable[tokenize.TokenInfo]c                ó–  — t          j        ¦   «         }d}| j        j        j        dk    }|D ]†\  }}}}}t
          j        dd…         dk    r*|t          j        k    rd}n|t          j	        k    rd}|r|sŒJ|t          j
        k    r,t          |¦  «        r|t          |¦  «        xx         dz  cc<   Œ‡t          |¦  «        dk    r€|                     d¦  «        d         d         }|D ]^\  }}}	}}|t          j
        k    rŒt          |¦  «        }
t          |¦  «        r%|
|k    r|                      d|	d         |
f¬	¦  «         Œ]dS dS )
a\  Adds a message for each string using inconsistent quote delimiters.

        Quote delimiters are used inconsistently if " and ' are mixed in a module's
        shortstrings without having done so to avoid escaping an internal quote
        character.

        Args:
          tokens: The tokens to be checked against for consistent usage.
        F)é   é   Né   Tr‚   r   r  )rH  r€   )rÐ   r   r#  r@  Ú
py_versionÚsysÚversion_infor5  ÚFSTRING_STARTÚFSTRING_ENDr7  Ú!_is_quote_delimiter_chosen_freelyÚ_get_quote_delimiterr›   Úmost_commonr‹   )rŸ   r0  Ústring_delimitersÚinside_fstringÚtarget_py312Útok_typerF  rª   Úmost_common_delimiterrG  Úquote_delimiters              ri   rB  z<StringConstantChecker.check_for_consistent_string_delimiters8  sž  € õ +6Ô*=Ñ*?Ô*?ÐàˆØ”{Ô)Ô4¸Ò?ˆð )/ð 	Dð 	DÑ$ˆH�e˜Q  1ÝÔ   Ô# wÒ.Ð.à�xÔ5Ò5Ð5Ø%)�N�NØ¥Ô!5Ò5Ð5Ø%*�Nà!ð ¨,ð àà�8œ?Ò*Ð*Õ/PÐQVÑ/WÔ/WÐ*Ø!Õ"6°uÑ"=Ô"=Ð>Ð>Ô>À!ÑCÐ>Ð>Ñ>øåÐ Ñ!Ô! AÒ%Ð%à$5×$AÒ$AÀ!Ñ$DÔ$DÀQÔ$GÈÔ$JÐ!Ø06ð 
ð 
Ñ,�˜% ¨¨1Ø�xœÒ.Ð.ØÝ"6°uÑ"=Ô"=�å5°eÑ<Ô<ðà'Ð+@Ò@Ð@à×$Ò$Ø-°E¸!´HÀOÐCUð %ñ ô ð øð &Ð%ð
ð 
rk   ÚelementsúSequence[nodes.NodeNG]Úiterable_typer^   c                ó  — |D �] }t          |t          j        ¦  «        r|                     ¦   «         t          v sŒ9|j        dk     rŒE|j        |j        f}|| j        vrŒ]| j        |         \  }}||j        k    rˆ|�†|j	        t          j        k    rq|j        d         |j        k    s7| j        j        j        rJ| j                             |j        |j        f¦  «        s$|                      d|j        |ft&          ¬¦  «         �Œd S )Nr   r  )rH  r€   Ú
confidence)rr   r
   r†   ru   Ú_AST_NODE_STR_TYPESÚ
col_offsetÚlinenor'  r‡   r—   r5  r7  rG  r#  r@  Ú check_str_concat_over_line_jumpsr(  r’   r‹   r   )rŸ   r…  r‡  ÚeltÚtoken_indexÚmatching_tokenrJ  s          ri   r`  z4StringConstantChecker.check_for_concatenated_stringsh  s.  € ð ð "	ñ "	ˆCå˜3¥¤Ñ,Ô,ðØ14·²±´ÕATÐ1TÐ1TàØŒ~ Ò!Ð!àØœ: s¤~Ð6ˆKØ $Ô"4Ð4Ð4ð Ø)-Ô);¸KÔ)HÑ&ˆN˜Jð  #¤)Ò+Ð+ØÐ*Ø”O¥x¤Ò6Ð6àÔ# AÔ&¨#¬*Ò4Ð4Ø”KÔ&ÔGð 5ð !Ô=×AÒAØœ S¤^Ð4ñô ð	 5ð ×$Ò$Ø-Ø œZØ+Ð-Ý#'ð	 %ñ ô ð ùð;"	ð "	rk   rF  Ú	start_rowÚ	start_colc           	     ó^  — d }t          |¦  «        D ]\  }}|dv r|} nŒ|€d S |d |…                              ¦   «         }||d …         }|d d…         |dd …         cxk    r	d|z  k    rn ndnd}	||	|	 …         }
d|vr-|                      ||
||t          |¦  «        z   |	z   ¦  «         d S d S )Nz'"rt  éýÿÿÿr‚   r   )r4  ÚlowerÚprocess_non_raw_string_tokenr›   )rŸ   rF  r‘  r’  Ú
quote_charÚ_indexÚcharÚprefixÚafter_prefixÚquote_lengthÚstring_bodys              ri   r8  z*StringConstantChecker.process_string_token�  s  € Øˆ
Ý% eÑ,Ô,ð 	ð 	‰LˆF�DØ�uˆ}ˆ}Ø!�
Ø�ð ð ÐØˆFà�w˜�w”×%Ò%Ñ'Ô'ˆØ˜V˜W˜W”~ˆð ˜b˜q˜bÔ! \°"°#°#Ô%6ÐHÐHÒHÐH¸!¸j¹.ÒHÐHÐHÐHÐHˆAˆAÈað 	ð # <°°Ð#=Ô>ˆà�fÐÐØ×-Ò-ØØØØ�C ™KœKÑ'¨,Ñ6ñ	ô ð ð ð ð Ðrk   rš  r�  Ústring_start_colc                ó°  — d}	 |                      d|¦  «        }|dk    rdS ||dz            }|||dz   …         }|                     dd|¦  «        }|dk    r|}	||z   }
n"||                     dd|¦  «        z   }	||z
  dz
  }
|| j        v r%d|v rnCd	|vrn>|                      d
|	|f|
¬¦  «         n#|| j        vr|                      d|	|f|
¬¦  «         |dz  }ŒÔ)aJ  Check for bad escapes in a non-raw string.

        prefix: lowercase string of string prefix markers ('ur').
        string_body: the un-parsed body of the string, not including the quote
        marks.
        start_row: line number in the source.
        string_start_col: col number of the string start in the source.
        r   Tú\éÿÿÿÿr‚   rv  ú
r   r   r  )rH  r€   r‹  r  N)ÚfindÚrfindrÒ   ÚUNICODE_ESCAPE_CHARACTERSr‹   ÚESCAPE_CHARACTERS)rŸ   rš  r�  r‘  rž  rŠ   Ú	next_charÚmatchÚlast_newlinerH  r‹  s              ri   r–  z2StringConstantChecker.process_non_raw_string_token©  sY  € ð& ˆð(	Ø×$Ò$ T¨5Ñ1Ô1ˆEØ˜Š{ˆ{Ø�ð $ E¨A¡IÔ.ˆIØ ¨°©	Ð 1Ô2ˆEð '×,Ò,¨T°1°eÑ<Ô<ˆLØ˜rÒ!Ð!Ø �Ø"Ð%5Ñ5�
�
à  ;×#4Ò#4°T¸1¸eÑ#DÔ#DÑD�Ø" \Ñ1°AÑ5�
Ø˜DÔ:Ð:Ð:Ø˜&�=�=ØØ Ð&Ð&Øà×$Ò$Ø<Ø!Ø#˜XØ#-ð	 %ñ ô ð ð ð  $Ô"8Ð8Ð8Ø× Ò Ø3ØØ˜Ø)ð	 !ñ ô ð ð �Q‰JˆEðQ(	rk   r  únodes.Constc                ó¦   — |                      ¦   «         dk    r6t          |j        t          j        ¦  «        s|                      |¦  «         d S d S d S )Nr   )ru   rr   r¹   r
   Ú	JoinedStrÚ_detect_u_string_prefixr¶   s     ri   Úvisit_constz!StringConstantChecker.visit_constç  sW   € à�;Š;‰=Œ=˜NÒ*Ð*µ:ØŒK�œñ4
ô 4
Ð*ð ×(Ò(¨Ñ.Ô.Ð.Ð.Ð.ð +Ð*Ð*Ð*rk   c                ód   — |j         dk    r$|                      d|j        |j        ¬¦  «         dS dS )z:Check whether strings include a 'u' prefix like u'String'.r   r  )rH  r‹  N)Úkindr‹   rŒ  r‹  r¶   s     ri   r­  z-StringConstantChecker._detect_u_string_prefixî  sK   € àŒ9˜ÒÐØ×ÒØ+Ø”[Øœ?ð ñ ô ð ð ð ð Ðrk   ©r#  r   r]   r|   )rz   r*  r]   r|   )r0  r1  r]   r|   )rŠ   rû   r0  rM  r]   rn   )rŠ   rû   r0  r1  r]   rn   )rŠ   rû   r0  rM  rU  rY  r]   rZ  r  )rz   rb  r]   r|   )rz   rg  r]   r|   )rz   rj  r]   r|   )rz   rn  r]   r|   )r0  rr  r]   r|   )r…  r†  r‡  r^   r]   r|   )rF  r^   r‘  rû   r’  rû   r]   r|   )
rš  r^   r�  r^   r‘  rû   rž  rû   r]   r|   )rz   rª  r]   r|   )r˜   r  r  r  rÇ   r  Úoptionsr¦  r¥  r&  r/  rL  r>  r?  rW  rO  rP  r   rÉ   rf  ri  rm  rq  rB  r`  r8  r–  r®  r­  Ú__classcell__)r)  s   @ri   r  r    sñ  ø€ € € € € Ø Ð à€Dð
ð
ð 8Ø!ð)ð ÐGÐHÐIð
ð
ð
ð9#ð #€DðL /à ØØ%ð!ð	ð ð	
ð &à ØØ%ð2ð	ð ð
	
ð€Gð8 6Ðð !&ÐðLð Lð Lð Lð Lð LðKð Kð Kð Kð@ð @ð @ð @ð@	Gð 	Gð 	Gð 	Gð
ð 
ð 
ð 
ð$ #<ð
-ð 
-ð 
-ð 
-ð 
-ð 
-ð" #<ð
6ð 
6ð 
6ð 
6ð 
6ð 
6ð  ÐÐ 5Ñ6Ô6ð?ð ?ð ?ñ 7Ô6ð?ð  ÐÐ 5Ñ6Ô6ð?ð ?ð ?ñ 7Ô6ð?ð  ÐÐ 5Ñ6Ô6ð>ð >ð >ñ 7Ô6ð>ð  ÐÐ 5Ñ6Ô6ð@ð @ð @ñ 7Ô6ð@ðLð Lð Lð Lð.ð .ð .ð .ð`%ð %ð %ð %ðNð ð ð ð4<ð <ð <ð <ð|  ÐÐ ;Ñ<Ô<ð/ð /ð /ñ =Ô<ð/ðð ð ð ð ð ð ð rk   r  r#  r   r|   c                óŽ   — |                       t          | ¦  «        ¦  «         |                       t          | ¦  «        ¦  «         d S r´   )Úregister_checkerrx   r  )r#  s    ri   Úregisterr¶  ø  sB   € Ø
×ÒÕ/°Ñ7Ô7Ñ8Ô8Ð8Ø
×ÒÕ1°&Ñ9Ô9Ñ:Ô:Ð:Ð:Ð:rk   rF  c                óà   — | dd…                               ¦   «         dv r| dd…         } n&| d                               ¦   «         dv r
| dd…         } | dd…         dv r
| dd	…         S | dd
…         S )a!  Mostly replicate `ast.literal_eval(token)` manually to avoid any performance hit.

    This supports f-strings, contrary to `ast.literal_eval`.
    We have to support all string literal notations:
    https://docs.python.org/3/reference/lexical_analysis.html#string-and-bytes-literals
    r   rv  >   r)   r-   N>   r   r   r   r‚   rt  >   ú"""ú'''r”  r¡  )r•  )rF  s    ri   r=  r=  ý  s‡   € ð ˆQˆqˆS„z×ÒÑÔ˜\Ð)Ð)Ø�a�b�b”	ˆˆØ	ˆqŒ�ŠÑ	Ô	˜_Ð	,Ð	,Ø�a�b�b”	ˆØˆQˆqˆS„z�^Ð#Ð#Ø�Q�r�TŒ{ÐØ��2�Œ;Ðrk   Ústring_tokenc                ó„   — t          t                               | ¦  «        pt                               | ¦  «        ¦  «        S )ar  Is this string token a "longstring" (is it triple-quoted)?

    Long strings are triple-quoted as defined in
    https://docs.python.org/3/reference/lexical_analysis.html#string-and-bytes-literals

    This function only checks characters up through the open quotes.  Because it's meant
    to be applied only to tokens that represent string literals, it doesn't bother to
    check for close-quotes (demonstrating that the literal is a well-formed string).

    Args:
        string_token: The string token to be parsed.

    Returns:
        A boolean representing whether this token matches a longstring
        regex.
    )rn   ÚSINGLE_QUOTED_REGEXr¨  ÚDOUBLE_QUOTED_REGEX)rº  s    ri   Ú_is_long_stringr¾    s=   € õ" Ý×!Ò! ,Ñ/Ô/ð 	3Ý×$Ò$ \Ñ2Ô2ñô ð rk   c                óŠ   — t                                | ¦  «        }|st          d| › d�¦  «        ‚|                     d¦  «        S )a}  Returns the quote character used to delimit this token string.

    This function checks whether the token is a well-formed string.

    Args:
        string_token: The token to be parsed.

    Returns:
        A string containing solely the first quote delimiter character in the
        given string.

    Raises:
      ValueError: No quote delimiter characters are present.
    zstring token z is not a well-formed stringrv  )ÚQUOTE_DELIMITER_REGEXr¨  Ú
ValueErrorÚgroup)rº  r¨  s     ri   r}  r}  $  sJ   € õ "×'Ò'¨Ñ5Ô5€EØð UÝÐS¨ÐSÐSÐSÑTÔTÐTØ�;Š;�q‰>Œ>Ðrk   c                ó”   — t          | ¦  «        }|dk    rdnd}t          |o t          | ¦  «         o|t          | ¦  «        v¦  «        S )a»  Was there a non-awkward option for the quote delimiter?

    Args:
        string_token: The quoted string whose delimiters are to be checked.

    Returns:
        Whether there was a choice in this token's quote character that would
        not have involved backslash-escaping an interior quote character.  Long
        strings are excepted from this analysis under the assumption that their
        quote characters are set by policy.
    ú'ú")r}  rn   r¾  r=  )rº  r„  Úunchosen_delimiters      ri   r|  r|  9  sb   € õ +¨<Ñ8Ô8€OØ /°3Ò 6Ð 6˜˜¸CÐÝØð 	=Ý Ñ-Ô-Ð-ð	=à¥h¨|Ñ&<Ô&<Ð<ñô ð rk   )rY   rZ   r[   r\   r]   r^   )rl   r   rm   r^   r]   rn   r±  )rF  r^   r]   r^   )rº  r^   r]   rn   )rº  r^   r]   r^   )@r  Ú
__future__r   rÐ   Úrerx  r5  r   Úcollections.abcr   r   Útypingr   r   rs   r	   r
   r   Úastroid.typingr   Úpylint.checkersr   r   r   r   Úpylint.checkers.utilsr   Úpylint.interfacesr   Úpylint.typingr   Úpylint.lintr   rŠ  Ú	_PREFIXESr9  r:  r;  rW  Úcompilere   r¼  r½  ÚDOTALLrÀ  rX   Ú__annotations__r†   ÚListÚLambdaÚFunctionDefÚListCompÚSetCompÚGeneratorExpr•   rj   rv   rx   r  r¶  r=  r¾  r}  r|  rÛ   rk   ri   ú<module>rÛ     sŒ  ðð
 0Ð /Ð /à "Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ø 	€	€	€	Ø 
€
€
€
Ø €€€Ø Ð Ð Ð Ð Ð Ø .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ø )Ð )Ð )Ð )Ð )Ð )Ð )Ð )à €€€Ø &Ð &Ð &Ð &Ð &Ð &Ð &Ð &Ð &Ð &Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4à TÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ TØ <Ð <Ð <Ð <Ð <Ð <Ø "Ð "Ð "Ð "Ð "Ð "Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0àð %Ø$Ð$Ð$Ð$Ð$Ð$ð QÐ ðð ð €	ð6 ÔØ„KØÔðÐ ð
 !�b”jÐ!? S§X¢X¨iÑ%8Ô%8Ð!?Ð!?Ð!?Ñ@Ô@Ð Ø �b”jÐ!B S§X¢X¨iÑ%8Ô%8Ð!BÐ!BÐ!BÑCÔCÐ Ø"˜œ
Ð#D s§x¢x°	Ñ':Ô':Ð#DÐ#DÐ#DÀbÄiÑPÔPÐ ðØð 
ðð 	ð 
ðð 	ð 
ðð( 	ð 
ð)ð4 	ð 
ð5ð@ 	ð 
ðAðN 	ð 
ðOð\ 	ð 
ð]ðh 	ð 
ðiðt 	ð 
ðuð@ 	ð 
ðAðJ 	ð 
ðKðT 	ð 
ðUð` 	ð 
ðaðn 	ð 
ðoð~ 	ð 
ððL 	ð 
ðMðZ
ð
ð
ðsð ð ð ð Að Að Añ AðH 
„KØ	„JØ	„LØ	ÔØ	„NØ	„MØ	Ôð€ð
$ð 
$ð 
$ð 
$ðð ð ð ð&Jð Jð Jð Jð J˜+ñ Jô Jð JðZvð vð vð vð vÐ,Ð.@ñ vô vð vðr;ð ;ð ;ð ;ð
ð ð ð ð ð ð ð ð.ð ð ð ð*ð ð ð ð ð rk   