mirror of
https://github.com/davidhalter/parso.git
synced 2025-12-07 13:24:39 +08:00
Compare commits
5 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7ba49a9695 | ||
|
|
53da7e8e6b | ||
|
|
6dd29c8efb | ||
|
|
e4a9cfed86 | ||
|
|
a7f4499644 |
1
.gitignore
vendored
1
.gitignore
vendored
@@ -11,3 +11,4 @@ parso.egg-info/
|
|||||||
/.cache/
|
/.cache/
|
||||||
/.pytest_cache
|
/.pytest_cache
|
||||||
test/fuzz-redo.pickle
|
test/fuzz-redo.pickle
|
||||||
|
/venv/
|
||||||
|
|||||||
@@ -3,6 +3,12 @@
|
|||||||
Changelog
|
Changelog
|
||||||
---------
|
---------
|
||||||
|
|
||||||
|
0.6.2 (2020-02-27)
|
||||||
|
++++++++++++++++++
|
||||||
|
|
||||||
|
- Bugfixes
|
||||||
|
- Add Grammar.refactor (might still be subject to change until 0.7.0)
|
||||||
|
|
||||||
0.6.1 (2020-02-03)
|
0.6.1 (2020-02-03)
|
||||||
++++++++++++++++++
|
++++++++++++++++++
|
||||||
|
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ from parso.grammar import Grammar, load_grammar
|
|||||||
from parso.utils import split_lines, python_bytes_to_unicode
|
from parso.utils import split_lines, python_bytes_to_unicode
|
||||||
|
|
||||||
|
|
||||||
__version__ = '0.6.1'
|
__version__ = '0.6.2'
|
||||||
|
|
||||||
|
|
||||||
def parse(code=None, **kwargs):
|
def parse(code=None, **kwargs):
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -1081,7 +1081,13 @@ class ExprStmt(PythonBaseNode, DocstringMixin):
|
|||||||
|
|
||||||
def get_rhs(self):
|
def get_rhs(self):
|
||||||
"""Returns the right-hand-side of the equals."""
|
"""Returns the right-hand-side of the equals."""
|
||||||
return self.children[-1]
|
node = self.children[-1]
|
||||||
|
if node.type == 'annassign':
|
||||||
|
if len(node.children) == 4:
|
||||||
|
node = node.children[3]
|
||||||
|
else:
|
||||||
|
node = node.children[1]
|
||||||
|
return node
|
||||||
|
|
||||||
def yield_operators(self):
|
def yield_operators(self):
|
||||||
"""
|
"""
|
||||||
|
|||||||
@@ -45,8 +45,12 @@ class NodeOrLeaf(object):
|
|||||||
Returns the node immediately following this node in this parent's
|
Returns the node immediately following this node in this parent's
|
||||||
children list. If this node does not have a next sibling, it is None
|
children list. If this node does not have a next sibling, it is None
|
||||||
"""
|
"""
|
||||||
|
parent = self.parent
|
||||||
|
if parent is None:
|
||||||
|
return None
|
||||||
|
|
||||||
# Can't use index(); we need to test by identity
|
# Can't use index(); we need to test by identity
|
||||||
for i, child in enumerate(self.parent.children):
|
for i, child in enumerate(parent.children):
|
||||||
if child is self:
|
if child is self:
|
||||||
try:
|
try:
|
||||||
return self.parent.children[i + 1]
|
return self.parent.children[i + 1]
|
||||||
@@ -59,8 +63,12 @@ class NodeOrLeaf(object):
|
|||||||
children list. If this node does not have a previous sibling, it is
|
children list. If this node does not have a previous sibling, it is
|
||||||
None.
|
None.
|
||||||
"""
|
"""
|
||||||
|
parent = self.parent
|
||||||
|
if parent is None:
|
||||||
|
return None
|
||||||
|
|
||||||
# Can't use index(); we need to test by identity
|
# Can't use index(); we need to test by identity
|
||||||
for i, child in enumerate(self.parent.children):
|
for i, child in enumerate(parent.children):
|
||||||
if child is self:
|
if child is self:
|
||||||
if i == 0:
|
if i == 0:
|
||||||
return None
|
return None
|
||||||
@@ -71,6 +79,9 @@ class NodeOrLeaf(object):
|
|||||||
Returns the previous leaf in the parser tree.
|
Returns the previous leaf in the parser tree.
|
||||||
Returns `None` if this is the first element in the parser tree.
|
Returns `None` if this is the first element in the parser tree.
|
||||||
"""
|
"""
|
||||||
|
if self.parent is None:
|
||||||
|
return None
|
||||||
|
|
||||||
node = self
|
node = self
|
||||||
while True:
|
while True:
|
||||||
c = node.parent.children
|
c = node.parent.children
|
||||||
@@ -94,6 +105,9 @@ class NodeOrLeaf(object):
|
|||||||
Returns the next leaf in the parser tree.
|
Returns the next leaf in the parser tree.
|
||||||
Returns None if this is the last element in the parser tree.
|
Returns None if this is the last element in the parser tree.
|
||||||
"""
|
"""
|
||||||
|
if self.parent is None:
|
||||||
|
return None
|
||||||
|
|
||||||
node = self
|
node = self
|
||||||
while True:
|
while True:
|
||||||
c = node.parent.children
|
c = node.parent.children
|
||||||
|
|||||||
Reference in New Issue
Block a user