§
    øyIfo>  ã                  óæ  — 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
 ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ  ej        e¦  «        Z eej        ej        g¦  «        Z eej        ej        ej        ej        g¦  «        Zeeeeeef         f                  Zeee          ee          ef         Z! G d„ d¦  «        Z"dd„Z#dd„Z$dd„Z%d d„Z&d!d„Z'd"d„Z(dS )#zFModule containing our file processor that tokenizes a file for checks.é    )ÚannotationsN)ÚAny)Ú	Generator)ÚList)ÚTuple)Údefaults)Úutils)ÚFSTRING_END)ÚFSTRING_MIDDLE)ÚLoadedPluginc                  ó  — e Zd ZdZdZ	 d=d>d„Zej        d?d„¦   «         Zd@d„Z	dAd„Z
dBd„ZdBd„ZdBd„ZdCd„ZdDd„ZdBd„ZdEd!„ZdFd#„ZdGd%„ZdHd*„ZdId,„ZdJd0„Zej        dKd1„¦   «         ZdLd4„ZdMd5„ZdNd7„ZdNd8„ZdNd9„ZdOd;„ZdBd<„ZdS )PÚFileProcessora=  Processes a file and holds state.

    This processes a file by generating tokens, logical and physical lines,
    and AST trees. This also provides a way of passing state about the file
    to checks expecting that state. Any public attribute on this object can
    be requested by a plugin. The known public attributes are:

    - :attr:`blank_before`
    - :attr:`blank_lines`
    - :attr:`checker_state`
    - :attr:`indent_char`
    - :attr:`indent_level`
    - :attr:`line_number`
    - :attr:`logical_line`
    - :attr:`max_line_length`
    - :attr:`max_doc_length`
    - :attr:`multiline`
    - :attr:`noqa`
    - :attr:`previous_indent_level`
    - :attr:`previous_logical`
    - :attr:`previous_unindented_logical_line`
    - :attr:`tokens`
    - :attr:`file_tokens`
    - :attr:`total_lines`
    - :attr:`verbose`
    FNÚfilenameÚstrÚoptionsúargparse.NamespaceÚlinesúlist[str] | NoneÚreturnÚNonec                ó  — || _         || _        |�|n|                      ¦   «         | _        |                      ¦   «          d| _        d| _        i | _        i | _        |j	        | _	        d| _
        d| _        |j        | _        d| _        d| _        |j        | _        |j        | _        d| _        d| _        d| _        d| _        g | _        t-          | j        ¦  «        | _        |j        | _        ddi| _        d| _        dS )z]Initialize our file processor.

        :param filename: Name of the file to process
        Nr   Ú Fúlogical lineséÿÿÿÿ)r   r   Ú
