� c��jsk��� dZddlZddlZddlZddlZddlZddlZddlZddlm Z ddl m Z m Z m Z ddlmZddlmZmZddlmZdd �ZGd �d e�Zd �Zd �Zd�Zd�Zd�ZGd�de�ZGd�de�ZGd�de�Z Gd�de�Z!y)z#Guido van Rossum �N)�chain�)�driver�tokenize�token)� find_root)�pytree�pygram)� btm_matcherc��� t|ggdg�}g}tj|j�D]0\}}}|j d�s�|r|dd}|j |��2|S)N�*�fix_�)� __import__�pkgutil� iter_modules�__path__� startswith�append)� fixer_pkg� remove_prefix�pkg� fix_names�finder�name�ispkgs �)/usr/lib64/python3.12/lib2to3/refactor.py�get_all_fix_namesrsm��O� �Y��B��� .�C��I�&�3�3�C�L�L�A����e� �?�?�6� "���A�B�x�� � � �T� "� B� ��c� �eZdZy)� _EveryNodeN��__name__� __module__� __qualname__�rrr!r!+���rr!c��� t|tjtjf�r|j�t �|jhSt|tj �r'|jrt|j�St �t|tj�r>t�}|jD]#}|D]}|jt|����%|Std|z��)Nz$Oh no! I don't understand pattern %s) � isinstancer � NodePattern� LeafPattern�typer!�NegatedPattern�content�_get_head_types�WildcardPattern�set�update� Exception)�pat�r�p�xs rr/r//s���9��#��*�*�F�,>�,>�?�@� �8�8� �� ����z���#�v�,�,�-� �;�;�"�3�;�;�/� /����#�v�-�-�.� �E�����A��������+�,����� �:�S�A� B�Brc�Z� tjt�}g}|D]|}|jr2 t |j�}|D]}||j |���A|j�||jj |��l|j |��~ttjjj�tjj�D]}||j|��t|�S#t $r|j |�Y�� wxYw�N)� collections� defaultdict�list�patternr/rr!� _accept_typerr �python_grammar� symbol2number�values�tokens�extend�dict)� fixer_list� head_nodes�every�fixer�heads� node_types r�_get_headnode_dictrKKs��/��(�(��.�J� �E��� �=�=� 8�'�� � �6��"'�I��y�)�0�0��7�"'��!�!�-��5�-�-�.�5�5�e�<�� � �U�#���6�0�0�>�>�E�E�G�!�0�0�7�7�9� ��9��$�$�U�+�9� � � ���� $�� � �U�#� $�s�D � D*�)D*c�N� t|d�D�cgc] }|dz|z�� c}Scc}w)NF�.)r)�pkg_name�fix_names r�get_fixers_from_packagerPdsB���.�h��>� @�>�� �s�N�X� %�>� @�@�� @s�"c��|Sr9r&)�objs r� _identityrSks�� �Jrc�|��d}tjtj|�j���fd�}t t jtjt jh�}t�} |�\}}||vr�|t jk(r|rn�d}n�|t jk(r�|dk(r�|�\}}|t jk7s|dk7rn�|�\}}|t jk7s|dk7rn�|�\}}|t jk(r|dk(r |�\}}|t jk(rT|j|�|�\}}|t jk7s|dk7rn |�\}}|t jk(r�Rnn��t |�S#t$r Yt |�SwxYw) NFc�.��t��}|d|dfS)Nrr)�next)�tok�gens �r�advancez(_detect_future_features..advancers����3�i���1�v�s�1�v�~�rT�from� __future__�import�(�,)r�generate_tokens�io�StringIO�readline� frozensetr�NEWLINE�NL�COMMENTr1�STRING�NAME�OP�add� StopIteration)�source�have_docstringrY�ignore�features�tp�valuerXs @r�_detect_future_featuresrros�����N� � "� "�2�;�;�v�#6�#?�#?� @�C���� � �x�{�{�E�M�M�B� C�F��u�H� ��� �I�B���V�|���u�|�|�#�!��!%���u�z�z�!�e�v�o�#�I� ��E�����#�u� �'<��#�I� ��E�����#�u��'8��#�I� ��E�����>�e�s�l� '� �I�B���E�J�J�&��L�L��'� '� �I�B���U�X�X�~��#��� '� �I�B�� �E�J�J�&��3�8 �X� ��� � � � �X� �� �s�>DF%�F%�% F;�:F;c� �eZdZy)� FixerErrorNr"r&rrrtrt�s��&rrtc��eZdZdddd�ZdZdZdd�Zd�Zd�Zd �Z d �Z d �Z dd �Z dd �Z d�Zdd�Zd�Zd d�Zd�Zd�Z d!d�Zd"d�ZdZdZd�Zd�Zd�Zd�Zd�Zd�Zy)#�RefactoringToolF)�print_function� exec_function�write_unchanged_files�FixrNc��� ||_|xsg|_|jj�|_|�|jj |�t jj�|_|jdr|jjd=n&|jdr|jjd=|jjd�|_ g|_ tjd�|_g|_d|_t%j&|jt(j*|j��|_|j-�\|_|_g|_t5j6�|_g|_g|_t?|j0|j.�D]~}|j@r|j8jC|��+||j.vr|j:jE|��U||j0vs�d|j<jE|���tG|j:�|_$tG|j<�|_%y) Nrw�printrx�execryrvF)�convert�logger)&�fixers�explicit�_default_options�copy�optionsr2r r?�grammar�keywords�getry�errors�logging� getLoggerr� fixer_log�wroter�Driverr r~� get_fixers� pre_order� post_order�files�bm� BottomMatcher�BM� bmi_pre_order�bmi_post_orderr� BM_compatible� add_fixerrrK�bmi_pre_order_heads�bmi_post_order_heads)�self� fixer_namesr�r�rHs r�__init__zRefactoringTool.__init__�s��� �"�� � ��B�� ��,�,�1�1�3�� � � � �L�L� � �� (��,�,�1�1�3�� � �<�<�(� )�� � �%�%�g�.� �\�\�/� *�� � �%�%�f�-� &*�\�\�%5�%5�6M�%N��"��� ��'�'�(9�:�� ������ ��m�m�D�L�L�,2�N�N�+/�;�;�8�� �+/�/�/�*;�'������� ��"�"�$������ ����4�?�?�D�N�N�;�E��"�"����!�!�%�(��$�.�.�(��"�"�)�)�%�0��$�/�/�)��#�#�*�*�5�1�<�$6�d�6H�6H�#I�� �$6�t�7J�7J�$K��!rc ��� g}g}|jD�]w}t|iidg�}|jdd�d}|j|j�r|t |j�d}|j d�}|jdj|D�cgc]}|j���c}�z} t||�} | |j|j�} | jr0|jdur"||jvr|j!d |��� |j#d |�| j$d k(r|j'| ���@| j$d k(r|j'| ���btd | j$z��t)j*d�} |j-| ��|j-| ��||fScc}w#t$rtd|�d|���d�wxYw)Nr rMr������_�z Can't find TzSkipping optional fixer: %szAdding transformation: %s�pre�postzIllegal fixer order: %r� run_order��key)r�r�rsplitr� FILE_PREFIX�len�split� CLASS_PREFIX�join�title�getattr�AttributeErrorrtr�r�r�� log_message� log_debug�orderr�operator� attrgetter�sort) r��pre_order_fixers�post_order_fixers� fix_mod_path�modrO�partsr6� class_name� fix_classrH�key_funcs rr�zRefactoringTool.get_fixers�s��� ����� �K�K�L��\�2�r�C�5�9�C�#�*�*�3��2�2�6�H��"�"�4�#3�#3�4�#�C��(8�(8�$9�$:�;���N�N�3�'�E��*�*�R�W�W��5O��A�a�g�g�i��5O�-P�P�J� X�#�C��4� ��d�l�l�D�N�N�;�E��~�~�$�-�-�t�";� �� � �5�� � �!>��I�� �N�N�6�� A��{�{�e�#� �'�'��.�����&�!�(�(��/� �!:�U�[�[�!H�I�I�/(�2�&�&�{�3�����(��+����8��,� �"3�4�4��-6P��"� X� �x��!L�M�SW�W� X�s�G �9 G�G+c�� �r9r&)r��msg�args�kwdss r� log_errorzRefactoringTool.log_errors��*� rc�J� |r||z}|jj|�yr9)r�info�r�r�r�s rr�zRefactoringTool.log_messages#��$� ���*�C� � � ����rc�H�|r||z}|jj|�yr9)r�debugr�s rr�zRefactoringTool.log_debug s �� ���*�C� � � ���#�rc�� yr9r&)r��old_text�new_text�filename�equals r� print_outputzRefactoringTool.print_outputs �� � rc�� |D]H}tjj|�r|j|||��6|j |||��Jyr9)�os�path�isdir� refactor_dir� refactor_file)r��items�write� doctests_only� dir_or_files r�refactorzRefactoringTool.refactorsC��7� �K��w�w�}�}�[�)��!�!�+�u�m�D��"�"�;��}�E� !rc�� tjdz}tj|�D]�\}}}|jd|�|j �|j �|D]m}|j d�r�tj j|�d|k(s�;tj j||�} |j| ||��o|D� cgc]} | j d�r�| ��c} |dd��ycc} w)N�pyzDescending into %srMr) r��extsep�walkr�r�rr��splitextr�r�) r��dir_namer�r��py_ext�dirpath�dirnames� filenamesr�fullname�dns rr�zRefactoringTool.refactor_dir s��� � ���T�!��,.�G�G�H�,=� (�G�X�y� �N�N�/�� 9� �M�M�O� �N�N� �!������,��G�G�$�$�T�*�1�-��7�!�w�w�|�|�G�T�:�H��&�&�x�� �F� "� )1�K��"�� � �c�8J�2��K�H�Q�K�->��Ls �C=�0C=c�� t|d�} tj|j �d}|j �tj|d|d��5}|j�|fcddd�S#t$r}|jd||�Yd}~yd}~wwxYw#|j �wxYw#1swYyxYw)N�rbzCan't open %s: %s�NNrr5r���encoding�newline) �open�OSErrorr�r�detect_encodingrb�closer`�read)r�r��f�errr�s r�_read_python_sourcez#RefactoringTool._read_python_source4s��� � ��X�t�$�A� ��/�/�� � �;�A�>�H� �G�G�I� �W�W�X�s�X�r� B�a��6�6�8�X�%�C� B��� � �N�N�.��#� >��� �� �G�G�I�� B� B�s.� A7�"B �B5�7 B�B�B� B2�5B>c�� |j|�\}}|�y|dz }|r^|jd|�|j||�}|js||k7r|j |||||�y|jd|�y|j ||�}|js|r.|j r"|j t|�dd|||��y|jd|�y)N� zRefactoring doctests in %szNo doctest changes in %sr�)r�r�zNo changes in %s)r�r��refactor_docstringry�processed_file�refactor_string� was_changed�str)r�r�r�r��inputr��output�trees rr�zRefactoringTool.refactor_fileDs�����2�2�8�<���x� �=� � �� �� � �N�N�7�� B��,�,�U�H�=�F��)�)�V�u�_��#�#�F�H�e�U�H�M����9�8�D��'�'��x�8�D��)�)�d�t�7G�7G��#�#�C��I�c�r�N�H�*/�(�$�D����1�8�� �"&�,�,�D�K�K� ��  �� #'�,�,�D�K�K� �s)�B� C+�(C&�C.�&C+�+C.�.D c��tjj�}|rZ|jd�|j |d�}|j s||k7r|j |d|�y|jd�y|j|d�}|j s|r)|jr|j t|�d|�y|jd�y)NzRefactoring doctests in stdinzzNo doctest changes in stdinzNo changes in stdin) �sys�stdinr�r�r�ryr�r�r�r�)r�r�r�r�r�s r�refactor_stdinzRefactoringTool.refactor_stdinvs���� � ��� �� � �N�N�:� ;��,�,�U�I�>�F��)�)�V�u�_��#�#�F�I�u�=����<�=��'�'��y�9�D��)�)�d�t�7G�7G��#�#�C��I�y�%�@����4�5rc��� t|j|j�D]}|j||��|j |j |j��|j |j |j��|jj|j��}t|j���r�|jjD�]�}||vs� ||s�||jtjj d��|j"r-||jtjj$��t'||�D�]}|||vr||j)|� t+|�|j.r||j.vr�F|j1|�}|s�Z|j3||�}|��o|j5|�|j�D]0}|j.sg|_|j.j7|��2|jj|j��}|D]"} | |vrg|| <|| j9|| ��$�����t|j��r���t|j|j�D]}|j;||��|j<S#t,$rY���wxYw)NT)r��reverser�)rr�r�� start_tree� traverse_byr�r�r��run�leaves�anyrAr�r�r �Base�depth�keep_line_order� get_linenor<�remover� ValueError�fixers_applied�match� transform�replacerrC� finish_treer�) r�r�rrH� match_set�node�results�new� new_matches�fxrs rrzRefactoringTool.refactor_tree�s{�� ��4�>�>�4�?�?�;�E� � � �T�4� (�<� ����1�1�4�>�>�3C�D� ����2�2�D�O�O�4E�F��G�G�K�K�� � � �.� ��)�"�"�$�%��������I�%�)�E�*:��e�$�)�)�f�k�k�.?�.?��)�N��,�,�"�%�(�-�-�&�+�+�2H�2H�-�I� $�Y�u�%5� 6���9�U�#3�3�%�e�,�3�3�D�9�%�%�d�O�  �.�.�5�D��+>�>@��(;�$(�$7�$7�$>�$>�u�$E� -=�/3�g�g�k�k�#�*�*�,�.G� �+6�C�+.�)�+;�79� �#��$-�c�N�$9�$9�+�c�:J�$K� ,7�A!7�(��)�"�"�$�%�b�4�>�>�4�?�?�;�E� � � �d�D� )�<������E *�%�%�%�s� K!�! K.�-K.c�� |sy|D]R}||jD]>}|j|�}|s�|j||�}|��,|j|�|}�@�Tyr9)r,rrr)r�r�� traversalrrHrrs rr zRefactoringTool.traverse_by�sc�� �� ��D��� � �*���+�+�d�+����/�/�$��8�C���� � �S�)�"�� +�rc�4� |jj|�|�|j|�d}|�y||k(}|j||||�|r|j d|�|j sy|r|j ||||�y|j d|�y)NrzNo changes to %szNot writing changes to %s)r�rr�r�r�ry� write_file)r�r�r�r�r�r�r�s rr�zRefactoringTool.processed_file�s��� � � � ���(�#� � ��/�/��9�!�<�H�����H�$�� ���(�H�h��>� � �N�N�-�x� 8��-�-�� � �O�O�H�h��(� C� �N�N�6�� Arc�b� tj|d|d��}|5 |j |�ddd�|j d|�d|_y#t$r}|jd||�Yd}~yd}~wwxYw#t$r}|jd||�Yd}~�ld}~wwxYw#1swY�uxYw)N�wr�r�zCan't create %s: %szCan't write %s: %szWrote changes to %sT)r`r�r�r�r�r�r�)r�r�r�r�r��fpr�s rr#zRefactoringTool.write_files��� �  �����3��2�F�B� � D�����"�� ���,�h�7��� ��� � �N�N�0�(�C� @� �� ��� D����3�X�s�C�C�� D���R�sE�A�B%�A<� A9�A4�4A9�< B"�B�B%�B"�"B%�%B.z>>> z... c ��� g}d}d}d}d}|jd��D�] }|dz }|j�j|j�rK|�#|j |j ||||��|}|g}|j |j�} |d| }�}|�S|j||jz�s#|||jj�zdzk(r|j|���|�#|j |j ||||��d}d}|j|���|�#|j |j ||||��dj|�S)NrT��keependsrr�r�) � splitlines�lstripr�PS1rC�refactor_doctest�find�PS2�rstriprr�) r�r�r��result�block� block_lineno�indent�lineno�line�is rr�z"RefactoringTool.refactor_docstringsl�� ������ ������$�$�d�$�3�D� �a�K�F��{�{�}�'�'����1��$��M�M�$�"7�"7��|�8>��#J�K�%� �����I�I�d�h�h�'���b�q����$��?�?�6�D�H�H�#4�5��6�D�H�H�O�O�$5�5��<�<�� � �T�"��$��M�M�$�"7�"7��|�8>��#J�K������ � �d�#�)4�* � � �M�M�$�/�/��|�06��B� C��w�w�v��rc�� |j|||�}|j||�r�t|�jd��}|d|dz ||dz d}} |djd�s |dxxdz cc<||jz|j!d�zg}|r#||D�cgc]}||j"z|z��c}z }|S#t$r�}|jjtj �r(|D]#}|j d|jd���%|jd|||jj|�|cYd}~Sd}~wwxYwcc}w) Nz Source: %sr�z+Can't parse docstring in %s line %s: %s: %sTr(rr�r)� parse_blockr3r� isEnabledForr��DEBUGr�r0r�rr#rr�r*�endswithr,�popr/) r�r2r5r4r�r�r�r6r�clippeds rr-z RefactoringTool.refactor_doctestDsH�� � ��#�#�E�6�6�:�D� � � �d�H� -��d�)�&�&��&�5�C��y��q��>�3�v�a�x�y�>�S�G��r�7�#�#�D�)��B��4����d�h�h�&������3�4�E���s�C�s�t�&�4�8�8�+�d�2�s�C�C��� ��#� ��{�{�'�'�� � �6�!�D��N�N�<����T�1B�C�"� �N�N�H�#�V�S�]�]�-C�-C�S� J��L��  �� Ds$�B=�E�= E �A;E�E �E c�X�|jrd}nd}|js|jd|�n4|jd|�|jD]}|j|��|jr3|jd�|jD]}|j|��|jr{t |j�dk(r|jd�n%|jdt |j��|jD]\}}}|j|g|��i|���yy) N�werez need to bezNo files %s modified.zFiles that %s modified:z$Warnings/messages while refactoring:rzThere was 1 error:zThere were %d errors:)r�r�r�r�r�r�)r�r@�file�messager�r�r�s r� summarizezRefactoringTool.summarizeas��� �:�:��D��D��z�z� � � �4�d� ;� � � �6�� =�� � ��� � ��&�#� �>�>� � � �C� D��>�>��� � ��)�*� �;�;��4�;�;��1�$�� � �!5�6�� � �!8�#�d�k�k�:J�K�#'�;�;���T�4� �� � ��4�t�4�t�4�$/� rc�~� |jj|j|||��}t�|_|Sr9)r� parse_tokens� wrap_toksrcr)r�r2r5r4r�s rr9zRefactoringTool.parse_blockxs9�� � �{�{�'�'����u�f�f�(M�N��(�{���� rc#��K� tj|j||�j�}|D]+\}}\}}\} } } ||dz z }| |dz z } ||||f| | f| f���-y�w)Nr)rr_� gen_lines�__next__) r�r2r5r4rBr,rq�line0�col0�line1�col1� line_texts rrFzRefactoringTool.wrap_toks�s�����I��)�)�$�.�.���*G�*P�*P�Q��DJ� @�D�%��%�� ���y� �V�a�Z� �E� �V�a�Z� �E� ���t�}�u�d�m�Y�F� F�EK�s�A"A$c#�K� ||jz}||jz}|}|D]R}|j|�r|t|�d��n,||j �dzk(rd��nt d|�d|����|}�T d����w)Nr�zline=z , prefix=r�)r,r/rr�r0�AssertionError)r�r2r4�prefix1�prefix2�prefixr6s rrHzRefactoringTool.gen_lines�s����� ��4�8�8�#���4�8�8�#�����D����v�&��3�v�;�<�(�(������4�/�/�� �$�T�6�%J�K�K��F����H��s�A?Br�)FF)F)NFNr9)r#r$r%r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrr r�r#r,r/r�r-rCr9rFrHr&rrrvrv�s���+0�).�27�9���L��K�3L�n&5�P�� �  � F�L�(&� =�.�66� M �^#�.GL� $�B�*�* �C� �C�)�V�:5�.� G�rrvc� �eZdZy)�MultiprocessingUnsupportedNr"r&rrrUrU�r'rrUc�B��eZdZ�fd�Z d�fd� Z�fd�Z�fd�Z�xZS)�MultiprocessRefactoringToolc�H��tt|� |i|��d|_d|_yr9)�superrWr��queue� output_lock�r�r��kwargsrs �rr�z$MultiprocessRefactoringTool.__init__�s'��� �)�4�9�4�J�6�J��� ���rc���|dk(rtt|� |||�S ddl}|j � td��|j�|_|j�|_ t|�D�cgc]}|j|j���� }} |D]}|j��tt|� |||�|j j�t|�D]}|j j!d��|D]#}|j#�s�|j��%d|_y#t$rt �wxYwcc}w#|j j�t|�D]}|j j!d��|D]#}|j#�s�|j��%d|_wxYw)Nrrz already doing multiple processes)�target)rYrWr��multiprocessing� ImportErrorrUrZ� RuntimeError� JoinableQueue�Lockr[�range�Process�_child�startr��put�is_alive) r�r�r�r�� num_processesr`r7� processesr6rs �rr�z$MultiprocessRefactoringTool.refactor�s���� �A� ��4�d�D��u�m�-� -� -� "� �:�:� !��A�B� B�$�2�2�4�� �*�/�/�1���#�M�2�4�2��%�,�,�D�K�K�,�@�2� �4� ������ �� �-�t� =�e�U�>K� M� �J�J�O�O� ��=�)��� � ���t�$�*����:�:�<��F�F�H���D�J��)� -�,� ,� -�� 4�� �J�J�O�O� ��=�)��� � ���t�$�*����:�:�<��F�F�H���D�J�s$�D6�/#E �,E�6E�AG�*Gc���|jj�}|�Q|\}} tt|�|i|��|jj �|jj�}|��Pyy#|jj �wxYwr9)rZr�rYrWr�� task_done)r��taskr�r]rs �rrgz"MultiprocessRefactoringTool._child�s�����z�z�~�~������L�D�&� '��1�4�F��%�#�%�� � �$�$�&��:�:�>�>�#�D���� � � �$�$�&�s �A0�0B c�~��|j�|jj||f�ytt|�|i|��Sr9)rZrirYrWr�r\s �rr�z)MultiprocessRefactoringTool.refactor_file�sA��� �:�:� !� �J�J�N�N�D�&�>� *��4�d�I��!��!� !r)FFr)r#r$r%r�r�rgr�� __classcell__)rs@rrWrW�s$��� � :?� ��: $�!�!rrW)T)"� __author__r`r�rrr�r�r:� itertoolsr�pgen2rrr� fixer_utilrr�r r r r�rr3r!r/rKrPrSrrrt�objectrvrUrWr&rr�rws����3� � � �� �����+�*�!��� � �� �C�8�2@��%�P'��'�F�f�F�R �� �4!�/�4!r