File: //usr/lib/python3.7/lib2to3/__pycache__/refactor.cpython-37.pyc
B
µ5»a0k ã @ s d Z dZddlZddlZddlZddlZddlZddlZddlm Z ddl
mZmZm
Z
ddlmZ ddlmZmZ dd lmZ d!dd„ZG d
d„ deƒZdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZG dd„ deƒZG dd„ deƒZG 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ƒ}tj |j¡}g }xLtt |¡ƒD ]:}| d¡r2| d¡r2|rZ|dd… }| |dd… ¡ q2W |S )zEReturn a sorted list of all available fix names in the given package.Ú*Úfix_z.pyé Néýÿÿÿ)
Ú
__import__ÚosÚpathÚdirnameÚ__file__ÚsortedÚlistdirÚ
startswithÚendswithÚappend)Z fixer_pkgZ
remove_prefixZpkgZ fixer_dirZ fix_namesÚname© r ú&/usr/lib/python3.7/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
ƒ }x*| jD ] }x|D ]}| t|ƒ¡ 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)
Ú
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 }x„| D ]|}|jrjyt|jƒ}W n tk
rJ | |¡ Y qX xB|D ]}|| |¡ qRW q|jdk r†||j |¡ q| |¡ qW x,tt j
j ¡ t j
j
ƒD ]}|| |¡ q¬W 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"