From 43f8e7c388c948e81a061f48154ad54895669c2b Mon Sep 17 00:00:00 2001 From: "Edward K. Ream" Date: Mon, 28 Nov 2022 07:29:52 -0600 Subject: [PATCH] PR: remove rope.base.utils.pycompat (#549) Remove pycompat.py. Define basestring as (str, bytes) Co-authored-by: Lie Ryan --- rope/base/builtins.py | 14 +++++--------- rope/base/fscommands.py | 2 -- rope/base/oi/runmod.py | 5 +++-- rope/base/oi/type_hinting/evaluate.py | 1 - rope/base/oi/type_hinting/utils.py | 1 - rope/base/prefs.py | 6 +++--- rope/base/pyobjectsdef.py | 22 +++++++--------------- rope/base/utils/pycompat.py | 21 --------------------- rope/refactor/extract.py | 11 +++-------- rope/refactor/patchedast.py | 13 ++++--------- rope/refactor/suites.py | 1 - ropetest/advanced_oi_test.py | 1 - ropetest/refactor/patchedasttest.py | 5 ++--- 13 files changed, 27 insertions(+), 76 deletions(-) delete mode 100644 rope/base/utils/pycompat.py diff --git a/rope/base/builtins.py b/rope/base/builtins.py index 537ffa98f..cb15668f7 100644 --- a/rope/base/builtins.py +++ b/rope/base/builtins.py @@ -1,4 +1,5 @@ """This module tries to support builtin types and functions.""" +import ast import inspect import io @@ -8,7 +9,6 @@ raw_input = input import rope.base.evaluate -from rope.base.utils import pycompat from rope.base import pynames, pyobjects, arguments, utils @@ -720,15 +720,11 @@ def get_name(self): return "lambda" def get_param_names(self, special_args=True): - result = [ - pycompat.get_ast_arg_arg(node) - for node in self.arguments.args - if isinstance(node, pycompat.ast_arg_type) - ] + result = [node.arg for node in self.arguments.args if isinstance(node, ast.arg)] if self.arguments.vararg: - result.append("*" + pycompat.get_ast_arg_arg(self.arguments.vararg)) + result.append("*" + self.arguments.vararg.arg) if self.arguments.kwarg: - result.append("**" + pycompat.get_ast_arg_arg(self.arguments.kwarg)) + result.append("**" + self.arguments.kwarg.arg) return result @property @@ -869,4 +865,4 @@ def _input_function(args): ), } -builtins = BuiltinModule(pycompat.builtins.__name__, initial=_initial_builtins) +builtins = BuiltinModule("builtins", initial=_initial_builtins) diff --git a/rope/base/fscommands.py b/rope/base/fscommands.py index f69b172e7..85d7a2396 100644 --- a/rope/base/fscommands.py +++ b/rope/base/fscommands.py @@ -10,8 +10,6 @@ import os import shutil import subprocess - -import rope.base.utils.pycompat as pycompat import typing diff --git a/rope/base/oi/runmod.py b/rope/base/oi/runmod.py index 50fb35907..0cdb3c6b8 100644 --- a/rope/base/oi/runmod.py +++ b/rope/base/oi/runmod.py @@ -11,7 +11,6 @@ def __rope_start_everything(): import inspect import types import threading - import rope.base.utils.pycompat as pycompat import base64 import hashlib import hmac @@ -231,7 +230,9 @@ def _realpath(path): if send_info != "-": data_sender = _FunctionCallDataSender(send_info, project_root) del sys.argv[1:4] - pycompat.execfile(file_to_run, run_globals) + with open(file_to_run) as f: + code = compile(f.read(), file_to_run, "exec") + exec(code, run_globals) if send_info != "-": data_sender.close() diff --git a/rope/base/oi/type_hinting/evaluate.py b/rope/base/oi/type_hinting/evaluate.py index 59c578b06..fde695455 100644 --- a/rope/base/oi/type_hinting/evaluate.py +++ b/rope/base/oi/type_hinting/evaluate.py @@ -1,7 +1,6 @@ # Based on super lightweight Simple Top-Down Parser from http://effbot.org/zone/simple-top-down-parsing.htm # and https://bitbucket.org/emacsway/sqlbuilder/src/default/sqlbuilder/smartsql/contrib/evaluate.py import re -from rope.base.utils import pycompat from rope.base.oi.type_hinting import utils from rope.base import utils as base_utils diff --git a/rope/base/oi/type_hinting/utils.py b/rope/base/oi/type_hinting/utils.py index b59cb6798..6c0ca416c 100644 --- a/rope/base/oi/type_hinting/utils.py +++ b/rope/base/oi/type_hinting/utils.py @@ -8,7 +8,6 @@ from rope.base import evaluate from rope.base.exceptions import AttributeNotFoundError from rope.base.pyobjects import PyClass, PyDefinedObject, PyFunction, PyObject -from rope.base.utils import pycompat def get_super_func(pyfunc): diff --git a/rope/base/prefs.py b/rope/base/prefs.py index 4fdd4aea6..03d793f21 100644 --- a/rope/base/prefs.py +++ b/rope/base/prefs.py @@ -6,9 +6,7 @@ from packaging.requirements import Requirement from pytoolconfig import PyToolConfig, UniversalKey, field from pytoolconfig.sources import Source - from rope.base.resources import Folder -from rope.base.utils import pycompat @dataclass @@ -258,7 +256,9 @@ def _read(self) -> bool: "__file__": config.real_path, } ) - pycompat.execfile(config.real_path, self.run_globals) + with open(config.real_path) as f: + code = compile(f.read(), config.real_path, "exec") + exec(code, self.run_globals) return True def parse(self) -> Optional[Dict]: diff --git a/rope/base/pyobjectsdef.py b/rope/base/pyobjectsdef.py index 5f6bf9271..9069dab0c 100644 --- a/rope/base/pyobjectsdef.py +++ b/rope/base/pyobjectsdef.py @@ -1,4 +1,3 @@ -from rope.base.pynames import DefinedName import rope.base.builtins import rope.base.codeanalyze import rope.base.evaluate @@ -15,7 +14,6 @@ arguments, utils, ) -from rope.base.utils import pycompat class PyFunction(pyobjects.PyFunction): @@ -79,16 +77,12 @@ def get_name(self): def get_param_names(self, special_args=True): # TODO: handle tuple parameters - result = [ - pycompat.get_ast_arg_arg(node) - for node in self.arguments.args - if isinstance(node, pycompat.ast_arg_type) - ] + result = [node.arg for node in self.arguments.args if isinstance(node, ast.arg)] if special_args: if self.arguments.vararg: - result.append(pycompat.get_ast_arg_arg(self.arguments.vararg)) + result.append(self.arguments.vararg.arg) if self.arguments.kwarg: - result.append(pycompat.get_ast_arg_arg(self.arguments.kwarg)) + result.append(self.arguments.kwarg.arg) return result def get_kind(self): @@ -461,9 +455,7 @@ def _AugAssign(self, node): pass def _For(self, node): - names = self._update_evaluated( - node.target, node.iter, ".__iter__().next()" # noqa - ) + self._update_evaluated(node.target, node.iter, ".__iter__().next()") # noqa for child in node.body + node.orelse: ast.walk(child, self) @@ -496,7 +488,7 @@ def _update_evaluated( return result def _With(self, node): - for item in pycompat.get_ast_with_items(node): + for item in node.items: if item.optional_vars: self._update_evaluated( item.optional_vars, item.context_expr, ".__enter__()" @@ -600,8 +592,8 @@ def _FunctionDef(self, node): if len(node.args.args) > 0: first = node.args.args[0] new_visitor = None - if isinstance(first, pycompat.ast_arg_type): - new_visitor = _ClassInitVisitor(self, pycompat.get_ast_arg_arg(first)) + if isinstance(first, ast.arg): + new_visitor = _ClassInitVisitor(self, first.arg) if new_visitor is not None: for child in ast.get_child_nodes(node): ast.walk(child, new_visitor) diff --git a/rope/base/utils/pycompat.py b/rope/base/utils/pycompat.py deleted file mode 100644 index b96a0eeaf..000000000 --- a/rope/base/utils/pycompat.py +++ /dev/null @@ -1,21 +0,0 @@ -import ast -import builtins - - -ast_arg_type = ast.arg - - -def execfile(fn, global_vars=None, local_vars=None): - with open(fn) as f: - code = compile(f.read(), fn, "exec") - exec(code, global_vars or {}, local_vars) - - -def get_ast_arg_arg(node): - if isinstance(node, str): # TODO: G21: Understand the Algorithm (Where it's used?) - return node - return node.arg - - -def get_ast_with_items(node): - return node.items diff --git a/rope/refactor/extract.py b/rope/refactor/extract.py index fd5762920..0b5c1d45f 100644 --- a/rope/refactor/extract.py +++ b/rope/refactor/extract.py @@ -5,7 +5,6 @@ from rope.base import ast, codeanalyze from rope.base.change import ChangeSet, ChangeContents from rope.base.exceptions import RefactoringError -from rope.base.utils import pycompat from rope.base.utils.datastructures import OrderedSet from rope.refactor import sourceutils, similarfinder, patchedast, suites, usefunction @@ -948,15 +947,11 @@ def _handle_loop_context(self, node): def _get_argnames(arguments): - result = [ - pycompat.get_ast_arg_arg(node) - for node in arguments.args - if isinstance(node, pycompat.ast_arg_type) - ] + result = [node.arg for node in arguments.args if isinstance(node, ast.arg)] if arguments.vararg: - result.append(pycompat.get_ast_arg_arg(arguments.vararg)) + result.append(vararg.arg) if arguments.kwarg: - result.append(pycompat.get_ast_arg_arg(arguments.kwarg)) + result.append(arguments.kwarg.arg) return result diff --git a/rope/refactor/patchedast.py b/rope/refactor/patchedast.py index f7882e232..9415f7543 100644 --- a/rope/refactor/patchedast.py +++ b/rope/refactor/patchedast.py @@ -5,13 +5,8 @@ from itertools import chain from rope.base import ast, codeanalyze, exceptions -from rope.base.utils import pycompat - -try: - basestring -except NameError: - basestring = (str, bytes) +basestring = (str, bytes) COMMA_IN_WITH_PATTERN = re.compile(r"\(.*?\)|(,)") @@ -574,11 +569,11 @@ def _arguments(self, node): if node.vararg is not None: if args: children.append(",") - children.extend(["*", pycompat.get_ast_arg_arg(node.vararg)]) + children.extend(["*", node.vararg.arg]) if node.kwarg is not None: if args or node.vararg is not None: children.append(",") - children.extend(["**", pycompat.get_ast_arg_arg(node.kwarg)]) + children.extend(["**", node.kwarg.arg]) self._handle(node, children) def _add_args_to_children(self, children, arg, default): @@ -853,7 +848,7 @@ def _handle_with_node(self, node, is_async): if is_async: children.extend(["async"]) - for item in pycompat.get_ast_with_items(node): + for item in node.items: children.extend([self.with_or_comma_context_manager, item.context_expr]) if item.optional_vars: children.extend(["as", item.optional_vars]) diff --git a/rope/refactor/suites.py b/rope/refactor/suites.py index 015902e6f..6e7eb454e 100644 --- a/rope/refactor/suites.py +++ b/rope/refactor/suites.py @@ -1,7 +1,6 @@ from itertools import chain from rope.base import ast -from rope.base.utils import pycompat def find_visible(node, lines): diff --git a/ropetest/advanced_oi_test.py b/ropetest/advanced_oi_test.py index ee9f997f8..94374864f 100644 --- a/ropetest/advanced_oi_test.py +++ b/ropetest/advanced_oi_test.py @@ -6,7 +6,6 @@ import rope.base.libutils import rope.base.oi -from rope.base.utils import pycompat from ropetest import testutils diff --git a/ropetest/refactor/patchedasttest.py b/ropetest/refactor/patchedasttest.py index 25298c453..ebd1fe763 100644 --- a/ropetest/refactor/patchedasttest.py +++ b/ropetest/refactor/patchedasttest.py @@ -3,7 +3,6 @@ from textwrap import dedent from rope.base import ast -from rope.base.utils import pycompat from rope.refactor import patchedast from ropetest import testutils @@ -586,7 +585,7 @@ def f(p1, **p2): "Function", ["def", " ", "f", "", "(", "", "arguments", "", ")", "", ":", "\n ", "Expr", "\n ", "Pass"], ) - expected_child = pycompat.ast_arg_type.__name__ + expected_child = ast.arg.__name__ checker.check_children( "arguments", [expected_child, "", ",", " ", "**", "", "p2"] ) @@ -838,7 +837,7 @@ def test_lambda_node(self): checker.check_children( "Lambda", ["lambda", " ", "arguments", "", ":", " ", NameConstant] ) - expected_child = pycompat.ast_arg_type.__name__ + expected_child = ast.arg.__name__ checker.check_children( "arguments", [expected_child, "", ",", " ", expected_child, "", "=", "", "Num", "", ",", " ", "*", "", "z"],