read_linesr   Ústrip_utf_bomÚblank_beforeÚblank_linesÚ_checker_statesÚchecker_stateÚhang_closingÚindent_charÚindent_levelÚindent_sizeÚline_numberÚlogical_lineÚmax_line_lengthÚmax_doc_lengthÚ	multilineÚprevious_indent_levelÚprevious_logicalÚ previous_unindented_logical_lineÚtokensÚlenÚtotal_linesÚverboseÚ
statisticsÚ_fstring_start)Úselfr   r   r   s       úD/var/www/piapp/venv/lib/python3.11/site-packages/flake8/processor.pyÚ__init__zFileProcessor.__init__>   s  € ð ˆŒØ ˆŒØ#Ð/�U�U°T·_²_Ñ5FÔ5FˆŒ
Ø×ÒÑÔÐð ˆÔàˆÔà:<ˆÔà-/ˆÔà#Ô0ˆÔà'+ˆÔàˆÔà"Ô.ˆÔàˆÔàˆÔà&Ô6ˆÔà%Ô4ˆÔàˆŒà%&ˆÔ"à "ˆÔà02ˆÔ-à02ˆŒå˜tœz™?œ?ˆÔà”ˆŒà*¨AÐ.ˆŒØ ˆÔÐÐó    úlist[tokenize.TokenInfo]c                ót   ‡— t          | j        ¦  «        Št          t          j        ˆfd„¦  «        ¦  «        S )z-Return the complete set of tokens for a file.c                 ó"   •— t          ‰ ¦  «        S ©N)Únext)Ú	line_iters   €r4   ú<lambda>z+FileProcessor.file_tokens.<locals>.<lambda>|   s   ø€ µT¸)±_´_€ r6   )Úiterr   ÚlistÚtokenizeÚgenerate_tokens)r3   r<   s    @r4   Úfile_tokenszFileProcessor.file_tokensx   s7   ø€ õ ˜œÑ$Ô$ˆ	Ý•HÔ,Ð-DÐ-DÐ-DÐ-DÑEÔEÑFÔFÐFr6   ÚlinenoÚintc                ó   — || _         dS )z#Signal the beginning of an fstring.N)r2   )r3   rC   s     r4   Úfstring_startzFileProcessor.fstring_start~   s   € à$ˆÔÐÐr6   Útokenútokenize.TokenInfoúGenerator[str, None, None]c              #  ó  K  — |j         t          k    r| j        }n|j        d         }d| _        || _        t          ||j        d         ¦  «        D ])}| j        | j        dz
           V — | xj        dz  c_        Œ*d| _        dS )z0Iterate through the lines of a multiline string.r   Té   FN)	Útyper
   r2   Ústartr)   r%   ÚrangeÚendr   )r3   rG   rM   Ú_s       r4   Úmultiline_stringzFileProcessor.multiline_string‚   s—   è è € ð Œ:�Ò$Ð$ØÔ'ˆEˆEà”K ”NˆEàˆŒØ ˆÔõ �u˜eœi¨œlÑ+Ô+ð 	"ð 	"ˆAØ”*˜TÔ-°Ñ1Ô2Ð2Ð2Ð2ØÐÔ Ñ!ÐÔÐØˆŒˆˆr6   c                ó   — d| _         dS )z)Reset the blank_before attribute to zero.r   N)r   ©r3   s    r4   Úreset_blank_beforez FileProcessor.reset_blank_before”   s   € àˆÔÐÐr6   c                ó   — | j         d= dS )z-Delete the first token in the list of tokens.r   N)r-   rS   s    r4   Údelete_first_tokenz FileProcessor.delete_first_token˜   s   € àŒK˜ˆNˆNˆNr6   c                ó&   — | xj         dz  c_         dS )z&Note that we visited a new blank line.rK   N)r   rS   s    r4   Úvisited_new_blank_linez$FileProcessor.visited_new_blank_lineœ   s   € àÐÔ˜AÑÐÔÐÐr6   ÚmappingÚ_LogicalMappingc                ó¼   — |d         d         \  }}| j         |dz
           }t          |d|…         ¦  «        | _        | j        | j        k     r| j        | _        dS dS )z:Update the indent level based on the logical line mapping.r   rK   N)r   Úexpand_indentr#   r   r   )r3   rY   Ú	start_rowÚ	start_colÚ
