mirror of
https://github.com/davidhalter/parso.git
synced 2026-01-24 20:12:38 +08:00
Give parso refactoring tools
This commit is contained in:
@@ -13,6 +13,7 @@ from parso.python.parser import Parser as PythonParser
|
|||||||
from parso.python.errors import ErrorFinderConfig
|
from parso.python.errors import ErrorFinderConfig
|
||||||
from parso.python import pep8
|
from parso.python import pep8
|
||||||
from parso.file_io import FileIO, KnownContentFileIO
|
from parso.file_io import FileIO, KnownContentFileIO
|
||||||
|
from parso.normalizer import RefactoringNormalizer
|
||||||
|
|
||||||
_loaded_grammars = {}
|
_loaded_grammars = {}
|
||||||
|
|
||||||
@@ -170,6 +171,9 @@ class Grammar(object):
|
|||||||
|
|
||||||
return self._get_normalizer_issues(node, self._error_normalizer_config)
|
return self._get_normalizer_issues(node, self._error_normalizer_config)
|
||||||
|
|
||||||
|
def refactor(self, base_node, node_to_str_map):
|
||||||
|
return RefactoringNormalizer(node_to_str_map).walk(base_node)
|
||||||
|
|
||||||
def _get_normalizer(self, normalizer_config):
|
def _get_normalizer(self, normalizer_config):
|
||||||
if normalizer_config is None:
|
if normalizer_config is None:
|
||||||
normalizer_config = self._default_normalizer_config
|
normalizer_config = self._default_normalizer_config
|
||||||
|
|||||||
@@ -12,6 +12,9 @@ class _NormalizerMeta(type):
|
|||||||
|
|
||||||
|
|
||||||
class Normalizer(use_metaclass(_NormalizerMeta)):
|
class Normalizer(use_metaclass(_NormalizerMeta)):
|
||||||
|
_rule_type_instances = {}
|
||||||
|
_rule_value_instances = {}
|
||||||
|
|
||||||
def __init__(self, grammar, config):
|
def __init__(self, grammar, config):
|
||||||
self.grammar = grammar
|
self.grammar = grammar
|
||||||
self._config = config
|
self._config = config
|
||||||
@@ -181,3 +184,20 @@ class Rule(object):
|
|||||||
if self.is_issue(node):
|
if self.is_issue(node):
|
||||||
issue_node = self.get_node(node)
|
issue_node = self.get_node(node)
|
||||||
self.add_issue(issue_node)
|
self.add_issue(issue_node)
|
||||||
|
|
||||||
|
|
||||||
|
class RefactoringNormalizer(Normalizer):
|
||||||
|
def __init__(self, node_to_str_map):
|
||||||
|
self._node_to_str_map = node_to_str_map
|
||||||
|
|
||||||
|
def visit(self, node):
|
||||||
|
try:
|
||||||
|
return self._node_to_str_map[node]
|
||||||
|
except KeyError:
|
||||||
|
return super(RefactoringNormalizer, self).visit(node)
|
||||||
|
|
||||||
|
def visit_leaf(self, leaf):
|
||||||
|
try:
|
||||||
|
return self._node_to_str_map[leaf]
|
||||||
|
except KeyError:
|
||||||
|
return super(RefactoringNormalizer, self).visit_leaf(leaf)
|
||||||
|
|||||||
Reference in New Issue
Block a user