Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Remove support for deprecated ast nodes #625

Merged
merged 12 commits into from
Dec 22, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
- #604 Fix test that sometimes leaves files behind in the current working directory (@lieryan)
- #606 Deprecate compress_objectdb and compress_history
- #607 Remove importing from legacy files with `.pickle` suffix
- #625 Remove support for deprecated ast nodes

# Release 1.6.0

Expand Down
8 changes: 4 additions & 4 deletions docs/library.rst
Original file line number Diff line number Diff line change
Expand Up @@ -501,7 +501,7 @@ might want to do something like:
percent = jobset.get_percent_done()
if percent is not None:
text += ' ... %s percent done' % percent
print text
print(text)

handle.add_observer(update_progress)

Expand Down Expand Up @@ -631,7 +631,7 @@ Using rename refactoring:
>>> from rope.contrib import generate
>>> pkg = generate.create_package(project, 'pkg')
>>> mod2 = generate.create_module(project, 'mod2', pkg)
>>> mod2.write('import mod1\nprint mod1.a_var\n')
>>> mod2.write('import mod1\nprint(mod1.a_var)\n')

# We can use `Project.find_module` for finding modules, too
>>> assert mod2 == project.find_module('pkg.mod2')
Expand All @@ -643,15 +643,15 @@ Using rename refactoring:
>>> mod1.read()
u'new_var = 10\n'
>>> mod2.read()
u'import mod1\nprint mod1.new_var\n'
u'import mod1\nprint(mod1.new_var)\n'

# Undoing rename refactoring
>>> project.history.undo()
...
>>> mod1.read()
u'a_var = 10\n'
>>> mod2.read()
u'import mod1\nprint mod1.a_var\n'
u'import mod1\nprint(mod1.a_var)\n'

# Cleaning up
>>> pkg.remove()
Expand Down
81 changes: 3 additions & 78 deletions rope/refactor/patchedast.py
Original file line number Diff line number Diff line change
Expand Up @@ -72,10 +72,6 @@ def __init__(self, source, children=False):

Number = object()
String = object()
semicolon_or_as_in_except = object()
exec_open_paren_or_space = object()
exec_close_paren_or_space = object()
exec_in_or_comma = object()
with_or_comma_context_manager = object()
empty_tuple = object()

Expand Down Expand Up @@ -126,22 +122,6 @@ def _handle(self, node, base_children, eat_parens=False, eat_spaces=False):
region = self.source.consume_number()
elif child == self.empty_tuple:
region = self.source.consume_empty_tuple()
elif child == "!=":
# INFO: This has been added to handle deprecated ``<>``
region = self.source.consume_not_equal()
elif child == self.semicolon_or_as_in_except:
# INFO: This has been added to handle deprecated
# semicolon in except
region = self.source.consume_except_as_or_semicolon()
elif child == self.exec_open_paren_or_space:
# These three cases handle the differences between
# the deprecated exec statement and the exec
# function.
region = self.source.consume_exec_open_paren_or_space()
elif child == self.exec_in_or_comma:
region = self.source.consume_exec_in_or_comma()
elif child == self.exec_close_paren_or_space:
region = self.source.consume_exec_close_paren_or_space()
elif child == self.with_or_comma_context_manager:
region = self.source.consume_with_or_comma_context_manager()
elif isinstance(node, (ast.JoinedStr, ast.FormattedValue)):
Expand Down Expand Up @@ -318,9 +298,6 @@ def _AnnAssign(self, node):
children.append(node.value)
self._handle(node, children)

def _Repr(self, node):
self._handle(node, ["`", node.value, "`"])

def _BinOp(self, node):
children = [node.left] + self._get_op(node.op) + [node.right]
self._handle(node, children)
Expand Down Expand Up @@ -473,15 +450,6 @@ def _NamedExpr(self, node):
children = [node.target, ":=", node.value]
self._handle(node, children)