start_lines        r4   Úupdate_statezFileProcessor.update_state    sg   € à!(¨¤¨A¤Ñˆ�IØ”Z 	¨A¡Ô.ˆ
Ý)¨*°Z°i°ZÔ*@ÑAÔAˆÔØÔ˜tÔ/Ò/Ð/Ø $Ô 0ˆDÔÐÐð 0Ð/r6   Úpluginr   c                óf   — d|j         v r'| j                             |j        i ¦  «        | _        dS dS )z2Update the checker_state attribute for the plugin.r    N)Ú
parametersr   Ú
setdefaultÚ
entry_namer    )r3   ra   s     r4   Úupdate_checker_state_forz&FileProcessor.update_checker_state_for¨   sA   € à˜fÔ/Ð/Ð/Ø!%Ô!5×!@Ò!@ØÔ! 2ñ"ô "ˆDÔÐÐð 0Ð/r6   c                ó†   — | j         r+| j        | _        | j         | _        | j        s| j         | _        d| _        g | _        dS )zoRecord the previous logical line.

        This also resets the tokens list and the blank_lines count.
        r   N)r&   r#   r*   r+   r,   r   r-   rS   s    r4   Únext_logical_linezFileProcessor.next_logical_line¯   sP   € ð
 Ôð 	JØ)-Ô):ˆDÔ&Ø$(Ô$5ˆDÔ!ØÔ$ð JØ8<Ô8I�Ô5ØˆÔØˆŒˆˆr6   Ú_Logicalc                óX  — g }g }g }d}dx}}| j         D �]\  }}}	}
}|t          v rŒ|sd|	fg}|t          j        k    r|                     |¦  «         Œ@|t          j        k    rt          |¦  «        }n|t          k    rdt          |¦  «        z  }|rO|	\  }}||k    r1|dz
  }|dz
  }| j	        |         |         }|dk    s|dvr	|dvrd|› �}n||k    r|||…         |z   }|                     |¦  «         |t          |¦  «        z  }|                     ||
f¦  «         |
\  }}�Œ|||fS )	z4Build the mapping, comments, and logical line lists.r   NÚxrK   ú,z{[(ú}])ú )
r-   ÚSKIP_TOKENSr@   ÚCOMMENTÚappendÚSTRINGÚmutate_stringr   r.   r   )r3   ÚlogicalÚcommentsrY   ÚlengthÚprevious_rowÚprevious_columnÚ
token_typeÚtextrM   rO   Úliner]   Ústart_columnÚ	row_indexÚcolumn_indexÚprevious_texts                    r4   Úbuild_logical_line_tokensz'FileProcessor.build_logical_line_tokens¼   s•  € àˆØˆØ#%ˆØˆØ)-Ð-ˆ�Ø26´+ð 	2ñ 	2Ñ.ˆJ˜˜e S¨$Ø�[Ð(Ð(ØØð 'Ø˜u˜:˜,�Ø�XÔ-Ò-Ð-Ø—’ Ñ%Ô%Ð%ØØ�Xœ_Ò,Ð,Ý$ TÑ*Ô*��Ø�~Ò-Ð-Ø�S ™YœY‘�Øð EØ,1Ñ)�˜LØ 9Ò,Ð,Ø ,¨qÑ 0�IØ#2°QÑ#6�LØ$(¤J¨yÔ$9¸,Ô$G�MØ$¨Ò+Ð+Ø%¨UÐ2Ð2°tÀ5Ð7HÐ7Hà) 4˜z˜z˜øØ$¨Ò4Ð4Ø °Ð <Ô=ÀÑD�DØ�NŠN˜4Ñ Ô Ð Ø•c˜$‘i”iÑˆFØ�NŠN˜F C˜=Ñ)Ô)Ð)Ø.1Ñ+ˆ\˜?™?Ø˜ 'Ð)Ð)r6   úast.ASTc                óZ   — t          j        d                     | j        ¦  «        ¦  «        S )z5Build an abstract syntax tree from the list of lines.r   )ÚastÚparseÚjoinr   rS   s    r4   Ú	build_astzFileProcessor.build_astá   s    € åŒy˜Ÿš ¤Ñ,Ô,Ñ-Ô-Ð-r6   ú tuple[str, str, _LogicalMapping]c                óÎ   — |                       ¦   «         \  }}}d                     |¦  «        }d                     |¦  «        | _        | j        dxx         dz  cc<   || j        |fS )z2Build a logical line from the current tokens list.r   r   rK   )r€   r…   r&   r1   )r3   ru   rt   Úmapping_listÚjoined_commentss        r4   Úbuild_logical_linez FileProcessor.build_logical_lineå   sm   € à*.×*HÒ*HÑ*JÔ*JÑ'ˆ�'˜<ØŸ'š' (Ñ+Ô+ˆØŸGšG GÑ,Ô,ˆÔØŒ˜Ð(Ð(Ô(¨AÑ-Ð(Ð(Ñ(Ø Ô 1°<Ð?Ð?r6   rc   údict[str, bool]Ú	argumentsúdict[str, Any]c                óÌ   — i }|                      ¦   «         D ]L\  }}||v rŒ
	 t          | |¦  «        ||<   Œ# t          $ r! |r‚ t                               d|¦  «         Y ŒIw xY w|S )z8Generate the keyword arguments for a list of parameters.zPPlugin requested optional parameter "%s" but this is not an available parameter.)ÚitemsÚgetattrÚAttributeErrorÚLOGÚwarning)r3   rc   r�   ÚretÚparamÚrequireds         r4   Úkeyword_arguments_forz#FileProcessor.keyword_arguments_forí   s¦   € ð ˆØ)×/Ò/Ñ1Ô1ð 	ð 	‰OˆE�8Ø˜	Ð!Ð!Øð
