3
�
�^=m c @ s< d Z dZddlZddlZddlZddlZddlZddlZddlm Z ddl
mZmZm
Z
ddlmZ ddlmZmZ dd lmZ d&dd�ZG d
d� de�Zdd� Zdd� Zdd� Zdd� Zejd'k r�ddlZejZdd� Z dd� Z!neZeZ eZ!dd� Z"G dd� de�Z#G d d!� d!e$�Z%G d"d#� d#e�Z&G d$d%� 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�}tjj|j�}g }xLttj|��D ]:}|jd�r2|jd�r2|rZ|dd� }|j |dd� � q2W |S )zEReturn a sorted list of all available fix names in the given package.�*�fix_z.pyi N� i����)
�
__import__�os�pathZdirnameZ__file__ZsortedZlistdir�
startswith�endswith�append)Z fixer_pkgZ
remove_prefixZpkgZ fixer_dirZ fix_names�name� r �(/usr/lib64/python3.6/lib2to3/refactor.py�get_all_fix_names s r c @ � e Zd ZdS )�
_EveryNodeN��__name__�
__module__�__qualname__r r r r r + � r c C s� t | tjtjf�r(| jdkr t�| jhS t | tj�rH| jrDt| j�S t�t | tj �r�t
� }x*| jD ] }x|D ]}|jt|�� qlW qbW |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)
Z
isinstancer ZNodePatternZLeafPattern�typer ZNegatedPatternZcontent�_get_head_typesZWildcardPattern�set�update� Exception)Zpat�r�pZxr r r r /