def _Exec(self, node):
children = ["exec", self.exec_open_paren_or_space, node.body]
if node.globals:
children.extend([self.exec_in_or_comma, node.globals])
if node.locals:
children.extend([",", node.locals])
children.append(self.exec_close_paren_or_space)
self._handle(node, children)

def _ExtSlice(self, node):
children = []
for index, dim in enumerate(node.dims):
Expand Down Expand Up @@ -668,22 +636,12 @@ def _arg(self, node):
def _Pass(self, node):
self._handle(node, ["pass"])

def _Print(self, node):
children = ["print"]
if node.dest:
children.extend([">>", node.dest])
if node.values:
children.append(",")
children.extend(self._child_nodes(node.values, ","))
if not node.nl:
children.append(",")
self._handle(node, children)

def _Raise(self, node):
children = ["raise"]
if node.exc:
children.append(node.exc)
if node.cause:
children.append("from")
children.append(node.cause)
self._handle(node, children)

Expand All @@ -693,15 +651,6 @@ def _Return(self, node):
children.append(node.value)
self._handle(node, children)

def _Sliceobj(self, node):
children = []
for index, slice in enumerate(node.nodes):
if index > 0:
children.append(":")
if slice:
children.append(slice)
self._handle(node, children)

def _Index(self, node):
self._handle(node, [node.value])

Expand Down Expand Up @@ -760,12 +709,11 @@ def _ExceptHandler(self, node):
self._excepthandler(node)

def _excepthandler(self, node):
# self._handle(node, [self.semicolon_or_as_in_except])
children = ["except"]
if node.type:
children.append(node.type)
if node.name:
children.append(self.semicolon_or_as_in_except)
children.append("as")
children.append(node.name)
children.append(":")
children.extend(node.body)
Expand Down Expand Up @@ -925,28 +873,6 @@ def consume_number(self):
def consume_empty_tuple(self):
return self._consume_pattern(re.compile(r"\(\s*\)"))

def consume_not_equal(self):
if _Source._not_equals_pattern is None:
_Source._not_equals_pattern = re.compile(r"<>|!=")
repattern = _Source._not_equals_pattern
return self._consume_pattern(repattern)

def consume_except_as_or_semicolon(self):
repattern = re.compile(r"as|,")
return self._consume_pattern(repattern)

def consume_exec_open_paren_or_space(self):
repattern = re.compile(r"\(|")
return self._consume_pattern(repattern)

def consume_exec_in_or_comma(self):
repattern = re.compile(r"in|,")
return self._consume_pattern(repattern)

def consume_exec_close_paren_or_space(self):
repattern = re.compile(r"\)|")
return self._consume_pattern(repattern)

def consume_with_or_comma_context_manager(self):
repattern = re.compile(r"with|,")
return self._consume_pattern(repattern)
Expand Down Expand Up @@ -1014,9 +940,8 @@ def __getslice__(self, i, j):

def _get_number_pattern(self):
# HACK: It is merely an approaximation and does the job
integer = r"\-?(0x[\da-fA-F]+|\d+)[lL]?"
integer = r"\-?(0x[\da-fA-F]+|\d+)"
return r"(%s(\.\d*)?|(\.\d+))([eE][-+]?\d+)?[jJ]?" % integer

_string_pattern = None
_number_pattern = None
_not_equals_pattern = None
16 changes: 0 additions & 16 deletions ropetest/refactor/extracttest.py
Original file line number Diff line number Diff line change
Expand Up @@ -2342,22 +2342,6 @@ def new_func():
""")
self.assertEqual(expected, refactored)

@testutils.only_for_versions_lower("3")
def test_extract_exec_statement(self):
code = dedent("""\
exec "def f(): pass" in {}
""")
start, end = self._convert_line_range_to_offset(code, 1, 1)
refactored = self.do_extract_method(code, start, end, "new_func")
expected = dedent("""\

def new_func():
exec "def f(): pass" in {}

new_func()
""")
self.assertEqual(expected, refactored)

@testutils.only_for_versions_higher("3.5")
def test_extract_async_function(self):
code = dedent("""\
Expand Down