Ý$ T¨5Ñ1Ô1��E‘
�
øÝ!ð ð ð Øð Øå—K’KðBàñô ð ð ð ð	øøøð ˆ
s   ¢6¶(A!Á A!ú)Generator[tokenize.TokenInfo, None, None]c              #  ó²   K  — t          j        | j        ¦  «        D ]:}|d         d         | j        k    r dS | j                             |¦  «         |V — Œ;dS )z'Tokenize the file and yield the tokens.é   r   N)r@   rA   Ú	next_liner/   r-   rq   )r3   rG   s     r4   rA   zFileProcessor.generate_tokens  sj   è è € åÔ-¨d¬nÑ=Ô=ð 	ð 	ˆEØ�QŒx˜Œ{˜TÔ-Ò-Ð-Ø��ØŒK×Ò˜uÑ%Ô%Ð%ØˆKˆKˆKˆKð		ð 	r6   Úmin_lineÚmax_lineúdict[int, str]c                ó¨   — t          ||dz   ¦  «        }d                     | j        |dz
  |…         ¦  «        }t                               ||¦  «        S )NrK   r   )rN   r…   r   ÚdictÚfromkeys)r3   r�   rž   Ú
line_rangeÚjoineds        r4   Ú_noqa_line_rangezFileProcessor._noqa_line_range  sJ   € Ý˜8 X°¡\Ñ2Ô2ˆ
Ø—’˜œ H¨q¡L°8Ð$;Ô<Ñ=Ô=ˆÝ�}Š}˜Z¨Ñ0Ô0Ð0r6   c                óä  — 	 | j         }i }t          | j        ¦  «        dz   }d}|D ]«\  }}\  }}\  }}}|t          j        k    s|t          j        k    rŒ/t          ||¦  «        }t          ||¦  «        }|t          j        t          j	        fv rB| 
                    |                      ||¦  «        ¦  «         t          | j        ¦  «        dz   }d}Œ¬|S # t          j        t          f$ r i cY S w xY w)z<Map from line number to the line we'll search for `noqa` in.r›   r   )rB   r.   r   r@   Ú	ENDMARKERÚDEDENTÚminÚmaxÚNLÚNEWLINEÚupdater¥   Ú
TokenErrorÚSyntaxError)	r3   rB   r•   r�   rž   ÚtprP   Ús_lineÚe_lines	            r4   Ú_noqa_line_mappingz FileProcessor._noqa_line_mapping  s  € ð	ØÔ*ˆKð ˆCå˜4œ:‘”¨Ñ*ˆHØˆHØ6Að "ð "Ñ2��A‘{˜ ¡K V¨Q°Ø�Ô+Ò+Ð+¨rµX´_Ò/DÐ/DØå˜x¨Ñ0Ô0�Ý˜x¨Ñ0Ô0�à�(œ+¥xÔ'7Ð8Ð8Ð8Ø—J’J˜t×4Ò4°X¸xÑHÔHÑIÔIÐIå" 4¤:™œ°Ñ2�HØ!�HøàˆJøõ- Ô#¥[Ð1ð 	ð 	ð 	ð ˆIˆIˆIð	øøøs   ‚C ÃC/Ã.C/r%   ú
str | Nonec                ó6   — | j                              |¦  «        S )z7Retrieve the line which will be used to determine noqa.)r³   Úget)r3   r%   s     r4   Únoqa_line_forzFileProcessor.noqa_line_for.  s   € ð
 Ô&×*Ò*¨;Ñ7Ô7Ð7r6   c                óÂ   — | j         | j        k    rdS | j        | j                  }| xj         dz  c_         | j        €#|dd…         t          j        v r|d         | _        |S )z Get the next line from the list.r   rK   Nr   )r%   r/   r   r"   r   Ú
