From 1475ca57861c8de7b0b39d4537f42a1820d3c7c9 Mon Sep 17 00:00:00 2001 From: "Edward K. Ream" Date: Sat, 10 Dec 2022 05:59:51 -0600 Subject: [PATCH 01/15] Clean imports and qualifiers in pyobjectsdef.py --- rope/base/pyobjectsdef.py | 76 +++++++++++++++++++-------------------- 1 file changed, 38 insertions(+), 38 deletions(-) diff --git a/rope/base/pyobjectsdef.py b/rope/base/pyobjectsdef.py index 92e9e78c6..c535361e2 100644 --- a/rope/base/pyobjectsdef.py +++ b/rope/base/pyobjectsdef.py @@ -1,25 +1,25 @@ -import rope.base.builtins -import rope.base.codeanalyze -import rope.base.evaluate -import rope.base.libutils -import rope.base.oi.soi -import rope.base.pyscopes from rope.base import ( - pynamesdef, - exceptions, + arguments, ast, astutils, - pyobjects, + builtins, + codeanalyze, + evaluate, + exceptions, fscommands, - arguments, + libutils, + pynamesdef, + pyobjects, + pyscopes, utils, ) +from rope.base.oi import soi class PyFunction(pyobjects.PyFunction): def __init__(self, pycore, ast_node, parent): - rope.base.pyobjects.AbstractFunction.__init__(self) - rope.base.pyobjects.PyDefinedObject.__init__(self, pycore, ast_node, parent) + pyobjects.AbstractFunction.__init__(self) + pyobjects.PyDefinedObject.__init__(self, pycore, ast_node, parent) self.arguments = self.ast_node.args self.parameter_pyobjects = pynamesdef._Inferred( self._infer_parameters, self.get_module()._get_concluded_data() @@ -34,22 +34,22 @@ def _create_concluded_attributes(self): return {} def _create_scope(self): - return rope.base.pyscopes.FunctionScope(self.pycore, self, _FunctionVisitor) + return pyscopes.FunctionScope(self.pycore, self, _FunctionVisitor) def _infer_parameters(self): - pyobjects = rope.base.oi.soi.infer_parameter_objects(self) + pyobjects = soi.infer_parameter_objects(self) self._handle_special_args(pyobjects) return pyobjects def _infer_returned(self, args=None): - return rope.base.oi.soi.infer_returned_object(self, args) + return soi.infer_returned_object(self, args) def _handle_special_args(self, pyobjects): if len(pyobjects) == len(self.arguments.args): if self.arguments.vararg: - pyobjects.append(rope.base.builtins.get_list()) + pyobjects.append(builtins.get_list()) if self.arguments.kwarg: - pyobjects.append(rope.base.builtins.get_dict()) + pyobjects.append(builtins.get_dict()) def _set_parameter_pyobjects(self, pyobjects): if pyobjects is not None: @@ -95,10 +95,10 @@ def get_kind(self): scope = self.parent.get_scope() if isinstance(self.parent, PyClass): for decorator in self.decorators: - pyname = rope.base.evaluate.eval_node(scope, decorator) - if pyname == rope.base.builtins.builtins["staticmethod"]: + pyname = evaluate.eval_node(scope, decorator) + if pyname == builtins.builtins["staticmethod"]: return "staticmethod" - if pyname == rope.base.builtins.builtins["classmethod"]: + if pyname == builtins.builtins["classmethod"]: return "classmethod" return "method" return "function" @@ -114,11 +114,11 @@ def decorators(self): class PyComprehension(pyobjects.PyComprehension): def __init__(self, pycore, ast_node, parent): self.visitor_class = _ComprehensionVisitor - rope.base.pyobjects.PyObject.__init__(self, type_="Comp") - rope.base.pyobjects.PyDefinedObject.__init__(self, pycore, ast_node, parent) + pyobjects.PyObject.__init__(self, type_="Comp") + pyobjects.PyDefinedObject.__init__(self, pycore, ast_node, parent) def _create_scope(self): - return rope.base.pyscopes.ComprehensionScope( + return pyscopes.ComprehensionScope( self.pycore, self, _ComprehensionVisitor ) @@ -129,8 +129,8 @@ def get_kind(self): class PyClass(pyobjects.PyClass): def __init__(self, pycore, ast_node, parent): self.visitor_class = _ClassVisitor - rope.base.pyobjects.AbstractClass.__init__(self) - rope.base.pyobjects.PyDefinedObject.__init__(self, pycore, ast_node, parent) + pyobjects.AbstractClass.__init__(self) + pyobjects.PyDefinedObject.__init__(self, pycore, ast_node, parent) self.parent = parent self._superclasses = self.get_module()._get_concluded_data() @@ -151,17 +151,17 @@ def _create_concluded_attributes(self): def _get_bases(self): result = [] for base_name in self.ast_node.bases: - base = rope.base.evaluate.eval_node(self.parent.get_scope(), base_name) + base = evaluate.eval_node(self.parent.get_scope(), base_name) if ( base is not None and base.get_object().get_type() - == rope.base.pyobjects.get_base_type("Type") + == pyobjects.get_base_type("Type") ): result.append(base.get_object()) return result def _create_scope(self): - return rope.base.pyscopes.ClassScope(self.pycore, self) + return pyscopes.ClassScope(self.pycore, self) class PyModule(pyobjects.PyModule): @@ -212,22 +212,22 @@ def _create_concluded_attributes(self): return result def _create_scope(self): - return rope.base.pyscopes.GlobalScope(self.pycore, self) + return pyscopes.GlobalScope(self.pycore, self) @property @utils.saveit def lines(self): """A `SourceLinesAdapter`""" - return rope.base.codeanalyze.SourceLinesAdapter(self.source_code) + return codeanalyze.SourceLinesAdapter(self.source_code) @property @utils.saveit def logical_lines(self): """A `LogicalLinesFinder`""" - return rope.base.codeanalyze.CachingLogicalLineFinder(self.lines) + return codeanalyze.CachingLogicalLineFinder(self.lines) def get_name(self): - return rope.base.libutils.modname(self.resource) if self.resource else "" + return libutils.modname(self.resource) if self.resource else "" class PyPackage(pyobjects.PyPackage): @@ -244,10 +244,10 @@ def __init__(self, pycore, resource=None, force_errors=False): def _create_structural_attributes(self): result = {} - modname = rope.base.libutils.modname(self.resource) + modname = libutils.modname(self.resource) extension_submodules = self.pycore._builtin_submodules(modname) for name, module in extension_submodules.items(): - result[name] = rope.base.builtins.BuiltinName(module) + result[name] = builtins.BuiltinName(module) if self.resource is None: return result for name, resource in self._get_child_resources().items(): @@ -288,7 +288,7 @@ def get_module(self): return self def get_name(self): - return rope.base.libutils.modname(self.resource) if self.resource else "" + return libutils.modname(self.resource) if self.resource else "" class _AnnAssignVisitor(ast.RopeNodeVisitor): @@ -422,9 +422,9 @@ def _FunctionDef(self, node): for decorator in pyfunction.decorators: if isinstance(decorator, ast.Name) and decorator.id == "property": if isinstance(self, _ClassVisitor): - type_ = rope.base.builtins.Property(pyfunction) + type_ = builtins.Property(pyfunction) arg = pynamesdef.UnboundName( - rope.base.pyobjects.PyObject(self.owner_object) + pyobjects.PyObject(self.owner_object) ) def _eval(type_=type_, arg=arg): @@ -555,7 +555,7 @@ def _is_ignored_import(self, imported_module): if not self.pycore.project.prefs.get("ignore_bad_imports", False): return False return not isinstance( - imported_module.get_object(), rope.base.pyobjects.AbstractModule + imported_module.get_object(), pyobjects.AbstractModule ) def _Global(self, node): From aec65ccbc51bca31a2eaabe73f083c4ae694b5aa Mon Sep 17 00:00:00 2001 From: "Edward K. Ream" Date: Sat, 10 Dec 2022 06:15:19 -0600 Subject: [PATCH 02/15] Clean three files --- rope/base/builtins.py | 8 +++++++- rope/base/pyobjectsdef.py | 15 ++++----------- rope/refactor/importutils/actions.py | 8 ++++++-- 3 files changed, 17 insertions(+), 14 deletions(-) diff --git a/rope/base/builtins.py b/rope/base/builtins.py index 9982b69ec..11390fa29 100644 --- a/rope/base/builtins.py +++ b/rope/base/builtins.py @@ -3,7 +3,13 @@ import io import rope.base.evaluate -from rope.base import ast, pynames, pyobjects, arguments, utils +from rope.base import ( + arguments, + ast, + pynames, + pyobjects, + utils, +) try: diff --git a/rope/base/pyobjectsdef.py b/rope/base/pyobjectsdef.py index c535361e2..25155ce18 100644 --- a/rope/base/pyobjectsdef.py +++ b/rope/base/pyobjectsdef.py @@ -118,9 +118,7 @@ def __init__(self, pycore, ast_node, parent): pyobjects.PyDefinedObject.__init__(self, pycore, ast_node, parent) def _create_scope(self): - return pyscopes.ComprehensionScope( - self.pycore, self, _ComprehensionVisitor - ) + return pyscopes.ComprehensionScope(self.pycore, self, _ComprehensionVisitor) def get_kind(self): return "Comprehension" @@ -154,8 +152,7 @@ def _get_bases(self): base = evaluate.eval_node(self.parent.get_scope(), base_name) if ( base is not None - and base.get_object().get_type() - == pyobjects.get_base_type("Type") + and base.get_object().get_type() == pyobjects.get_base_type("Type") ): result.append(base.get_object()) return result @@ -423,9 +420,7 @@ def _FunctionDef(self, node): if isinstance(decorator, ast.Name) and decorator.id == "property": if isinstance(self, _ClassVisitor): type_ = builtins.Property(pyfunction) - arg = pynamesdef.UnboundName( - pyobjects.PyObject(self.owner_object) - ) + arg = pynamesdef.UnboundName(pyobjects.PyObject(self.owner_object)) def _eval(type_=type_, arg=arg): return type_.get_property_object( @@ -554,9 +549,7 @@ def _ImportFrom(self, node): def _is_ignored_import(self, imported_module): if not self.pycore.project.prefs.get("ignore_bad_imports", False): return False - return not isinstance( - imported_module.get_object(), pyobjects.AbstractModule - ) + return not isinstance(imported_module.get_object(), pyobjects.AbstractModule) def _Global(self, node): module = self.get_module() diff --git a/rope/refactor/importutils/actions.py b/rope/refactor/importutils/actions.py index e78a8144f..ff408085b 100644 --- a/rope/refactor/importutils/actions.py +++ b/rope/refactor/importutils/actions.py @@ -1,5 +1,9 @@ -from rope.base import libutils -from rope.base import pyobjects, exceptions, stdmods +from rope.base import ( + libutils, + pyobjects, + exceptions, + stdmods, +) from rope.refactor import occurrences from rope.refactor.importutils import importinfo From 27edb5d9a5bf273fac383b1006936077d0f125b1 Mon Sep 17 00:00:00 2001 From: "Edward K. Ream" Date: Sat, 10 Dec 2022 06:21:09 -0600 Subject: [PATCH 03/15] Clean two files --- rope/refactor/change_signature.py | 14 ++++++++------ ropetest/codeanalyzetest.py | 9 ++++++--- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/rope/refactor/change_signature.py b/rope/refactor/change_signature.py index 15c360cdc..42d6082f1 100644 --- a/rope/refactor/change_signature.py +++ b/rope/refactor/change_signature.py @@ -1,12 +1,14 @@ import copy import rope.base.exceptions -from rope.base import codeanalyze -from rope.base import evaluate -from rope.base import pyobjects -from rope.base import taskhandle -from rope.base import utils -from rope.base import worder +from rope.base import ( + codeanalyze, + evaluate, + pyobjects, + taskhandle, + utils, + worder, +) from rope.base.change import ChangeContents, ChangeSet from rope.refactor import occurrences, functionutils diff --git a/ropetest/codeanalyzetest.py b/ropetest/codeanalyzetest.py index a1c52c26a..44aba8de5 100644 --- a/ropetest/codeanalyzetest.py +++ b/ropetest/codeanalyzetest.py @@ -1,10 +1,13 @@ from textwrap import dedent - import unittest import rope.base.evaluate -from rope.base import libutils -from rope.base import exceptions, worder, codeanalyze +from rope.base import ( + codeanalyze, + exceptions, + libutils, + worder, +) from rope.base.codeanalyze import SourceLinesAdapter, LogicalLineFinder, get_block_start from ropetest import testutils From 9cf70c40d9ceaeec9e097ce68fb9f52498f06094 Mon Sep 17 00:00:00 2001 From: "Edward K. Ream" Date: Sat, 10 Dec 2022 06:27:37 -0600 Subject: [PATCH 04/15] Clean two files --- rope/contrib/generate.py | 15 +++++++++++---- rope/refactor/functionutils.py | 19 ++++++------------- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/rope/contrib/generate.py b/rope/contrib/generate.py index 0d6b91e35..e1cadd99d 100644 --- a/rope/contrib/generate.py +++ b/rope/contrib/generate.py @@ -1,6 +1,13 @@ -import rope.base.evaluate -from rope.base import libutils -from rope.base import change, pyobjects, exceptions, pynames, worder, codeanalyze +from rope.base import ( + change, + codeanalyze, + evaluate, + exceptions, + libutils, + pynames, + pyobjects, + worder, +) from rope.refactor import sourceutils, importutils, functionutils, suites @@ -203,7 +210,7 @@ def __init__(self, pycore, resource, offset, goal_resource=None): self.offset = offset self.goal_resource = goal_resource self.source_pymodule = self.pycore.project.get_pymodule(resource) - finder = rope.base.evaluate.ScopeNameFinder(self.source_pymodule) + finder = evaluate.ScopeNameFinder(self.source_pymodule) self.primary, self.pyname = finder.get_primary_and_pyname_at(offset) self._init_fields() diff --git a/rope/refactor/functionutils.py b/rope/refactor/functionutils.py index 2d6b0a341..2e4e96718 100644 --- a/rope/refactor/functionutils.py +++ b/rope/refactor/functionutils.py @@ -1,7 +1,6 @@ -import rope.base.exceptions -import rope.base.pyobjects +# import rope.base.exceptions from rope.base.builtins import Lambda -from rope.base import worder +from rope.base import pyobjects, worder class DefinitionInfo: @@ -136,29 +135,23 @@ def read(primary, pyname, definition_info, code): def _is_method_call(primary, pyname): return ( primary is not None - and isinstance(primary.get_object().get_type(), rope.base.pyobjects.PyClass) + and isinstance(primary.get_object().get_type(), pyobjects.PyClass) and CallInfo._is_method(pyname) ) @staticmethod def _is_class(pyname): - return pyname is not None and isinstance( - pyname.get_object(), rope.base.pyobjects.PyClass - ) + return pyname is not None and isinstance(pyname.get_object(), pyobjects.PyClass) @staticmethod def _is_method(pyname): - if pyname is not None and isinstance( - pyname.get_object(), rope.base.pyobjects.PyFunction - ): + if pyname is not None and isinstance(pyname.get_object(), pyobjects.PyFunction): return pyname.get_object().get_kind() == "method" return False @staticmethod def _is_classmethod(pyname): - if pyname is not None and isinstance( - pyname.get_object(), rope.base.pyobjects.PyFunction - ): + if pyname is not None and isinstance(pyname.get_object(), pyobjects.PyFunction): return pyname.get_object().get_kind() == "classmethod" return False From 3cf427db09282a3f79d4571d6d62a927518e5711 Mon Sep 17 00:00:00 2001 From: "Edward K. Ream" Date: Sat, 10 Dec 2022 06:32:25 -0600 Subject: [PATCH 05/15] Two more files --- rope/contrib/findit.py | 19 +++++++++++-------- rope/contrib/fixsyntax.py | 24 ++++++++++++------------ 2 files changed, 23 insertions(+), 20 deletions(-) diff --git a/rope/contrib/findit.py b/rope/contrib/findit.py index 027248eb0..89782953a 100644 --- a/rope/contrib/findit.py +++ b/rope/contrib/findit.py @@ -1,7 +1,10 @@ -import rope.base.codeanalyze -import rope.base.evaluate -import rope.base.pyobjects -from rope.base import taskhandle, exceptions, worder +from rope.base import ( + exceptions, + evaluate, + pyobjects, + taskhandle, + worder, +) from rope.contrib import fixsyntax from rope.refactor import occurrences @@ -26,7 +29,7 @@ def find_occurrences( """ name = worder.get_name_at(resource, offset) this_pymodule = project.get_pymodule(resource) - primary, pyname = rope.base.evaluate.eval_location2(this_pymodule, offset) + primary, pyname = evaluate.eval_location2(this_pymodule, offset) def is_match(occurrence): return unsure @@ -55,11 +58,11 @@ def find_implementations( """ name = worder.get_name_at(resource, offset) this_pymodule = project.get_pymodule(resource) - pyname = rope.base.evaluate.eval_location(this_pymodule, offset) + pyname = evaluate.eval_location(this_pymodule, offset) if pyname is not None: pyobject = pyname.get_object() if ( - not isinstance(pyobject, rope.base.pyobjects.PyFunction) + not isinstance(pyobject, pyobjects.PyFunction) or pyobject.get_kind() != "method" ): raise exceptions.BadIdentifierError("Not a method!") @@ -92,7 +95,7 @@ def find_definition(project, code, offset, resource=None, maxfixes=1): pyname = fixer.pyname_at(offset) if pyname is not None: module, lineno = pyname.get_definition_location() - name = rope.base.worder.Worder(code).get_word_at(offset) + name = worder.Worder(code).get_word_at(offset) if lineno is not None: start = module.lines.get_line_start(lineno) diff --git a/rope/contrib/fixsyntax.py b/rope/contrib/fixsyntax.py index b1e96935e..cd848ce1c 100644 --- a/rope/contrib/fixsyntax.py +++ b/rope/contrib/fixsyntax.py @@ -1,9 +1,11 @@ -import rope.base.codeanalyze -import rope.base.evaluate -from rope.base import exceptions -from rope.base import libutils -from rope.base import utils -from rope.base import worder +from rope.base import ( + codeanalyze, + exceptions, + evaluate, + libutils, + utils, + worder, +) from rope.base.codeanalyze import ArrayLinesAdapter, LogicalLineFinder @@ -57,13 +59,13 @@ def old_pyname(): expression = expression.replace("\\\n", " ").replace("\n", " ") lineno = self.code.count("\n", 0, offset) scope = pymodule.get_scope().get_inner_scope_for_line(lineno) - return rope.base.evaluate.eval_str(scope, expression) + return evaluate.eval_str(scope, expression) new_code = pymodule.source_code def new_pyname(): newoffset = self.commenter.transferred_offset(offset) - return rope.base.evaluate.eval_location(pymodule, newoffset) + return evaluate.eval_location(pymodule, newoffset) if new_code.startswith(self.code[: offset + 1]): return new_pyname() @@ -129,9 +131,7 @@ def _fix_incomplete_try_blocks(self, lineno, indents): last_indents = indents while block_start > 0: block_start = ( - rope.base.codeanalyze.get_block_start( - ArrayLinesAdapter(self.lines), block_start - ) + codeanalyze.get_block_start(ArrayLinesAdapter(self.lines), block_start) - 1 ) if self.lines[block_start].strip().startswith("try:"): @@ -186,4 +186,4 @@ def _logical_start(lines, lineno, check_prev=False): def _get_line_indents(line): - return rope.base.codeanalyze.count_line_indents(line) + return codeanalyze.count_line_indents(line) From a70a742dbacf17df1005e1a458fdd125e9d7f84d Mon Sep 17 00:00:00 2001 From: "Edward K. Ream" Date: Sat, 10 Dec 2022 06:43:35 -0600 Subject: [PATCH 06/15] Four more files, with one new comment --- rope/base/oi/transform.py | 2 +- rope/base/oi/type_hinting/utils.py | 5 +---- rope/contrib/codeassist.py | 29 +++++++++++++++-------------- rope/refactor/usefunction.py | 12 ++++++++++-- 4 files changed, 27 insertions(+), 21 deletions(-) diff --git a/rope/base/oi/transform.py b/rope/base/oi/transform.py index f3398b126..968e70b25 100644 --- a/rope/base/oi/transform.py +++ b/rope/base/oi/transform.py @@ -2,7 +2,7 @@ import os import re -import rope.base.builtins +import rope.base.builtins # Use full qualification for clarity. from rope.base import exceptions diff --git a/rope/base/oi/type_hinting/utils.py b/rope/base/oi/type_hinting/utils.py index 6c0ca416c..37a2568b6 100644 --- a/rope/base/oi/type_hinting/utils.py +++ b/rope/base/oi/type_hinting/utils.py @@ -1,9 +1,6 @@ import logging +from typing import Union, Optional -try: - from typing import Union, Optional -except ImportError: - pass import rope.base.utils as base_utils from rope.base import evaluate from rope.base.exceptions import AttributeNotFoundError diff --git a/rope/contrib/codeassist.py b/rope/contrib/codeassist.py index 334c78c4a..32547891e 100644 --- a/rope/contrib/codeassist.py +++ b/rope/contrib/codeassist.py @@ -2,17 +2,18 @@ import sys import warnings -import rope.base.codeanalyze -import rope.base.evaluate -from rope.base import builtins -from rope.base import exceptions -from rope.base import libutils -from rope.base import pynames -from rope.base import pynamesdef -from rope.base import pyobjects -from rope.base import pyobjectsdef -from rope.base import pyscopes -from rope.base import worder +from rope.base import ( + builtins, + evaluate, + exceptions, + libutils, + pynames, + pynamesdef, + pyobjects, + pyobjectsdef, + pyscopes, + worder, +) from rope.contrib import fixsyntax from rope.refactor import functionutils @@ -176,7 +177,7 @@ def mux(self, x): """ # Retrieve the PyName. pymod = project.get_pymodule(resource) - pyname = rope.base.evaluate.eval_location(pymod, offset) + pyname = evaluate.eval_location(pymod, offset) # Now get the location of the definition and its containing scope. defmod, lineno = pyname.get_definition_location() @@ -419,7 +420,7 @@ def __call__(self): def _dotted_completions(self, module_scope, holding_scope): result = {} - found_pyname = rope.base.evaluate.eval_str(holding_scope, self.expression) + found_pyname = evaluate.eval_str(holding_scope, self.expression) if found_pyname is not None: element = found_pyname.get_object() compl_scope = "attribute" @@ -509,7 +510,7 @@ def _keyword_parameters(self, pymodule, scope): function_parens = word_finder.find_parens_start_from_inside(offset - 1) primary = word_finder.get_primary_at(function_parens - 1) try: - function_pyname = rope.base.evaluate.eval_str(scope, primary) + function_pyname = evaluate.eval_str(scope, primary) except exceptions.BadIdentifierError: return {} if function_pyname is not None: diff --git a/rope/refactor/usefunction.py b/rope/refactor/usefunction.py index 656175abb..255e33fe8 100644 --- a/rope/refactor/usefunction.py +++ b/rope/refactor/usefunction.py @@ -1,5 +1,13 @@ -from rope.base import change, taskhandle, evaluate, exceptions, pyobjects, pynames, ast -from rope.base import libutils +from rope.base import ( + ast, + change, + evaluate, + exceptions, + libutils, + pynames, + pyobjects, + taskhandle, +) from rope.refactor import restructure, sourceutils, similarfinder From e19fa11eb6e5ca31b3019b968bb5f1b47cd578f5 Mon Sep 17 00:00:00 2001 From: "Edward K. Ream" Date: Sat, 10 Dec 2022 06:54:12 -0600 Subject: [PATCH 07/15] Two more files. Add full qualification for rope.refactor.wildcards for clarity --- rope/base/pyscopes.py | 19 ++++++++++--------- rope/refactor/similarfinder.py | 19 +++++++++++++------ 2 files changed, 23 insertions(+), 15 deletions(-) diff --git a/rope/base/pyscopes.py b/rope/base/pyscopes.py index 94d5b82e5..f3c093d1a 100644 --- a/rope/base/pyscopes.py +++ b/rope/base/pyscopes.py @@ -1,7 +1,11 @@ -import rope.base.builtins -import rope.base.codeanalyze -import rope.base.pynames -from rope.base import ast, exceptions, utils +import rope.base.builtins # Use full qualification for clarity. +from rope.base import ( + ast, + codeanalyze, + exceptions, + pynames, + utils, +) from rope.refactor import patchedast @@ -249,10 +253,7 @@ def get_kind(self): def invalidate_data(self): for pyname in self.get_names().values(): - if isinstance( - pyname, - (rope.base.pynames.AssignedName, rope.base.pynames.EvaluatedName), - ): + if isinstance(pyname, (pynames.AssignedName, pynames.EvaluatedName)): pyname.invalidate() @@ -272,7 +273,7 @@ def __init__(self, pymodule): self.pymodule = pymodule def get_indents(self, lineno): - return rope.base.codeanalyze.count_line_indents(self.lines.get_line(lineno)) + return codeanalyze.count_line_indents(self.lines.get_line(lineno)) def _get_scope_indents(self, scope): return self.get_indents(scope.get_start()) diff --git a/rope/refactor/similarfinder.py b/rope/refactor/similarfinder.py index 2a672802d..f73bf1704 100644 --- a/rope/refactor/similarfinder.py +++ b/rope/refactor/similarfinder.py @@ -1,10 +1,15 @@ """This module can be used for finding similar code""" import re -import rope.refactor.wildcards -from rope.base import libutils, codeanalyze, exceptions, ast, builtins -from rope.refactor import patchedast, wildcards - +import rope.base.builtins # Use full qualification for clarity. +import rope.refactor.wildcards # Use full qualification for clarity +from rope.base import ( + ast, + codeanalyze, + exceptions, + libutils, +) +from rope.refactor import patchedast from rope.refactor.patchedast import MismatchedTokenError @@ -61,7 +66,7 @@ def _does_match(self, node, name): if isinstance(arg, (tuple, list)): kind = arg[0] arg = arg[1] - suspect = wildcards.Suspect(self.pymodule, node, name) + suspect = rope.refactor.wildcards.Suspect(self.pymodule, node, name) return self.wildcards[kind].matches(suspect, arg) @@ -361,7 +366,9 @@ def does_match(node, name): def _pydefined_to_str(pydefined): address = [] - if isinstance(pydefined, (builtins.BuiltinClass, builtins.BuiltinFunction)): + if isinstance( + pydefined, (rope.base.builtins.BuiltinClass, rope.base.builtins.BuiltinFunction) + ): return "__builtins__." + pydefined.get_name() else: while pydefined.parent is not None: From a9fa4a6c21ffd7c376658de7f33ee7886ce8b063 Mon Sep 17 00:00:00 2001 From: "Edward K. Ream" Date: Sat, 10 Dec 2022 07:04:10 -0600 Subject: [PATCH 08/15] Clean soi.py --- rope/base/oi/soi.py | 40 ++++++++++++++++++---------------- rope/refactor/similarfinder.py | 2 +- 2 files changed, 22 insertions(+), 20 deletions(-) diff --git a/rope/base/oi/soi.py b/rope/base/oi/soi.py index 2cecdf8b1..83fe937af 100644 --- a/rope/base/oi/soi.py +++ b/rope/base/oi/soi.py @@ -4,14 +4,18 @@ package. """ -import rope.base.builtins -import rope.base.pynames -import rope.base.pyobjects -from rope.base import evaluate, utils, arguments +import rope.base.builtins # Use full qualification for clarity. +from rope.base import ( + arguments, + evaluate, + pynames, + pyobjects, + utils, +) from rope.base.oi.type_hinting.factory import get_type_hinting_factory -_ignore_inferred = utils.ignore_exception(rope.base.pyobjects.IsBeingInferredError) +_ignore_inferred = utils.ignore_exception(pyobjects.IsBeingInferredError) @_ignore_inferred @@ -35,7 +39,7 @@ def infer_returned_object(pyfunction, args): ).make_return_provider() type_ = hint_return(pyfunction) if type_ is not None: - return rope.base.pyobjects.PyObject(type_) + return pyobjects.PyObject(type_) @_ignore_inferred @@ -56,9 +60,9 @@ def _handle_first_parameter(pyobject, parameters): if not parameters: if not pyobject.get_param_names(special_args=False): return - parameters.append(rope.base.pyobjects.get_unknown()) + parameters.append(pyobjects.get_unknown()) if kind == "method": - parameters[0] = rope.base.pyobjects.PyObject(pyobject.parent) + parameters[0] = pyobjects.PyObject(pyobject.parent) if kind == "classmethod": parameters[0] = pyobject.parent @@ -74,7 +78,7 @@ def infer_assigned_object(pyname): and result.get_name() == "NotImplementedType" ): break - elif result == rope.base.pyobjects.get_unknown(): + elif result == pyobjects.get_unknown(): break elif result is not None: return result @@ -84,7 +88,7 @@ def infer_assigned_object(pyname): ).make_assignment_provider() hinting_result = hint_assignment(pyname) if hinting_result is not None: - return rope.base.pyobjects.PyObject(hinting_result) + return pyobjects.PyObject(hinting_result) return result @@ -117,13 +121,13 @@ def _infer_returned(pyobject, args): if resulting_pyname is None: continue pyobject = resulting_pyname.get_object() - if pyobject == rope.base.pyobjects.get_unknown(): + if pyobject == pyobjects.get_unknown(): continue if not scope._is_generator(): return pyobject else: return rope.base.builtins.get_generator(pyobject) - except rope.base.pyobjects.IsBeingInferredError: + except pyobjects.IsBeingInferredError: pass @@ -134,9 +138,9 @@ def _parameter_objects(pyobject): for name in params: type_ = hint_param(pyobject, name) if type_ is not None: - result.append(rope.base.pyobjects.PyObject(type_)) + result.append(pyobjects.PyObject(type_)) else: - result.append(rope.base.pyobjects.get_unknown()) + result.append(pyobjects.get_unknown()) return result @@ -185,9 +189,7 @@ def _follow_pyname(assignment, pymodule, lineno=None): isinstance(result.get_type(), rope.base.builtins.Property) and holding_scope.get_kind() == "Class" ): - arg = rope.base.pynames.UnboundName( - rope.base.pyobjects.PyObject(holding_scope.pyobject) - ) + arg = pynames.UnboundName(pyobjects.PyObject(holding_scope.pyobject)) return pyname, result.get_type().get_property_object( arguments.ObjectArguments([arg]) ) @@ -208,7 +210,7 @@ def _follow_evaluations(assignment, pyname, pyobject): if new_pyname is not None: pyobject = new_pyname.get_object() if pyobject is not None and call: - if isinstance(pyobject, rope.base.pyobjects.AbstractFunction): + if isinstance(pyobject, pyobjects.AbstractFunction): args = arguments.ObjectArguments([pyname]) pyobject = pyobject.get_returned_object(args) else: @@ -216,7 +218,7 @@ def _follow_evaluations(assignment, pyname, pyobject): if pyobject is None: break if pyobject is not None and assignment.assign_type: - return rope.base.pyobjects.PyObject(pyobject) + return pyobjects.PyObject(pyobject) return pyobject diff --git a/rope/refactor/similarfinder.py b/rope/refactor/similarfinder.py index f73bf1704..c9254a578 100644 --- a/rope/refactor/similarfinder.py +++ b/rope/refactor/similarfinder.py @@ -2,7 +2,7 @@ import re import rope.base.builtins # Use full qualification for clarity. -import rope.refactor.wildcards # Use full qualification for clarity +import rope.refactor.wildcards # Use full qualification for clarity. from rope.base import ( ast, codeanalyze, From 6259845ae2dd86c60c44b95f1d1c1d085fa06c4e Mon Sep 17 00:00:00 2001 From: "Edward K. Ream" Date: Sat, 10 Dec 2022 07:11:37 -0600 Subject: [PATCH 09/15] Clean soa.py, adding comments --- rope/base/oi/soa.py | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/rope/base/oi/soa.py b/rope/base/oi/soa.py index fc3a9dbac..25cdfd078 100644 --- a/rope/base/oi/soa.py +++ b/rope/base/oi/soa.py @@ -1,7 +1,13 @@ -import rope.base.ast -import rope.base.oi.soi -import rope.base.pynames -from rope.base import pyobjects, evaluate, astutils, arguments +import rope.base.ast # Use fully qualified names for clarity. +import rope.base.builtins # Use fully qualified names for clarity. +from rope.base import ( + arguments, + astutils, + evaluate, + pynames, + pyobjects, +) +from rope.base.oi import soi def analyze_module(pycore, pymodule, should_analyze, search_subscopes, followed_calls): @@ -63,7 +69,7 @@ def _Call(self, node): pyclass = pyfunction if "__init__" in pyfunction: pyfunction = pyfunction["__init__"].get_object() - pyname = rope.base.pynames.UnboundName(pyobjects.PyObject(pyclass)) + pyname = pynames.UnboundName(pyobjects.PyObject(pyclass)) args = self._args_with_self(primary, pyname, pyfunction, node) elif "__call__" in pyfunction: pyfunction = pyfunction["__call__"].get_object() @@ -123,13 +129,11 @@ def _evaluate_assign_value(self, node, nodes, type_hint=False): for subscript, levels in nodes: instance = evaluate.eval_node(self.scope, subscript.value) args_pynames = [evaluate.eval_node(self.scope, subscript.slice)] - value = rope.base.oi.soi._infer_assignment( - rope.base.pynames.AssignmentValue( - node.value, levels, type_hint=type_hint - ), + value = soi._infer_assignment( + pynames.AssignmentValue(node.value, levels, type_hint=type_hint), self.pymodule, ) - args_pynames.append(rope.base.pynames.UnboundName(value)) + args_pynames.append(pynames.UnboundName(value)) if instance is not None and value is not None: pyobject = instance.get_object() if "__setitem__" in pyobject: From f8d3b8b0e893a9cded65e08b345ebb293af6099b Mon Sep 17 00:00:00 2001 From: "Edward K. Ream" Date: Sat, 10 Dec 2022 07:18:00 -0600 Subject: [PATCH 10/15] Clean & comment project.py --- rope/base/project.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/rope/base/project.py b/rope/base/project.py index 8e7124c05..527ffcf33 100644 --- a/rope/base/project.py +++ b/rope/base/project.py @@ -3,12 +3,18 @@ import sys import warnings -import rope.base.fscommands -import rope.base.resourceobserver as resourceobserver -from rope.base import exceptions, history, pycore, taskhandle, utils +import rope.base.fscommands # Use full qualification for clarity. +from rope.base import ( + exceptions, + history, + pycore, + taskhandle, + utils, +) from rope.base.exceptions import ModuleNotFoundError from rope.base.prefs import Prefs, get_config from rope.base.resources import File, Folder, _ResourceMatcher +import rope.base.resourceobserver as resourceobserver try: import cPickle as pickle From 16a9d93d682b6a58cf05059a90b04fa8a4da825e Mon Sep 17 00:00:00 2001 From: "Edward K. Ream" Date: Sat, 10 Dec 2022 07:23:42 -0600 Subject: [PATCH 11/15] Three more files --- rope/refactor/importutils/module_imports.py | 8 +++++++- rope/refactor/introduce_parameter.py | 9 +++++++-- rope/refactor/occurrences.py | 17 +++++++++-------- 3 files changed, 23 insertions(+), 11 deletions(-) diff --git a/rope/refactor/importutils/module_imports.py b/rope/refactor/importutils/module_imports.py index e448528c0..cfeb26dc7 100644 --- a/rope/refactor/importutils/module_imports.py +++ b/rope/refactor/importutils/module_imports.py @@ -1,6 +1,12 @@ from typing import Union, List -from rope.base import ast, exceptions, pynames, pynamesdef, utils +from rope.base import ( + ast, + exceptions, + pynames, + pynamesdef, + utils, +) from rope.refactor.importutils import actions, importinfo diff --git a/rope/refactor/introduce_parameter.py b/rope/refactor/introduce_parameter.py index 5f1446c40..48adbecd2 100644 --- a/rope/refactor/introduce_parameter.py +++ b/rope/refactor/introduce_parameter.py @@ -1,5 +1,10 @@ -import rope.base.change -from rope.base import exceptions, evaluate, worder, codeanalyze +import rope.base.change # Use full qualifications for clarity. +from rope.base import ( + codeanalyze, + evaluate, + exceptions, + worder, +) from rope.refactor import functionutils, sourceutils, occurrences diff --git a/rope/refactor/occurrences.py b/rope/refactor/occurrences.py index 5eac259f0..e5c8dce78 100644 --- a/rope/refactor/occurrences.py +++ b/rope/refactor/occurrences.py @@ -38,14 +38,15 @@ import ast import re -from rope.base import codeanalyze -from rope.base import evaluate -from rope.base import exceptions -from rope.base import pynames -from rope.base import pyobjects -from rope.base import utils -from rope.base import worder - +from rope.base import ( + codeanalyze, + evaluate, + exceptions, + pynames, + pyobjects, + utils, + worder, +) class Finder: """For finding occurrences of a name From cd0038cc77967d8009f127798e55998ca35dfe5c Mon Sep 17 00:00:00 2001 From: "Edward K. Ream" Date: Sat, 10 Dec 2022 07:34:06 -0600 Subject: [PATCH 12/15] Clean more files --- rope/refactor/inline.py | 22 +++++++++++----------- rope/refactor/introduce_factory.py | 17 ++++++++++------- rope/refactor/introduce_parameter.py | 2 +- rope/refactor/occurrences.py | 1 + 4 files changed, 23 insertions(+), 19 deletions(-) diff --git a/rope/refactor/inline.py b/rope/refactor/inline.py index f7fbe3bfe..66da3e782 100644 --- a/rope/refactor/inline.py +++ b/rope/refactor/inline.py @@ -19,10 +19,9 @@ import re from typing import List -import rope.base.exceptions -import rope.refactor.functionutils +import rope.base.builtins # Use fully qualified names for clarity. from rope.base import ( - ast, + exceptions, pynames, pyobjects, codeanalyze, @@ -33,6 +32,7 @@ libutils, ) from rope.base.change import ChangeSet, ChangeContents +import rope.refactor.functionutils from rope.refactor import ( occurrences, rename, @@ -63,7 +63,7 @@ def create_inline(project, resource, offset): "a method, local variable or parameter." ) if pyname is None: - raise rope.base.exceptions.RefactoringError(message) + raise exceptions.RefactoringError(message) if isinstance(pyname, pynames.ImportedName): pyname = pyname._get_imported_pyname() if isinstance(pyname, pynames.AssignedName): @@ -73,7 +73,7 @@ def create_inline(project, resource, offset): if isinstance(pyname.get_object(), pyobjects.PyFunction): return InlineMethod(project, resource, offset) else: - raise rope.base.exceptions.RefactoringError(message) + raise exceptions.RefactoringError(message) class _Inliner: @@ -246,7 +246,7 @@ def __init__(self, *args, **kwds): def _check_exceptional_conditions(self): if len(self.pyname.assignments) != 1: - raise rope.base.exceptions.RefactoringError( + raise exceptions.RefactoringError( "Local variable should be assigned once for inlining." ) @@ -402,7 +402,7 @@ def _get_definition_params(self): definition_info.args_arg is not None or definition_info.keywords_arg is not None ): - raise rope.base.exceptions.RefactoringError( + raise exceptions.RefactoringError( "Cannot inline functions with list and keyword arguments." ) if self.pyfunction.get_kind() == "classmethod": @@ -508,7 +508,7 @@ def _check_nothing_after_return(self, source, offset): logical_lines = codeanalyze.LogicalLineFinder(lines) lineno = logical_lines.logical_line_in(lineno)[1] if source[lines.get_line_end(lineno) : len(source)].strip() != "": - raise rope.base.exceptions.RefactoringError( + raise exceptions.RefactoringError( "Cannot inline functions with statements " + "after return statement." ) @@ -543,7 +543,7 @@ def __init__(self, project, resource, definition_generator, aim_offset=None): def occurred_inside_skip(self, change_collector, occurrence): if not occurrence.is_defined(): - raise rope.base.exceptions.RefactoringError( + raise exceptions.RefactoringError( "Cannot inline functions that reference themselves" ) @@ -554,7 +554,7 @@ def occurred_outside_skip(self, change_collector, occurrence): return # the function is referenced outside an import statement if not occurrence.is_called(): - raise rope.base.exceptions.RefactoringError( + raise exceptions.RefactoringError( "Reference to inlining function other than function call" " in " % (self.resource.path, start) ) @@ -656,7 +656,7 @@ def _getvardef(pymodule, pyname): [lines.get_line(n) for n in range(start, end + 1)], ) if assignment.levels: - raise rope.base.exceptions.RefactoringError("Cannot inline tuple assignments.") + raise exceptions.RefactoringError("Cannot inline tuple assignments.") definition = definition_with_assignment[ definition_with_assignment.index("=") + 1 : ].strip() diff --git a/rope/refactor/introduce_factory.py b/rope/refactor/introduce_factory.py index a36935c9e..600075e68 100644 --- a/rope/refactor/introduce_factory.py +++ b/rope/refactor/introduce_factory.py @@ -1,7 +1,10 @@ -import rope.base.exceptions -import rope.base.pyobjects -from rope.base import libutils -from rope.base import taskhandle, evaluate +from rope.base import ( + evaluate, + exceptions, + libutils, + pyobjects, + taskhandle, +) from rope.base.change import ChangeSet, ChangeContents from rope.refactor import rename, occurrences, sourceutils, importutils @@ -14,9 +17,9 @@ def __init__(self, project, resource, offset): this_pymodule = self.project.get_pymodule(resource) self.old_pyname = evaluate.eval_location(this_pymodule, offset) if self.old_pyname is None or not isinstance( - self.old_pyname.get_object(), rope.base.pyobjects.PyClass + self.old_pyname.get_object(), pyobjects.PyClass ): - raise rope.base.exceptions.RefactoringError( + raise exceptions.RefactoringError( "Introduce factory should be performed on a class." ) self.old_name = self.old_pyname.get_object().get_name() @@ -107,7 +110,7 @@ def _get_factory_method(self, lines, class_scope, factory_name, global_): unit_indents = " " * sourceutils.get_indent(self.project) if global_: if self._get_scope_indents(lines, class_scope) > 0: - raise rope.base.exceptions.RefactoringError( + raise exceptions.RefactoringError( "Cannot make global factory method for nested classes." ) return "\ndef {}(*args, **kwds):\n{}return {}(*args, **kwds)\n".format( diff --git a/rope/refactor/introduce_parameter.py b/rope/refactor/introduce_parameter.py index 48adbecd2..7a9e6da9b 100644 --- a/rope/refactor/introduce_parameter.py +++ b/rope/refactor/introduce_parameter.py @@ -1,4 +1,4 @@ -import rope.base.change # Use full qualifications for clarity. +import rope.base.change # Use fully qualified names for clarity. from rope.base import ( codeanalyze, evaluate, diff --git a/rope/refactor/occurrences.py b/rope/refactor/occurrences.py index e5c8dce78..c0fcd4fe9 100644 --- a/rope/refactor/occurrences.py +++ b/rope/refactor/occurrences.py @@ -48,6 +48,7 @@ worder, ) + class Finder: """For finding occurrences of a name From 4baee96768c0d0f39c9d7cd17da9e57ae553c0ca Mon Sep 17 00:00:00 2001 From: "Edward K. Ream" Date: Sat, 10 Dec 2022 07:47:11 -0600 Subject: [PATCH 13/15] Clean three test files, adding comments and removing one unused import --- ropetest/historytest.py | 4 ++-- ropetest/objectinfertest.py | 4 +--- ropetest/pycoretest.py | 7 ++----- 3 files changed, 5 insertions(+), 10 deletions(-) diff --git a/ropetest/historytest.py b/ropetest/historytest.py index 0f39fa94f..cea93946a 100644 --- a/ropetest/historytest.py +++ b/ropetest/historytest.py @@ -1,8 +1,8 @@ import unittest -import rope.base.history +import rope.base.change # Use fully-qualified names for clarity. +import rope.base.history # Use fully-qualified names for clarity. from rope.base import exceptions -import rope.base.change from ropetest import testutils diff --git a/ropetest/objectinfertest.py b/ropetest/objectinfertest.py index 4a3ae9cde..713ad7f4d 100644 --- a/ropetest/objectinfertest.py +++ b/ropetest/objectinfertest.py @@ -1,9 +1,7 @@ from textwrap import dedent - import unittest -import rope.base.project -import rope.base.builtins +import rope.base.builtins # Use fully-qualified names for clarity. from rope.base import libutils from ropetest import testutils diff --git a/ropetest/pycoretest.py b/ropetest/pycoretest.py index 4ae90c369..d754edeb2 100644 --- a/ropetest/pycoretest.py +++ b/ropetest/pycoretest.py @@ -1,12 +1,9 @@ import sys from textwrap import dedent - -from rope.base.builtins import File, BuiltinClass - import unittest -from rope.base import exceptions -from rope.base import libutils +from rope.base import exceptions, libutils +from rope.base.builtins import File, BuiltinClass from rope.base.pycore import _TextChangeDetector from rope.base.pyobjects import get_base_type, AbstractFunction from rope.base.pynamesdef import AssignedName From 4e3d2518d09d83386adc2c543bf126a165f3e771 Mon Sep 17 00:00:00 2001 From: "Edward K. Ream" Date: Sat, 10 Dec 2022 08:26:58 -0600 Subject: [PATCH 14/15] Oops: alphabetize one list of imports --- rope/refactor/inline.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/rope/refactor/inline.py b/rope/refactor/inline.py index 66da3e782..369ec7867 100644 --- a/rope/refactor/inline.py +++ b/rope/refactor/inline.py @@ -21,15 +21,15 @@ import rope.base.builtins # Use fully qualified names for clarity. from rope.base import ( + codeanalyze, + evaluate, exceptions, + libutils, pynames, pyobjects, - codeanalyze, taskhandle, - evaluate, - worder, utils, - libutils, + worder, ) from rope.base.change import ChangeSet, ChangeContents import rope.refactor.functionutils From 329859b54ec47c76706faddb5877fb6b8585dbdb Mon Sep 17 00:00:00 2001 From: "Edward K. Ream" Date: Sat, 10 Dec 2022 08:31:18 -0600 Subject: [PATCH 15/15] Remove qualification of functiontools --- rope/refactor/inline.py | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/rope/refactor/inline.py b/rope/refactor/inline.py index 369ec7867..cfc14e5af 100644 --- a/rope/refactor/inline.py +++ b/rope/refactor/inline.py @@ -32,14 +32,14 @@ worder, ) from rope.base.change import ChangeSet, ChangeContents -import rope.refactor.functionutils from rope.refactor import ( + change_signature, + functionutils, + importutils, + move, occurrences, rename, sourceutils, - importutils, - move, - change_signature, ) @@ -393,7 +393,7 @@ def __init__(self, project, pyfunction, body=None): self.body = sourceutils.get_body(self.pyfunction) def _get_definition_info(self): - return rope.refactor.functionutils.DefinitionInfo.read(self.pyfunction) + return functionutils.DefinitionInfo.read(self.pyfunction) def _get_definition_params(self): definition_info = self.definition_info @@ -421,13 +421,11 @@ def get_definition(self, primary, pyname, call, host_vars=[], returns=False): def _calculate_header(self, primary, pyname, call): # A header is created which initializes parameters # to the values passed to the function. - call_info = rope.refactor.functionutils.CallInfo.read( + call_info = functionutils.CallInfo.read( primary, pyname, self.definition_info, call ) paramdict = self.definition_params - mapping = rope.refactor.functionutils.ArgumentMapping( - self.definition_info, call_info - ) + mapping = functionutils.ArgumentMapping(self.definition_info, call_info) for param_name, value in mapping.param_dict.items(): paramdict[param_name] = value header = ""