관리-도구
편집 파일: refactor.cpython-38.opt-1.pyc
U e5dk � @ s d Z dZddlZddlZddlZddlZddlZddlZddlZddl m Z ddlmZm Z mZ ddlmZ ddlmZmZ dd lmZ d!dd�ZG d d� de�Zdd� Zdd� Zdd� Zdd� Zdd� ZG dd� de�ZG dd� de�Z G dd� de�Z!G dd � d e �Z"dS )"z�Refactoring framework. Used as a main program, this can refactor any number of files and/or recursively descend down directories. Imported as a module, this provides infrastructure to write your own refactoring tool. z#Guido van Rossum <guido@python.org>� N)�chain� )�driver�tokenize�token)� find_root)�pytree�pygram)�btm_matcherTc C sT t | g g dg�}g }t�|j�D ].\}}}|�d�r |rD|dd� }|�|� q |S )zEReturn a sorted list of all available fix names in the given package.�*�fix_� N)� __import__�pkgutilZiter_modules�__path__� startswith�append)Z fixer_pkgZ remove_prefixZpkgZ fix_names�finder�nameZispkg� r �(/usr/lib64/python3.8/lib2to3/refactor.py�get_all_fix_names s r c @ s e Zd ZdS )� _EveryNodeN��__name__� __module__�__qualname__r r r r r + s r c C s� t | tjtjf�r(| jdkr t�| jhS t | tj�rH| jrDt| j�S t�t | tj �r�t � }| jD ]}|D ]}|�t|�� qhq`|S td| ��dS )zf Accepts a pytree Pattern Node and returns a set of the pattern types which will match first. Nz$Oh no! I don't understand pattern %s) � isinstancer ZNodePatternZLeafPattern�typer ZNegatedPatternZcontent�_get_head_typesZWildcardPattern�set�update� Exception)Zpat�r�p�xr r r r / s r c C s� t �t�}g }| D ]x}|jrdzt|j�}W n tk rH |�|� Y q�X |D ]}|| �|� qNq|jdk r�||j �|� q|�|� qtt j j�� t j j �D ]}|| �|� q�t|�S )z^ Accepts a list of fixers and returns a dictionary of head node type --> fixer list. N)�collections�defaultdict�list�patternr r r Z_accept_typer r �python_grammarZ symbol2number�values�tokens�extend�dict)Z fixer_listZ head_nodesZevery�fixerZheadsZ node_typer r r �_get_headnode_dictK s$ �r0 c s � fdd�t � d�D �S )zN Return the fully qualified names for fixers in the package pkg_name. c s g | ]}� d | �qS ��.r )�.0�fix_name�Zpkg_namer r � <listcomp>h s �z+get_fixers_from_package.<locals>.<listcomp>F)r r5 r r5 r �get_fixers_from_packaged s �r7 c C s | S �Nr )�objr r r � _identityk s r: c sX d}t �t�| �j�� � fdd�}ttjt jtj h�}t � }z�|� \}}||krTq>q>|tjkrl|rf�q6d}q>|tjk�r6|dk�r6|� \}}|tjks�|dkr��q6|� \}}|tjks�|dkrq6|� \}}|tj kr�|dkr�|� \}}|tjk�r4|�|� |� \}}|tj k�s.|d k�r"�q4|� \}}q�q>�q6q>W n tk �rN Y nX t|�S ) NFc s t � �} | d | d fS )Nr r )�next)�tok��genr r �advancer s z(_detect_future_features.<locals>.advanceT�fromZ __future__�import�(�,)r �generate_tokens�io�StringIO�readline� frozensetr �NEWLINE�NL�COMMENTr �STRING�NAME�OP�add� StopIteration)�sourceZhave_docstringr? �ignore�features�tp�valuer r= r �_detect_future_featureso sB rV c @ s e Zd ZdZdS )� FixerErrorzA fixer could not be loaded.N)r r r �__doc__r r r r rW � s rW c @ s� e Zd Zddd�ZdZdZd4dd�Zdd � Zd d� Zdd � Z dd� Z dd� Zd5dd�Zd6dd�Z dd� Zd7dd�Zdd� Zd8dd�Zdd� Zd d!� Zd9d"d#�Zd:d$d%�Zd&Zd'Zd(d)� Zd*d+� Zd,d-� Zd.d/� Zd0d1� Zd2d3� ZdS );�RefactoringToolF)�print_function�write_unchanged_filesZFixr Nc C s. || _ |pg | _| j�� | _|dk r0| j�|� | jd rDtj| _ntj | _| j� d�| _g | _t �d�| _g | _d| _tj| jtj| jd�| _| �� \| _| _g | _t�� | _g | _g | _t| j| j�D ]F}|j r�| j�!|� q�|| jkr�| j�"|� q�|| jkr�| j�"|� q�t#| j�| _$t#| j�| _%dS )z�Initializer. Args: fixer_names: a list of fixers to import options: a dict with configuration. explicit: a list of fixers to run even if they are explicit. NrZ r[ rY F)�convert�logger)&�fixers�explicit�_default_options�copy�optionsr! r �!python_grammar_no_print_statement�grammarr* �getr[ �errors�loggingZ getLoggerr] � fixer_log�wroter ZDriverr r\ � get_fixers� pre_order� post_order�files�bmZ BottomMatcher�BMZ bmi_pre_orderZbmi_post_orderr Z BM_compatibleZ add_fixerr r0 �bmi_pre_order_heads�bmi_post_order_heads)�selfZfixer_namesrb r_ r/ r r r �__init__� s>