WHITESPACE)r3   r{   s     r4   rœ   zFileProcessor.next_line5  sj   € àÔ˜tÔ/Ò/Ð/Ø�2ØŒz˜$Ô*Ô+ˆØÐÔ˜AÑÐÔØÔÐ#¨¨R¨a¨R¬µHÔ4GÐ(GÐ(GØ# AœwˆDÔØˆr6   ú	list[str]c                ó”   — | j         dk    r(| j        j        pd| _         |                      ¦   «         }n|                      ¦   «         }|S )z%Read the lines for this file checker.ú-Ústdin)r   r   Ústdin_display_nameÚread_lines_from_stdinÚread_lines_from_filename)r3   r   s     r4   r   zFileProcessor.read_lines?  sI   € àŒ=˜CÒÐØ œLÔ;ÐF¸wˆDŒMØ×.Ò.Ñ0Ô0ˆEˆEà×1Ò1Ñ3Ô3ˆEØˆr6   c                óJ  — 	 t          j        | j        ¦  «        5 }|                     ¦   «         cddd¦  «         S # 1 swxY w Y   dS # t          t
          f$ rH t          | j        d¬¦  «        5 }|                     ¦   «         cddd¦  «         cY S # 1 swxY w Y   Y dS w xY w)zRead the lines for a file.Nzlatin-1)Úencoding)r@   Úopenr   Ú	readlinesr¯   ÚUnicodeError)r3   Úfds     r4   rÀ   z&FileProcessor.read_lines_from_filenameH  s7  € ð	&Ý”˜tœ}Ñ-Ô-ð &°Ø—|’|‘~”~ð&ð &ð &ð &ñ &ô &ð &ð &ð &ð &ð &ð &øøøð &ð &ð &ð &ð &ð &øå�\Ð*ð 	&ð 	&ð 	&õ �d”m¨iÐ8Ñ8Ô8ð &¸BØ—|’|‘~”~ð&ð &ð &ð &ñ &ô &ð &ð &ð &ð &ð &ð &ð &ð &øøøð &ð &ð &ð &ð &ð &ð &ð	&øøøsU   ‚A	 ›<¯A	 ¼A Á A	 ÁA ÁA	 Á	'B"Á0BÂB"ÂB	ÂB"ÂB	ÂB"Â!B"c                ó(   — t          j        ¦   «         S )z Read the lines from standard in.)r	   Ústdin_get_linesrS   s    r4   r¿   z#FileProcessor.read_lines_from_stdinS  s   € åÔ$Ñ&Ô&Ð&r6   Úboolc                óÒ   — | j         j        s t          d„ | j        D ¦   «         ¦  «        rdS t          d„ | j        D ¦   «         ¦  «        rt                               d¦  «         dS dS )z®Check if ``flake8: noqa`` is in the file to be ignored.

        :returns:
            True if a line matches :attr:`defaults.NOQA_FILE`,
            otherwise False
        c              3  óT   K  — | ]#}t           j                             |¦  «        V — Œ$d S r:   )r   Ú	NOQA_FILEÚmatch©Ú.0r{   s     r4   ú	<genexpr>z3FileProcessor.should_ignore_file.<locals>.<genexpr>^  sD   è è € ð 1
ð 1
Ø/3�HÔ×$Ò$ TÑ*Ô*ð1
ð 1
ð 1
ð 1
ð 1
ð 1
r6   Tc              3  óT   K  — | ]#}t           j                             |¦  «        V — Œ$d S r:   )r   rÌ   ÚsearchrÎ   s     r4   rÐ   z3FileProcessor.should_ignore_file.<locals>.<genexpr>b  s3   è è € ÐHÐH°T•Ô#×*Ò*¨4Ñ0Ô0ÐHÐHÐHÐHÐHÐHr6   z[Detected `flake8: noqa` on line with code. To ignore an error on a line use `noqa` instead.F)r   Údisable_noqaÚanyr   r“   r”   rS   s    r4   Úshould_ignore_filez FileProcessor.should_ignore_fileW  s�   € ð Œ|Ô(ð 	­Sð 1
ð 1
Ø7;´zð1
ñ 1
ô 1
ñ .
ô .
ð 	ð �4ÝÐHÐH¸T¼ZÐHÑHÔHÑHÔHð 	Ý�KŠKð6ñô ð ð �5à�5r6   c                óø   — | j         sdS | j         d         dd…         dk    r| j         d         dd…         | j         d<   dS | j         d         dd…         dk    r| j         d         dd…         | j         d<   dS dS )z-Strip the UTF bom from the lines of the file.Nr   rK   u   ï»¿é   u   Ã¯Â»Â¿)r   rS   s    r4   r   zFileProcessor.strip_utf_bomk  s‹   € àŒzð 	àˆFð Œ:�aŒ=˜˜!˜Ô Ò(Ð(Ø œJ qœM¨!¨"¨"Ô-ˆDŒJ�q‰MˆMˆMØŒZ˜Œ]˜2˜A˜2Ô .Ò0Ð0Ø œJ qœM¨!¨"¨"Ô-ˆDŒJ�q‰MˆMˆMð 1Ð0r6   r:   )r   r   r   r   r   r   r   r   )r   r7   )rC   rD   r   r   )rG   rH   r   rI   )r   r   )rY   rZ   r   r   )ra   r   r   r   )r   ri   )r   r�   )r   r‡   )rc   rŒ   r�   rŽ   r   rŽ   )r   r™   )r�   rD   rž   rD   r   rŸ   )r   rŸ   )r%   rD   r   r´   )r   r   )r   rº   )r   rÉ   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Únoqar5   Ú	functoolsÚcached_propertyrB   rF   rQ   rT   rV   rX   r`   rf   rh   r€   r†   r‹   r˜   rA   r¥   r³   r·   rœ   r   rÀ   r¿   rÕ   r   © r6   r4   r   r      s9  € € € € € ðð ð8 €Dð #'ð	8!ð 8!ð 8!ð 8!ð 8!ðt ÔðGð Gð Gñ ÔðGð
%ð %ð %ð %ðð ð ð ð$ð ð ð ðð ð ð ðð ð ð ð1ð 1ð 1ð 1ðð ð ð ðð ð ð ð#*ð #*ð #*ð #*ðJ.ð .ð .ð .ð@ð @ð @ð @ðð ð ð ð.ð ð ð ð1ð 1ð 1ð 1ð
 Ôðð ð ñ Ôðð88ð 8ð 8ð 8ðð ð ð ðð ð ð ð	&ð 	&ð 	&ð 	&ð'ð 'ð 'ð 'ðð ð ð ð(
.ð 
.ð 
.ð 
.ð 
.ð 
.r6   r   rG   rH   r   rÉ   c                ó„   — | d         t           v p1| d         | d         d         d…                              ¦   «         dk    S )z+Check if the token is an end-of-line token.r   é   r×   rK   Nz\
)r¬   Úlstrip©rG   s    r4   Úis_eol_tokenrä   x  s<   € à�Œ8•wÐÐL %¨¤(¨5°¬8°A¬;¨=¨=Ô"9×"@Ò"@Ñ"BÔ"BÀfÒ"LÐLr6   c                ó^   — | j         t          k    p| j         t          j        k    od| j        v S )z$Check if this is a multiline string.ú
)rL   r
   r@   rr   Ústringrã   s    r4   Úis_multiline_stringrè   }  s.   € àŒ:�Ò$ð ØŒ
•h”oÒ%Ð>¨$°%´,Ð*>ðr6   c                ó    — | d         t           v S )z0Check if the token type is a newline token type.r   )r¬   rã   s    r4   Útoken_is_newlinerê   „  s   € à�Œ8•wÐÐr6   Úcurrent_parentheses_countrD   Ú
token_textr   c                ó*   — |dv r| dz   S |dv r| dz
  S | S )z Count the number of parentheses.z([{rK   rm   rß   )rë   rì   s     r4   Úcount_parenthesesrî   ‰  s4   € à�UÐÐØ(¨1Ñ,Ð,Ø	�uÐ	Ð	Ø(¨1Ñ,Ð,Ø$Ð$r6   r{   c                óF   — t          |                      d¦  «        ¦  «        S )zóReturn the amount of indentation.

    Tabs are expanded to the next multiple of 8.

    >>> expand_indent('    ')
    4
    >>> expand_indent('\t')
    8
    >>> expand_indent('       \t')
    8
    >>> expand_indent('        \t')
    16
    é   )r.   Ú
expandtabs)r{   s    r4   r\   r\   ’  s   € õ ˆt�Š˜qÑ!Ô!Ñ"Ô"Ð"r6   rz   c                óÊ   — |                       | d         ¦  «        dz   }t          | ¦  «        dz
  }| dd…         dv r
|dz  }|dz  }| d|…         d||z
  z  z   | |d…         z   S )zÈReplace contents with 'xxx' to prevent syntax matching.

    >>> mutate_string('"abc"')
    '"xxx"'
    >>> mutate_string("'''abc'''")
    "'''xxx'''"
    >>> mutate_string("r'abc'")
    "r'xxx'"
    r   rK   éýÿÿÿN)z"""z'''r›   rk   )Úindexr.   )rz   rM   rO   s      r4   rs   rs   ¦  s{   € ð �JŠJ�t˜B”xÑ Ô  1Ñ$€EÝ
ˆd‰)Œ)�a‰-€CàˆBˆCˆC„y�NÐ"Ð"Ø�‰
ˆØˆq‰ˆØ���Œ<˜#  u¡Ñ-Ñ-°°S°T°T´
Ñ:Ð:r6   )rG   rH   r   rÉ   )rë   rD   rì   r   r   rD   )r{   r   r   rD   )rz   r   r   r   ))rÛ   Ú
__future__r   Úargparserƒ   rÝ   Úloggingr@   Útypingr   r   r   r   Úflake8r   r	   Úflake8._compatr
   r   Úflake8.plugins.finderr   Ú	getLoggerrØ   r“   Ú	frozensetr«   r¬   ÚINDENTr¨   ro   rD   rZ   r   ri   r   rä   rè   rê   rî   r\   rs   rß   r6   r4   ú<module>rÿ      s.  ðØ LÐ LØ "Ð "Ð "Ð "Ð "Ð "à €€€Ø 
€
€
€
Ø Ð Ð Ð Ø €€€Ø €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø &Ð &Ð &Ð &Ð &Ð &Ø )Ð )Ð )Ð )Ð )Ð )Ø .Ð .Ð .Ð .Ð .Ð .à€gÔ˜Ñ!Ô!€Ø
ˆ)�X”[ (Ô"2Ð3Ñ
4Ô
4€àˆiØ„[�(Ô" H¤O°X´_ÐEñô €ð �u˜S %¨¨S¨¤/Ð1Ô2Ô3€Ø��c”˜D œI Ð6Ô7€ðV.ð V.ð V.ð V.ð V.ñ V.ô V.ð V.ðr
Mð Mð Mð Mð
ð ð ð ðð ð ð ð
%ð %ð %ð %ð#ð #ð #ð #ð(;ð ;ð ;ð ;ð ;ð ;r6   