diff --git a/rope/base/arguments.py b/rope/base/arguments.py index 73fee0316..58583e763 100644 --- a/rope/base/arguments.py +++ b/rope/base/arguments.py @@ -2,7 +2,7 @@ from rope.base import ast -class Arguments(object): +class Arguments: """A class for evaluating parameters passed to a function You can use the `create_arguments` factory. It handles implicit @@ -52,7 +52,7 @@ def create_arguments(primary, pyfunction, call_node, scope): return Arguments(args, scope) -class ObjectArguments(object): +class ObjectArguments: def __init__(self, pynames): self.pynames = pynames @@ -72,7 +72,7 @@ def get_instance_pyname(self): return self.pynames[0] -class MixedArguments(object): +class MixedArguments: def __init__(self, pyname, arguments, scope): """`argumens` is an instance of `Arguments`""" self.pyname = pyname diff --git a/rope/base/ast.py b/rope/base/ast.py index b893dc953..67c35db47 100644 --- a/rope/base/ast.py +++ b/rope/base/ast.py @@ -1,4 +1,3 @@ -from __future__ import absolute_import import ast from ast import * diff --git a/rope/base/astutils.py b/rope/base/astutils.py index 68ae42343..3eef2ebb6 100644 --- a/rope/base/astutils.py +++ b/rope/base/astutils.py @@ -18,7 +18,7 @@ def get_name_levels(node): return visitor.names -class _NodeNameCollector(object): +class _NodeNameCollector: def __init__(self, levels=None): self.names = [] self.levels = levels diff --git a/rope/base/builtins.py b/rope/base/builtins.py index ae5f5b861..409f4fbcc 100644 --- a/rope/base/builtins.py +++ b/rope/base/builtins.py @@ -14,7 +14,7 @@ class BuiltinModule(pyobjects.AbstractModule): def __init__(self, name, pycore=None, initial={}): - super(BuiltinModule, self).__init__() + super().__init__() self.name = name self.pycore = pycore self.initial = initial @@ -54,7 +54,7 @@ def module(self): return -class _BuiltinElement(object): +class _BuiltinElement: def __init__(self, builtin, parent=None): self.builtin = builtin self._parent = parent @@ -112,7 +112,7 @@ def get_param_names(self, special_args=True): class BuiltinUnknown(_BuiltinElement, pyobjects.PyObject): def __init__(self, builtin): - super(BuiltinUnknown, self).__init__(pyobjects.get_unknown()) + super().__init__(pyobjects.get_unknown()) self.builtin = builtin self.type = pyobjects.get_unknown() @@ -166,7 +166,7 @@ def _get_builtin(*args): return _get_builtin -class _CallContext(object): +class _CallContext: def __init__(self, argnames, args): self.argnames = argnames self.args = args @@ -229,7 +229,7 @@ def save_per_name(self, value): pymodule.pycore.object_info.save_per_name(scope, name, value) -class _AttributeCollector(object): +class _AttributeCollector: def __init__(self, type): self.attributes = {} self.type = type @@ -302,7 +302,7 @@ def __init__(self, holding=None): except AttributeError: pass - super(List, self).__init__(list, collector.attributes) + super().__init__(list, collector.attributes) def _new_list(self, args): return _create_builtin(args, get_list) @@ -362,7 +362,7 @@ def __init__(self, keys=None, values=None): collector("__getitem__", function=self._value_get, parent=self) collector("__iter__", function=self._key_iter, parent=self) collector("update", function=self._self_set, parent=self) - super(Dict, self).__init__(dict, collector.attributes) + super().__init__(dict, collector.attributes) def _new_dict(self, args): def do_create(holding=None): @@ -454,7 +454,7 @@ def __init__(self, *objects): "__new__": BuiltinName(BuiltinFunction(function=self._new_tuple)), "__iter__": BuiltinName(BuiltinFunction(get_iterator(first))), } - super(Tuple, self).__init__(tuple, attributes) + super().__init__(tuple, attributes) def get_holding_objects(self): return self.objects @@ -490,7 +490,7 @@ def __init__(self, holding=None): collector("pop", function=self._set_get, parent=self) collector("__iter__", function=self._iterator_get, parent=self) - super(Set, self).__init__(set, collector.attributes) + super().__init__(set, collector.attributes) def _new_set(self, args): return _create_builtin(args, get_set) @@ -565,7 +565,7 @@ def __init__(self): for method in ["rsplit", "split", "splitlines"]: collector(method, get_list(self_object), parent=self) - super(Str, self).__init__(str, collector.attributes) + super().__init__(str, collector.attributes) def get_doc(self): return str.__doc__ @@ -588,7 +588,7 @@ def get_definition_location(self): class Iterator(pyobjects.AbstractClass): def __init__(self, holding=None): - super(Iterator, self).__init__() + super().__init__() self.holding = holding self.attributes = { "next": BuiltinName(BuiltinFunction(self.holding)), @@ -607,7 +607,7 @@ def get_returned_object(self, args): class Generator(pyobjects.AbstractClass): def __init__(self, holding=None): - super(Generator, self).__init__() + super().__init__() self.holding = holding self.attributes = { "next": BuiltinName(BuiltinFunction(self.holding)), @@ -658,7 +658,7 @@ def add(name, returned=None, function=None): "writelines", ]: add(method) - super(File, self).__init__(open, attributes) + super().__init__(open, attributes) get_file = _create_builtin_getter(File) @@ -675,7 +675,7 @@ def __init__(self, fget=None, fset=None, fdel=None, fdoc=None): "fdel": BuiltinName(pynames.UnboundName()), "__new__": BuiltinName(BuiltinFunction(function=_property_function)), } - super(Property, self).__init__(property, attributes) + super().__init__(property, attributes) def get_property_object(self, args): if isinstance(self._fget, pyobjects.AbstractFunction): @@ -689,7 +689,7 @@ def _property_function(args): class Lambda(pyobjects.AbstractFunction): def __init__(self, node, scope): - super(Lambda, self).__init__() + super().__init__() self.node = node self.arguments = node.args self.scope = scope @@ -738,12 +738,12 @@ def parent(self): class BuiltinObject(BuiltinClass): def __init__(self): - super(BuiltinObject, self).__init__(object, {}) + super().__init__(object, {}) class BuiltinType(BuiltinClass): def __init__(self): - super(BuiltinType, self).__init__(type, {}) + super().__init__(type, {}) def _infer_sequence_for_pyname(pyname): diff --git a/rope/base/change.py b/rope/base/change.py index 495bf5d82..af105d520 100644 --- a/rope/base/change.py +++ b/rope/base/change.py @@ -7,7 +7,7 @@ from rope.base import taskhandle, exceptions, utils -class Change(object): +class Change: """The base class for changes Rope refactorings return `Change` objects. They can be previewed, @@ -103,7 +103,7 @@ def __str__(self): else: string_date = date.strftime("%d %b, %Y") string_time = date.strftime("%H:%M:%S") - string_time = "%s %s " % (string_date, string_time) + string_time = "{} {} ".format(string_date, string_time) return self.description + " - " + string_time return self.description @@ -211,7 +211,7 @@ def __str__(self): return "Move <%s>" % self.resource.path def get_description(self): - return "rename from %s\nrename to %s" % ( + return "rename from {}\nrename to {}".format( self.resource.path, self.new_resource.path, ) @@ -263,7 +263,7 @@ class CreateFolder(CreateResource): def __init__(self, parent, name): resource = parent.project.get_folder(self._get_child_path(parent, name)) - super(CreateFolder, self).__init__(resource) + super().__init__(resource) class CreateFile(CreateResource): @@ -274,7 +274,7 @@ class CreateFile(CreateResource): def __init__(self, parent, name): resource = parent.project.get_file(self._get_child_path(parent, name)) - super(CreateFile, self).__init__(resource) + super().__init__(resource) class RemoveResource(Change): @@ -318,7 +318,7 @@ def create_job_set(task_handle, change): return task_handle.create_jobset(str(change), count_changes(change)) -class _ResourceOperations(object): +class _ResourceOperations: def __init__(self, project): self.project = project self.fscommands = project.fscommands @@ -374,7 +374,7 @@ def _create_resource(self, file_name, kind="file"): fscommands.create_file(resource_path) else: fscommands.create_folder(resource_path) - except IOError as e: + except OSError as e: raise exceptions.RopeError(e) @@ -388,7 +388,7 @@ def _get_destination_for_move(resource, destination): return destination -class ChangeToData(object): +class ChangeToData: def convertChangeSet(self, change): description = change.description changes = [] @@ -416,7 +416,7 @@ def __call__(self, change): return (change_type.__name__, method(change)) -class DataToChange(object): +class DataToChange: def __init__(self, project): self.project = project diff --git a/rope/base/codeanalyze.py b/rope/base/codeanalyze.py index 3e2e0f618..992ff478c 100644 --- a/rope/base/codeanalyze.py +++ b/rope/base/codeanalyze.py @@ -4,7 +4,7 @@ import tokenize -class ChangeCollector(object): +class ChangeCollector: def __init__(self, text): self.text = text self.changes = [] @@ -32,7 +32,7 @@ def get_changed(self): return result -class SourceLinesAdapter(object): +class SourceLinesAdapter: """Adapts source to Lines interface Note: The creation of this class is expensive. @@ -71,7 +71,7 @@ def get_line_end(self, lineno): return self.starts[lineno] - 1 -class ArrayLinesAdapter(object): +class ArrayLinesAdapter: def __init__(self, lines): self.lines = lines @@ -82,7 +82,7 @@ def length(self): return len(self.lines) -class LinesToReadline(object): +class LinesToReadline: def __init__(self, lines, start): self.lines = lines self.current = start @@ -97,7 +97,7 @@ def __call__(self): return self.readline() -class _CustomGenerator(object): +class _CustomGenerator: def __init__(self, lines): self.lines = lines self.in_string = "" @@ -162,7 +162,7 @@ def custom_generator(lines): return _CustomGenerator(lines)() -class LogicalLineFinder(object): +class LogicalLineFinder: def __init__(self, lines): self.lines = lines @@ -245,7 +245,7 @@ def tokenizer_generator(lines): return LogicalLineFinder(lines).generate_regions() -class CachingLogicalLineFinder(object): +class CachingLogicalLineFinder: def __init__(self, lines, generate=custom_generator): self.lines = lines self._generate = generate diff --git a/rope/base/evaluate.py b/rope/base/evaluate.py index f9a17b5ae..b9f9b0b33 100644 --- a/rope/base/evaluate.py +++ b/rope/base/evaluate.py @@ -48,7 +48,7 @@ def eval_str2(holding_scope, name): return eval_node2(holding_scope, node) -class ScopeNameFinder(object): +class ScopeNameFinder: def __init__(self, pymodule): self.module_scope = pymodule.get_scope() self.lines = pymodule.lines @@ -145,7 +145,7 @@ def _find_module(self, module_name): ) -class StatementEvaluator(object): +class StatementEvaluator: def __init__(self, scope): self.scope = scope self.result = None diff --git a/rope/base/exceptions.py b/rope/base/exceptions.py index ff38a405d..950946b4e 100644 --- a/rope/base/exceptions.py +++ b/rope/base/exceptions.py @@ -46,8 +46,8 @@ def __init__(self, filename, lineno, message): self.filename = filename self.lineno = lineno self.message_ = message - super(ModuleSyntaxError, self).__init__( - "Syntax error in file <%s> line <%s>: %s" % (filename, lineno, message) + super().__init__( + "Syntax error in file <{}> line <{}>: {}".format(filename, lineno, message) ) @@ -57,6 +57,6 @@ class ModuleDecodeError(RopeError): def __init__(self, filename, message): self.filename = filename self.message_ = message - super(ModuleDecodeError, self).__init__( - "Cannot decode file <%s>: %s" % (filename, message) + super().__init__( + "Cannot decode file <{}>: {}".format(filename, message) ) diff --git a/rope/base/fscommands.py b/rope/base/fscommands.py index e369ae823..8242918b1 100644 --- a/rope/base/fscommands.py +++ b/rope/base/fscommands.py @@ -37,7 +37,7 @@ def create_fscommands(root): return FileSystemCommands() -class FileSystemCommands(object): +class FileSystemCommands: def create_file(self, path): open(path, "w").close() @@ -65,7 +65,7 @@ def read(self, path): return handle.read() -class SubversionCommands(object): +class SubversionCommands: def __init__(self, *args): self.normal_actions = FileSystemCommands() import pysvn @@ -93,7 +93,7 @@ def read(self, path): return self.normal_actions.read(path) -class MercurialCommands(object): +class MercurialCommands: def __init__(self, root): self.hg = self._import_mercurial() self.normal_actions = FileSystemCommands() @@ -144,7 +144,7 @@ def read(self, path): return self.normal_actions.read(path) -class GITCommands(object): +class GITCommands: def __init__(self, root): self.root = root self._do(["version"]) @@ -179,7 +179,7 @@ def _in_dir(self, path): return self.root -class DarcsCommands(object): +class DarcsCommands: def __init__(self, root): self.root = root self.normal_actions = FileSystemCommands() diff --git a/rope/base/history.py b/rope/base/history.py index d2ba8072f..dab035922 100644 --- a/rope/base/history.py +++ b/rope/base/history.py @@ -1,7 +1,7 @@ from rope.base import exceptions, change, taskhandle -class History(object): +class History: """A class that holds project history""" def __init__(self, project, maxundos=None): @@ -202,7 +202,7 @@ def clear(self): del self.redo_list[:] -class _FindChangeDependencies(object): +class _FindChangeDependencies: def __init__(self, change_list): self.change = change_list[0] self.change_list = change_list diff --git a/rope/base/oi/doa.py b/rope/base/oi/doa.py index 48b5db98f..92dbd5140 100644 --- a/rope/base/oi/doa.py +++ b/rope/base/oi/doa.py @@ -38,7 +38,7 @@ def _compat_compare_digest(a, b): compare_digest = _compat_compare_digest -class PythonFileRunner(object): +class PythonFileRunner: """A class for running python project files""" def __init__( @@ -140,7 +140,7 @@ def add_finishing_observer(self, observer): self.observers.append(observer) -class _MessageReceiver(object): +class _MessageReceiver: def receive_data(self): pass @@ -158,7 +158,7 @@ def __init__(self): try: self.server_socket.bind(("localhost", self.data_port)) break - except socket.error: + except OSError: self.data_port += 1 self.server_socket.listen(1) diff --git a/rope/base/oi/memorydb.py b/rope/base/oi/memorydb.py index 6388e53f5..340fb4431 100644 --- a/rope/base/oi/memorydb.py +++ b/rope/base/oi/memorydb.py @@ -22,8 +22,7 @@ def keys(self): return self._files.keys() def __iter__(self): - for f in self._files: - yield f + yield from self._files def __len__(self): return len(self._files) @@ -85,8 +84,7 @@ def __delitem__(self, key): del self.scopes[key] def __iter__(self): - for s in self.scopes: - yield s + yield from self.scopes def __len__(self): return len(self.scopes) diff --git a/rope/base/oi/objectdb.py b/rope/base/oi/objectdb.py index 53583ee0c..7351fcd9e 100644 --- a/rope/base/oi/objectdb.py +++ b/rope/base/oi/objectdb.py @@ -1,7 +1,4 @@ -from __future__ import print_function - - -class ObjectDB(object): +class ObjectDB: def __init__(self, db, validation): self.db = db self.validation = validation @@ -92,13 +89,13 @@ def __str__(self): scope_count = 0 for file_dict in self.files.values(): scope_count += len(file_dict) - return "ObjectDB holds %s file and %s scope infos" % ( + return "ObjectDB holds {} file and {} scope infos".format( len(self.files), scope_count, ) -class _NullScopeInfo(object): +class _NullScopeInfo: def __init__(self, error_on_write=True): self.error_on_write = error_on_write @@ -133,7 +130,7 @@ def rename(self, key, new_key): pass -class ScopeInfo(object): +class ScopeInfo: def get_per_name(self, name): pass @@ -150,7 +147,7 @@ def add_call(self, parameters, returned): pass -class CallInfo(object): +class CallInfo: def __init__(self, args, returned): self.args = args self.returned = returned @@ -162,7 +159,7 @@ def get_returned(self): return self.returned -class FileListObserver(object): +class FileListObserver: def added(self, path): pass diff --git a/rope/base/oi/objectinfo.py b/rope/base/oi/objectinfo.py index fc8296f37..3ecce786b 100644 --- a/rope/base/oi/objectinfo.py +++ b/rope/base/oi/objectinfo.py @@ -4,7 +4,7 @@ from rope.base.oi import objectdb, memorydb, transform -class ObjectInfoManager(object): +class ObjectInfoManager: """Stores object information It uses an instance of `objectdb.ObjectDB` for storing @@ -96,7 +96,7 @@ def get_exact_returned(self, pyobject, args): def _args_to_textual(self, pyfunction, args): parameters = list(pyfunction.get_param_names(special_args=False)) arguments = args.get_arguments(parameters)[: len(parameters)] - textual_args = tuple([self.to_textual(arg) for arg in arguments]) + textual_args = tuple(self.to_textual(arg) for arg in arguments) return textual_args def get_parameter_objects(self, pyobject): @@ -138,14 +138,14 @@ def doi_to_normal(textual): return self.to_textual(pyobject) function = doi_to_normal(data[0]) - args = tuple([doi_to_normal(textual) for textual in data[1]]) + args = tuple(doi_to_normal(textual) for textual in data[1]) returned = doi_to_normal(data[2]) if function[0] == "defined" and len(function) == 3: self._save_data(function, args, returned) def function_called(self, pyfunction, params, returned=None): function_text = self.to_textual(pyfunction) - params_text = tuple([self.to_textual(param) for param in params]) + params_text = tuple(self.to_textual(param) for param in params) returned_text = ("unknown",) if returned is not None: returned_text = self.to_textual(returned) @@ -187,7 +187,7 @@ def __str__(self): return str(self.objectdb) -class TextualValidation(object): +class TextualValidation: def __init__(self, to_pyobject): self.to_pyobject = to_pyobject @@ -213,7 +213,7 @@ def is_scope_valid(self, path, key): return self.to_pyobject(textual) is not None -class _FileListObserver(object): +class _FileListObserver: def __init__(self, object_info): self.object_info = object_info self.observer = self.object_info.observer diff --git a/rope/base/oi/runmod.py b/rope/base/oi/runmod.py index 2f169e392..e0d28c343 100644 --- a/rope/base/oi/runmod.py +++ b/rope/base/oi/runmod.py @@ -16,7 +16,7 @@ def __rope_start_everything(): import hashlib import hmac - class _MessageSender(object): + class _MessageSender: def send_data(self, data): pass @@ -61,7 +61,7 @@ def newfunc(self, arg): return newfunc - class _FunctionCallDataSender(object): + class _FunctionCallDataSender: def __init__(self, send_info, project_root): self.project_root = project_root if send_info[0].isdigit(): diff --git a/rope/base/oi/soa.py b/rope/base/oi/soa.py index 6d8de5ca7..c77a9d0b5 100644 --- a/rope/base/oi/soa.py +++ b/rope/base/oi/soa.py @@ -37,7 +37,7 @@ def _follow(pyfunction): rope.base.ast.walk(child, visitor) -class SOAVisitor(object): +class SOAVisitor: def __init__(self, pycore, pydefined, follow_callback=None): self.pycore = pycore self.pymodule = pydefined.get_module() @@ -141,7 +141,7 @@ def _evaluate_assign_value(self, node, nodes, type_hint=False): class _SOAAssignVisitor(astutils._NodeNameCollector): def __init__(self): - super(_SOAAssignVisitor, self).__init__() + super().__init__() self.nodes = [] def _added(self, node, levels): diff --git a/rope/base/oi/transform.py b/rope/base/oi/transform.py index 768d5aea9..b42d92939 100644 --- a/rope/base/oi/transform.py +++ b/rope/base/oi/transform.py @@ -6,7 +6,7 @@ from rope.base import exceptions -class PyObjectToTextual(object): +class PyObjectToTextual: """For transforming `PyObject` to textual form This can be used for storing `PyObjects` in files. Use @@ -107,7 +107,7 @@ def resource_to_path(self, resource): return resource.real_path -class TextualToPyObject(object): +class TextualToPyObject: """For transforming textual form to `PyObject`""" def __init__(self, project, allow_in_project_absolutes=False): @@ -289,4 +289,4 @@ def path_to_resource(self, path): relpath = rope.base.libutils.path_relative_to_project_root(self.project, path) if relpath is not None: path = relpath - return super(DOITextualToPyObject, self).path_to_resource(path) + return super().path_to_resource(path) diff --git a/rope/base/oi/type_hinting/evaluate.py b/rope/base/oi/type_hinting/evaluate.py index 9b6ec3dc1..009682d72 100644 --- a/rope/base/oi/type_hinting/evaluate.py +++ b/rope/base/oi/type_hinting/evaluate.py @@ -6,7 +6,7 @@ from rope.base import utils as base_utils -class SymbolBase(object): +class SymbolBase: name = None # node/token type name @@ -27,13 +27,13 @@ def evaluate(self, pyobject): def __repr__(self): if self.name == "(name)": - return "(%s %s)" % (self.name[1:-1], self.value) + return "({} {})".format(self.name[1:-1], self.value) out = [repr(self.name), self.first, self.second, self.third] out = [str(i) for i in out if i] return "(" + " ".join(out) + ")" -class SymbolTable(object): +class SymbolTable: def multi(func): def _inner(self, names, *a, **kw): for name in names.split(): @@ -126,7 +126,7 @@ def led(self, left, parser): symbol_table = SymbolTable() -class Lexer(object): +class Lexer: _token_pattern = re.compile( r""" @@ -157,7 +157,7 @@ def tokenize(self, program): s.value = value else: raise SyntaxError( - "Unknown operator ({0}). Possible operators are {1!r}".format( + "Unknown operator ({}). Possible operators are {!r}".format( value, list(self.symbol_table) ) ) @@ -178,7 +178,7 @@ def _tokenize_expr(self, program): yield "(end)", "(end)" -class Parser(object): +class Parser: token = None next = None @@ -208,7 +208,7 @@ def expression(self, rbp=0): def advance(self, name=None): if name and self.token.name != name: raise SyntaxError( - "Expected {0!r} but found {1!r}".format(name, self.token.name) + f"Expected {name!r} but found {self.token.name!r}" ) self.token = self.next() @@ -325,7 +325,7 @@ def evaluate(self, pyobject): raise NotImplementedError -class Compiler(object): +class Compiler: parser_factory = Parser lexer_factory = Lexer @@ -346,7 +346,7 @@ def __call__(self, program): compile = Compiler() -class Evaluator(object): +class Evaluator: compile = compile diff --git a/rope/base/oi/type_hinting/factory.py b/rope/base/oi/type_hinting/factory.py index c37a3de91..f514b7c09 100644 --- a/rope/base/oi/type_hinting/factory.py +++ b/rope/base/oi/type_hinting/factory.py @@ -59,7 +59,7 @@ def make_resolver(self): default_type_hinting_factory = TypeHintingFactory() -class TypeHintingFactoryAccessor(object): +class TypeHintingFactoryAccessor: def __call__(self, project): """ :type project: rope.base.project.Project diff --git a/rope/base/oi/type_hinting/interfaces.py b/rope/base/oi/type_hinting/interfaces.py index fa9eef165..026590766 100644 --- a/rope/base/oi/type_hinting/interfaces.py +++ b/rope/base/oi/type_hinting/interfaces.py @@ -1,4 +1,4 @@ -class ITypeHintingFactory(object): +class ITypeHintingFactory: def make_param_provider(self): """ :rtype: rope.base.oi.type_hinting.providers.interfaces.IParamProvider diff --git a/rope/base/oi/type_hinting/providers/docstrings.py b/rope/base/oi/type_hinting/providers/docstrings.py index 2e1c864a5..c8497c3e9 100644 --- a/rope/base/oi/type_hinting/providers/docstrings.py +++ b/rope/base/oi/type_hinting/providers/docstrings.py @@ -90,7 +90,7 @@ def __call__(self, pyname): return self._resolve(type_strs[0], pyclass) -class IParamParser(object): +class IParamParser: def __call__(self, docstring, param_name): """ :type docstring: str @@ -98,7 +98,7 @@ def __call__(self, docstring, param_name): """ -class IReturnParser(object): +class IReturnParser: def __call__(self, docstring): """ :type docstring: str @@ -163,7 +163,7 @@ def __call__(self, docstring): return [] -class RSTRoleStrip(object): +class RSTRoleStrip: RST_ROLE_PATTERN = re.compile(r":[^`]+:`([^`]+)`") diff --git a/rope/base/oi/type_hinting/providers/interfaces.py b/rope/base/oi/type_hinting/providers/interfaces.py index 9d10a70b7..2e8d0c0cb 100644 --- a/rope/base/oi/type_hinting/providers/interfaces.py +++ b/rope/base/oi/type_hinting/providers/interfaces.py @@ -1,4 +1,4 @@ -class IParamProvider(object): +class IParamProvider: def __call__(self, pyfunc, param_name): """ :type pyfunc: rope.base.pyobjectsdef.PyFunction @@ -8,7 +8,7 @@ def __call__(self, pyfunc, param_name): raise NotImplementedError -class IReturnProvider(object): +class IReturnProvider: """ :type resolve: rope.base.oi.type_hinting.resolvers.interfaces.IResolver """ @@ -23,7 +23,7 @@ def __call__(self, pyfunc): raise NotImplementedError -class IAssignmentProvider(object): +class IAssignmentProvider: """ :type resolve: rope.base.oi.type_hinting.resolvers.interfaces.IResolver """ diff --git a/rope/base/oi/type_hinting/providers/numpydocstrings.py b/rope/base/oi/type_hinting/providers/numpydocstrings.py index 6c4fb229d..dec290195 100644 --- a/rope/base/oi/type_hinting/providers/numpydocstrings.py +++ b/rope/base/oi/type_hinting/providers/numpydocstrings.py @@ -26,7 +26,7 @@ def __call__(self, docstring, param_name): p_type = m.group(1) if p_type.startswith("{"): - types = set(type(x).__name__ for x in literal_eval(p_type)) + types = {type(x).__name__ for x in literal_eval(p_type)} return list(types) else: return [p_type] diff --git a/rope/base/oi/type_hinting/resolvers/interfaces.py b/rope/base/oi/type_hinting/resolvers/interfaces.py index 120b97232..28f4184e3 100644 --- a/rope/base/oi/type_hinting/resolvers/interfaces.py +++ b/rope/base/oi/type_hinting/resolvers/interfaces.py @@ -1,4 +1,4 @@ -class IResolver(object): +class IResolver: def __call__(self, hint, pyobject): """ :param hint: For example "List[int]" or "(Foo, Bar) -> Baz" or simple "Foo" diff --git a/rope/base/oi/type_hinting/utils.py b/rope/base/oi/type_hinting/utils.py index bad700af5..67ae10a4b 100644 --- a/rope/base/oi/type_hinting/utils.py +++ b/rope/base/oi/type_hinting/utils.py @@ -116,7 +116,7 @@ def resolve_type(type_name, pyobject): return ret_type -class ParametrizeType(object): +class ParametrizeType: _supported_mapping = { "builtins.list": "rope.base.builtins.get_list", @@ -154,7 +154,7 @@ def __call__(self, pyobject, *args, **kwargs): return pyobject def _get_type_factory(self, pyobject): - type_str = "{0}.{1}".format( + type_str = "{}.{}".format( pyobject.get_module().get_name(), pyobject.get_name(), ) diff --git a/rope/base/prefs.py b/rope/base/prefs.py index 222e41c37..1b68008ef 100644 --- a/rope/base/prefs.py +++ b/rope/base/prefs.py @@ -1,4 +1,4 @@ -class Prefs(object): +class Prefs: def __init__(self): self.prefs = {} self.callbacks = {} diff --git a/rope/base/project.py b/rope/base/project.py index 02407edb5..dc60ff714 100644 --- a/rope/base/project.py +++ b/rope/base/project.py @@ -16,7 +16,7 @@ import pickle -class _Project(object): +class _Project: def __init__(self, fscommands): self.observers = [] self.fscommands = fscommands @@ -212,7 +212,7 @@ def __init__( raise exceptions.RopeError("Project root exists and" " is not a directory") if fscommands is None: fscommands = rope.base.fscommands.create_fscommands(self._address) - super(Project, self).__init__(fscommands) + super().__init__(fscommands) self.ignored = _ResourceMatcher() self.file_list = _FileListCacher(self) self.prefs.add_callback("ignored_resources", self.ignored.set_patterns) @@ -312,7 +312,7 @@ def ropefolder(self): def validate(self, folder=None): if folder is None: folder = self.root - super(Project, self).validate(folder) + super().validate(folder) root = property(lambda self: self.get_resource("")) address = property(lambda self: self._address) @@ -326,7 +326,7 @@ class NoProject(_Project): def __init__(self): fscommands = rope.base.fscommands.FileSystemCommands() - super(NoProject, self).__init__(fscommands) + super().__init__(fscommands) def _get_resource_path(self, name): real_name = name.replace("/", os.path.sep) @@ -334,7 +334,7 @@ def _get_resource_path(self, name): def get_resource(self, name): universal_name = _realpath(name).replace(os.path.sep, "/") - return super(NoProject, self).get_resource(universal_name) + return super().get_resource(universal_name) def get_files(self): return [] @@ -351,7 +351,7 @@ def get_no_project(): return NoProject._no_project -class _FileListCacher(object): +class _FileListCacher: def __init__(self, project): self.project = project self.files = None @@ -381,7 +381,7 @@ def _invalid(self, resource, new_resource=None): self.files = None -class _DataFiles(object): +class _DataFiles: def __init__(self, project): self.project = project self.hooks = [] diff --git a/rope/base/pycore.py b/rope/base/pycore.py index 352a509b3..48c064431 100644 --- a/rope/base/pycore.py +++ b/rope/base/pycore.py @@ -18,7 +18,7 @@ from rope.base.pyobjectsdef import PyModule, PyPackage -class PyCore(object): +class PyCore: def __init__(self, project): self.project = project self._init_resource_observer() @@ -239,7 +239,7 @@ def extension_modules(self): return result -class _ModuleCache(object): +class _ModuleCache: def __init__(self, pycore): self.pycore = pycore self.module_map = {} @@ -273,7 +273,7 @@ def __str__(self): return "PyCore caches %d PyModules\n" % len(self.module_map) -class _ExtensionCache(object): +class _ExtensionCache: def __init__(self, pycore): self.pycore = pycore self.extensions = {} @@ -310,7 +310,7 @@ def should_analyze(pydefined): pass -class _TextChangeDetector(object): +class _TextChangeDetector: def __init__(self, old, new): self.old = old self.new = new diff --git a/rope/base/pynames.py b/rope/base/pynames.py index 285ee38f8..e15af4714 100644 --- a/rope/base/pynames.py +++ b/rope/base/pynames.py @@ -2,7 +2,7 @@ from rope.base import exceptions, utils -class PyName(object): +class PyName: """References to `PyObject` inside python programs""" def get_object(self): @@ -43,7 +43,7 @@ def get_definition_location(self): return (None, None) -class AssignmentValue(object): +class AssignmentValue: """An assigned expression""" def __init__( @@ -174,7 +174,7 @@ def _circular_inference(): raise rope.base.pyobjects.IsBeingInferredError("Circular Object Inference") -class _Inferred(object): +class _Inferred: def __init__(self, get_inferred, concluded=None): self.get_inferred = get_inferred self.concluded = concluded diff --git a/rope/base/pyobjects.py b/rope/base/pyobjects.py index 8f0e03e19..5e6902753 100644 --- a/rope/base/pyobjects.py +++ b/rope/base/pyobjects.py @@ -2,7 +2,7 @@ from rope.base import ast, exceptions, utils -class PyObject(object): +class PyObject: def __init__(self, type_): if type_ is None: type_ = self @@ -56,7 +56,7 @@ def __hash__(self): if type(self) == PyObject and self != self.type: return hash(self.type) + 1 else: - return super(PyObject, self).__hash__() + return super().__hash__() def __iter__(self): """The same as ``iter(self.get_attributes())``""" @@ -118,7 +118,7 @@ def get_unknown(): class AbstractClass(PyObject): def __init__(self): - super(AbstractClass, self).__init__(get_base_type("Type")) + super().__init__(get_base_type("Type")) def get_name(self): pass @@ -132,7 +132,7 @@ def get_superclasses(self): class AbstractFunction(PyObject): def __init__(self): - super(AbstractFunction, self).__init__(get_base_type("Function")) + super().__init__(get_base_type("Function")) def get_name(self): pass @@ -149,7 +149,7 @@ def get_returned_object(self, args): class AbstractModule(PyObject): def __init__(self, doc=None): - super(AbstractModule, self).__init__(get_base_type("Module")) + super().__init__(get_base_type("Module")) def get_doc(self): pass @@ -158,7 +158,7 @@ def get_resource(self): pass -class PyDefinedObject(object): +class PyDefinedObject: """Python defined names that rope can access their sources""" def __init__(self, pycore, ast_node, parent): @@ -255,7 +255,7 @@ class PyClass(PyDefinedObject, AbstractClass): """Only a placeholder""" -class _ConcludedData(object): +class _ConcludedData: def __init__(self): self.data_ = None diff --git a/rope/base/pyobjectsdef.py b/rope/base/pyobjectsdef.py index 7dd9d7494..622fcb0ef 100644 --- a/rope/base/pyobjectsdef.py +++ b/rope/base/pyobjectsdef.py @@ -193,7 +193,7 @@ def __init__(self, pycore, source=None, resource=None, force_errors=False): self.star_imports = [] self.visitor_class = _GlobalVisitor self.coding = fscommands.read_str_coding(self.source_code) - super(PyModule, self).__init__(pycore, node, resource) + super().__init__(pycore, node, resource) def _init_source(self, pycore, source_code, resource): filename = "string" @@ -251,7 +251,7 @@ def __init__(self, pycore, resource=None, force_errors=False): ).get_ast() else: ast_node = ast.parse("\n") - super(PyPackage, self).__init__(pycore, ast_node, resource) + super().__init__(pycore, ast_node, resource) def _create_structural_attributes(self): result = {} @@ -299,7 +299,7 @@ def get_module(self): return self -class _AnnAssignVisitor(object): +class _AnnAssignVisitor: def __init__(self, scope_visitor): self.scope_visitor = scope_visitor self.assigned_ast = None @@ -341,7 +341,7 @@ def _Slice(self, node): pass -class _ExpressionVisitor(object): +class _ExpressionVisitor: def __init__(self, scope_visitor): self.scope_visitor = scope_visitor @@ -368,7 +368,7 @@ def _NamedExpr(self, node): ast.walk(node.value, self) -class _AssignVisitor(object): +class _AssignVisitor: def __init__(self, scope_visitor): self.scope_visitor = scope_visitor self.assigned_ast = None @@ -590,12 +590,12 @@ def _get_pyobject(self, node): class _GlobalVisitor(_ScopeVisitor): def __init__(self, pycore, owner_object): - super(_GlobalVisitor, self).__init__(pycore, owner_object) + super().__init__(pycore, owner_object) class _ClassVisitor(_ScopeVisitor): def __init__(self, pycore, owner_object): - super(_ClassVisitor, self).__init__(pycore, owner_object) + super().__init__(pycore, owner_object) def _FunctionDef(self, node): _ScopeVisitor._FunctionDef(self, node) @@ -611,7 +611,7 @@ def _FunctionDef(self, node): class _FunctionVisitor(_ScopeVisitor): def __init__(self, pycore, owner_object): - super(_FunctionVisitor, self).__init__(pycore, owner_object) + super().__init__(pycore, owner_object) self.returned_asts = [] self.generator = False @@ -627,7 +627,7 @@ def _Yield(self, node): class _ClassInitVisitor(_AssignVisitor): def __init__(self, scope_visitor, self_name): - super(_ClassInitVisitor, self).__init__(scope_visitor) + super().__init__(scope_visitor) self.self_name = self_name def _Attribute(self, node): @@ -667,7 +667,7 @@ def _With(self, node): pass -class StarImport(object): +class StarImport: def __init__(self, imported_module): self.imported_module = imported_module diff --git a/rope/base/pyscopes.py b/rope/base/pyscopes.py index 2eed0f214..524b48d15 100644 --- a/rope/base/pyscopes.py +++ b/rope/base/pyscopes.py @@ -5,7 +5,7 @@ from rope.refactor import patchedast -class Scope(object): +class Scope: def __init__(self, pycore, pyobject, parent_scope): self.pycore = pycore self.pyobject = pyobject @@ -119,7 +119,7 @@ def in_region(self, offset): class GlobalScope(Scope): def __init__(self, pycore, module): - super(GlobalScope, self).__init__(pycore, module, None) + super().__init__(pycore, module, None) self.names = module._get_concluded_data() def get_start(self): @@ -147,7 +147,7 @@ def _get_source(self): def get_names(self): if self.names.get() is None: result = dict(self.builtin_names) - result.update(super(GlobalScope, self).get_names()) + result.update(super().get_names()) self.names.set(result) return self.names.get() @@ -169,7 +169,7 @@ def builtin_names(self): class ComprehensionScope(Scope): def __init__(self, pycore, pyobject, visitor): - super(ComprehensionScope, self).__init__( + super().__init__( pycore, pyobject, pyobject.parent.get_scope() ) self.names = None @@ -205,7 +205,7 @@ def get_body_start(self): class FunctionScope(Scope): def __init__(self, pycore, pyobject, visitor): - super(FunctionScope, self).__init__( + super().__init__( pycore, pyobject, pyobject.parent.get_scope() ) self.names = None @@ -262,7 +262,7 @@ def invalidate_data(self): class ClassScope(Scope): def __init__(self, pycore, pyobject): - super(ClassScope, self).__init__(pycore, pyobject, pyobject.parent.get_scope()) + super().__init__(pycore, pyobject, pyobject.parent.get_scope()) def get_kind(self): return "Class" @@ -271,7 +271,7 @@ def get_propagated_names(self): return {} -class _HoldingScopeFinder(object): +class _HoldingScopeFinder: def __init__(self, pymodule): self.pymodule = pymodule @@ -363,7 +363,7 @@ class TemporaryScope(Scope): """ def __init__(self, pycore, parent_scope, names): - super(TemporaryScope, self).__init__( + super().__init__( pycore, parent_scope.pyobject, parent_scope ) self.names = names diff --git a/rope/base/resourceobserver.py b/rope/base/resourceobserver.py index 4f16d5806..8b2186d2a 100644 --- a/rope/base/resourceobserver.py +++ b/rope/base/resourceobserver.py @@ -1,7 +1,7 @@ import os -class ResourceObserver(object): +class ResourceObserver: """Provides the interface for observing resources `ResourceObserver` can be registered using `Project. @@ -57,7 +57,7 @@ def validate(self, resource): self._validate(resource) -class FilteredResourceObserver(object): +class FilteredResourceObserver: """A useful decorator for `ResourceObserver` Most resource observers have a list of resources and are @@ -246,7 +246,7 @@ def _calculate_new_resource(self, main, new_main, resource): return resource.project.get_resource(new_main.path + diff) -class ChangeIndicator(object): +class ChangeIndicator: def get_indicator(self, resource): """Return the modification time and size of a `Resource`.""" path = resource.real_path @@ -260,7 +260,7 @@ def get_indicator(self, resource): return (os.path.getmtime(path), os.path.getsize(path)) -class _Changes(object): +class _Changes: def __init__(self): self.changes = set() self.creations = set() diff --git a/rope/base/resources.py b/rope/base/resources.py index 174492faf..bd5e8efe3 100644 --- a/rope/base/resources.py +++ b/rope/base/resources.py @@ -35,7 +35,7 @@ from rope.base import fscommands -class Resource(object): +class Resource: """Represents files and folders in a project""" def __init__(self, project, path): @@ -46,7 +46,7 @@ def move(self, new_location): """Move resource to `new_location`""" self._perform_change( change.MoveResource(self, new_location), - "Moving <%s> to <%s>" % (self.path, new_location), + "Moving <{}> to <{}>".format(self.path, new_location), ) def remove(self): @@ -106,7 +106,7 @@ class File(Resource): def __init__(self, project, name): self.newlines = None - super(File, self).__init__(project, name) + super().__init__(project, name) def read(self): data = self.read_bytes() @@ -131,7 +131,7 @@ def write(self, contents): try: if contents == self.read(): return - except IOError: + except OSError: pass self._perform_change( change.ChangeContents(self, contents), "Writing file <%s>" % self.path @@ -148,7 +148,7 @@ class Folder(Resource): """Represents a folder""" def __init__(self, project, name): - super(Folder, self).__init__(project, name) + super().__init__(project, name) def is_folder(self): return True @@ -216,7 +216,7 @@ def create(self): self.parent.create_folder(self.name) -class _ResourceMatcher(object): +class _ResourceMatcher: def __init__(self): self.patterns = [] self._compiled_patterns = [] diff --git a/rope/base/taskhandle.py b/rope/base/taskhandle.py index 4724492c7..c80d9eb5c 100644 --- a/rope/base/taskhandle.py +++ b/rope/base/taskhandle.py @@ -1,7 +1,7 @@ from rope.base import exceptions -class TaskHandle(object): +class TaskHandle: def __init__(self, name="Task", interrupts=True): """Construct a TaskHandle @@ -52,7 +52,7 @@ def _inform_observers(self): observer() -class JobSet(object): +class JobSet: def __init__(self, handle, name, count): self.handle = handle self.name = name @@ -87,7 +87,7 @@ def get_name(self): return self.name -class NullTaskHandle(object): +class NullTaskHandle: def __init__(self): pass @@ -107,7 +107,7 @@ def add_observer(self, observer): pass -class NullJobSet(object): +class NullJobSet: def started_job(self, name): pass diff --git a/rope/base/utils/__init__.py b/rope/base/utils/__init__.py index 2db623357..b77f4aad1 100644 --- a/rope/base/utils/__init__.py +++ b/rope/base/utils/__init__.py @@ -79,7 +79,7 @@ def decorator(func): return decorator -class _Cached(object): +class _Cached: def __init__(self, func, count): self.func = func self.cache = [] diff --git a/rope/base/utils/datastructures.py b/rope/base/utils/datastructures.py index e9c0b60ee..a360b47c5 100644 --- a/rope/base/utils/datastructures.py +++ b/rope/base/utils/datastructures.py @@ -60,8 +60,8 @@ def pop(self, last=True): def __repr__(self): if not self: - return "%s()" % (self.__class__.__name__,) - return "%s(%r)" % (self.__class__.__name__, list(self)) + return "{}()".format(self.__class__.__name__) + return "{}({!r})".format(self.__class__.__name__, list(self)) def __eq__(self, other): if isinstance(other, OrderedSet): diff --git a/rope/base/worder.py b/rope/base/worder.py index d033730fd..94089b5a8 100644 --- a/rope/base/worder.py +++ b/rope/base/worder.py @@ -12,7 +12,7 @@ def get_name_at(resource, offset): return word_finder.get_word_at(offset) -class Worder(object): +class Worder: """A class for finding boundaries of words and expressions Note that in these methods, offset should be the index of the @@ -131,7 +131,7 @@ def find_function_offset(self, offset): return self.code_finder.find_function_offset(offset) -class _RealFinder(object): +class _RealFinder: def __init__(self, code, raw): self.code = code self.raw = raw diff --git a/rope/contrib/autoimport/pickle.py b/rope/contrib/autoimport/pickle.py index bd617be7c..5f42566f7 100644 --- a/rope/contrib/autoimport/pickle.py +++ b/rope/contrib/autoimport/pickle.py @@ -23,7 +23,7 @@ from rope.refactor import importutils -class AutoImport(object): +class AutoImport: """A class for finding the module that provides a name This class maintains a cache of global names in python modules. @@ -228,11 +228,11 @@ def _removed(self, resource): def submodules(mod): if isinstance(mod, resources.File): if mod.name.endswith(".py") and mod.name != "__init__.py": - return set([mod]) + return {mod} return set() if not mod.has_child("__init__.py"): return set() - result = set([mod]) + result = {mod} for child in mod.get_children(): result |= submodules(child) return result diff --git a/rope/contrib/changestack.py b/rope/contrib/changestack.py index 1325cef25..9b48cbd25 100644 --- a/rope/contrib/changestack.py +++ b/rope/contrib/changestack.py @@ -21,7 +21,7 @@ from rope.base import change -class ChangeStack(object): +class ChangeStack: def __init__(self, project, description="merged changes"): self.project = project self.description = description @@ -45,7 +45,6 @@ def merged(self): def _basic_changes(self, changes): if isinstance(changes, change.ChangeSet): for child in changes.changes: - for atom in self._basic_changes(child): - yield atom + yield from self._basic_changes(child) else: yield changes diff --git a/rope/contrib/codeassist.py b/rope/contrib/codeassist.py index ebc5e3969..4eb8c958f 100644 --- a/rope/contrib/codeassist.py +++ b/rope/contrib/codeassist.py @@ -207,7 +207,7 @@ def mux(self, x): return names -class CompletionProposal(object): +class CompletionProposal: """A completion proposal The `scope` instance variable shows where proposed name came from @@ -238,7 +238,7 @@ def __init__(self, name, scope, pyname=None): self.scope = self._get_scope(scope) def __str__(self): - return "%s (%s, %s)" % (self.name, self.scope, self.type) + return "{} ({}, {})".format(self.name, self.scope, self.type) def __repr__(self): return str(self) @@ -326,7 +326,7 @@ class NamedParamProposal(CompletionProposal): def __init__(self, name, function): self.argname = name name = "%s=" % name - super(NamedParamProposal, self).__init__(name, "parameter_keyword") + super().__init__(name, "parameter_keyword") self._function = function def get_default(self): @@ -376,7 +376,7 @@ def default_templates(): return {} -class _PythonCodeAssist(object): +class _PythonCodeAssist: def __init__( self, project, source_code, offset, resource=None, maxfixes=1, later_locals=True ): @@ -534,7 +534,7 @@ def _keyword_parameters(self, pymodule, scope): return {} -class _ProposalSorter(object): +class _ProposalSorter: """Sort a list of code assist proposals""" def __init__(self, code_assist_proposals, scopepref=None, typepref=None): @@ -552,7 +552,7 @@ def __init__(self, code_assist_proposals, scopepref=None, typepref=None): self.scopepref = scopepref if typepref is None: typepref = ["class", "function", "instance", "module", None] - self.typerank = dict((type, index) for index, type in enumerate(typepref)) + self.typerank = {type: index for index, type in enumerate(typepref)} def get_sorted_proposal_list(self): """Return a list of `CodeAssistProposal`""" @@ -587,7 +587,7 @@ def _underline_count(name): # proposal2.name) -class PyDocExtractor(object): +class PyDocExtractor: def get_doc(self, pyobject): if isinstance(pyobject, pyobjects.AbstractFunction): return self._get_function_docstring(pyobject) @@ -616,7 +616,7 @@ def get_calltip(self, pyobject, ignore_unknown=False, remove_self=False): def _get_class_docstring(self, pyclass): contents = self._trim_docstring(pyclass.get_doc(), 2) supers = [super.get_name() for super in pyclass.get_superclasses()] - doc = "class %s(%s):\n\n" % (pyclass.get_name(), ", ".join(supers)) + contents + doc = "class {}({}):\n\n".format(pyclass.get_name(), ", ".join(supers)) + contents if "__init__" in pyclass: init = pyclass["__init__"].get_object() @@ -660,7 +660,7 @@ def _get_function_signature(self, pyfunction, add_module=False): info = functionutils.DefinitionInfo.read(pyfunction) return location + info.to_string() else: - return "%s(%s)" % ( + return "{}({})".format( location + pyfunction.get_name(), ", ".join(pyfunction.get_param_names()), ) @@ -711,7 +711,7 @@ def _trim_docstring(self, docstring, indents=0): while trimmed and not trimmed[0]: trimmed.pop(0) # Return a single string: - return "\n".join((" " * indents + line for line in trimmed)) + return "\n".join(" " * indents + line for line in trimmed) # Deprecated classes @@ -722,11 +722,11 @@ def __init__(self, name, template): warnings.warn( "TemplateProposal is deprecated.", DeprecationWarning, stacklevel=2 ) - super(TemplateProposal, self).__init__(name, "template") + super().__init__(name, "template") self.template = template -class Template(object): +class Template: def __init__(self, template): self.template = template warnings.warn("Template is deprecated.", DeprecationWarning, stacklevel=2) diff --git a/rope/contrib/finderrors.py b/rope/contrib/finderrors.py index b1742d595..e85afbf14 100644 --- a/rope/contrib/finderrors.py +++ b/rope/contrib/finderrors.py @@ -37,7 +37,7 @@ def find_errors(project, resource): return finder.errors -class _BadAccessFinder(object): +class _BadAccessFinder: def __init__(self, pymodule): self.pymodule = pymodule self.scope = pymodule.get_scope() @@ -81,10 +81,10 @@ def _is_defined_after(self, scope, pyname, lineno): return True -class Error(object): +class Error: def __init__(self, lineno, error): self.lineno = lineno self.error = error def __str__(self): - return "%s: %s" % (self.lineno, self.error) + return "{}: {}".format(self.lineno, self.error) diff --git a/rope/contrib/findit.py b/rope/contrib/findit.py index f22c9d1ce..027248eb0 100644 --- a/rope/contrib/findit.py +++ b/rope/contrib/findit.py @@ -106,7 +106,7 @@ def check_offset(occurrence): return Location(occurrence) -class Location(object): +class Location: def __init__(self, occurrence): self.resource = occurrence.resource self.region = occurrence.get_word_range() diff --git a/rope/contrib/fixmodnames.py b/rope/contrib/fixmodnames.py index 6290472e2..3f4e4a9cc 100644 --- a/rope/contrib/fixmodnames.py +++ b/rope/contrib/fixmodnames.py @@ -20,7 +20,7 @@ from rope.refactor import rename -class FixModuleNames(object): +class FixModuleNames: def __init__(self, project): self.project = project diff --git a/rope/contrib/fixsyntax.py b/rope/contrib/fixsyntax.py index b7eaac7ab..1ef601e0d 100644 --- a/rope/contrib/fixsyntax.py +++ b/rope/contrib/fixsyntax.py @@ -7,7 +7,7 @@ from rope.base.codeanalyze import ArrayLinesAdapter, LogicalLineFinder -class FixSyntax(object): +class FixSyntax: def __init__(self, project, code, resource, maxfixes=1): self.project = project self.code = code @@ -33,14 +33,14 @@ def get_pymodule(self): ) except exceptions.ModuleSyntaxError as e: if msg is None: - msg = "%s:%s %s" % (e.filename, e.lineno, e.message_) + msg = "{}:{} {}".format(e.filename, e.lineno, e.message_) if tries < self.maxfixes: tries += 1 self.commenter.comment(e.lineno) code = "\n".join(self.commenter.lines) else: raise exceptions.ModuleSyntaxError( - e.filename, e.lineno, "Failed to fix error: {0}".format(msg) + e.filename, e.lineno, f"Failed to fix error: {msg}" ) @property @@ -73,7 +73,7 @@ def new_pyname(): return result -class _Commenter(object): +class _Commenter: def __init__(self, code): self.code = code self.lines = self.code.split("\n") diff --git a/rope/contrib/generate.py b/rope/contrib/generate.py index 0c225ee88..d8f41a80f 100644 --- a/rope/contrib/generate.py +++ b/rope/contrib/generate.py @@ -39,7 +39,7 @@ def create_package(project, name, sourcefolder=None): return made_packages -class _Generate(object): +class _Generate: def __init__(self, project, resource, offset, goal_resource=None): self.project = project self.resource = resource @@ -63,7 +63,7 @@ def _check_exceptional_conditions(self): def get_changes(self): changes = change.ChangeSet( - "Generate %s <%s>" % (self._get_element_kind(), self.name) + "Generate {} <{}>".format(self._get_element_kind(), self.name) ) indents = self.info.get_scope_indents() blanks = self.info.get_blank_lines() @@ -109,7 +109,7 @@ def _get_element(self): ): args.append("self") args.extend(self.info.get_passed_args()) - definition = "%sdef %s(%s):\n pass\n" % ( + definition = "{}def {}({}):\n pass\n".format( decorator, self.name, ", ".join(args), @@ -140,7 +140,7 @@ class GenerateModule(_Generate): def get_changes(self): package = self.info.get_package() changes = change.ChangeSet("Generate Module <%s>" % self.name) - new_resource = self.project.get_file("%s/%s.py" % (package.path, self.name)) + new_resource = self.project.get_file("{}/{}.py".format(package.path, self.name)) if new_resource.exists(): raise exceptions.RefactoringError( "Module <%s> already exists" % new_resource.path @@ -160,7 +160,7 @@ class GeneratePackage(_Generate): def get_changes(self): package = self.info.get_package() changes = change.ChangeSet("Generate Package <%s>" % self.name) - new_resource = self.project.get_folder("%s/%s" % (package.path, self.name)) + new_resource = self.project.get_folder("{}/{}".format(package.path, self.name)) if new_resource.exists(): raise exceptions.RefactoringError( "Package <%s> already exists" % new_resource.path @@ -198,7 +198,7 @@ def _add_relative_import_to_module(project, resource, imported, name): return change.ChangeContents(resource, module_imports.get_changed_source()) -class _GenerationInfo(object): +class _GenerationInfo: def __init__(self, pycore, resource, offset, goal_resource=None): self.pycore = pycore self.resource = resource diff --git a/rope/refactor/change_signature.py b/rope/refactor/change_signature.py index f4fdcb424..45dcbc92d 100644 --- a/rope/refactor/change_signature.py +++ b/rope/refactor/change_signature.py @@ -11,7 +11,7 @@ from rope.refactor import occurrences, functionutils -class ChangeSignature(object): +class ChangeSignature: def __init__(self, project, resource, offset): self.project = project self.resource = resource @@ -169,7 +169,7 @@ def get_changes( ) -class _FunctionChangers(object): +class _FunctionChangers: def __init__(self, pyfunction, definition_info, changers=None): self.pyfunction = pyfunction self.definition_info = definition_info @@ -203,7 +203,7 @@ def change_call(self, primary, pyname, call): return mapping.to_call_info(self.changed_definition_infos[-1]).to_string() -class _ArgumentChanger(object): +class _ArgumentChanger: def change_definition_info(self, definition_info): pass @@ -319,7 +319,7 @@ def change_definition_info(self, definition_info): definition_info.args_with_defaults = new_args -class _ChangeCallsInModule(object): +class _ChangeCallsInModule: def __init__(self, project, occurrence_finder, resource, call_changer): self.project = project self.occurrence_finder = occurrence_finder @@ -366,7 +366,7 @@ def lines(self): return self.pymodule.lines -class _MultipleFinders(object): +class _MultipleFinders: def __init__(self, finders): self.finders = finders diff --git a/rope/refactor/encapsulate_field.py b/rope/refactor/encapsulate_field.py index 5a3d42684..1d1587a24 100644 --- a/rope/refactor/encapsulate_field.py +++ b/rope/refactor/encapsulate_field.py @@ -9,7 +9,7 @@ from rope.refactor import sourceutils, occurrences -class EncapsulateField(object): +class EncapsulateField: def __init__(self, project, resource, offset): self.project = project self.name = worder.get_name_at(resource, offset) @@ -105,8 +105,8 @@ def _change_holding_module(self, changes, renamer, getter, setter): class_scope.get_start() ) indents = sourceutils.get_indent(self.project) * " " - getter = "def %s(self):\n%sreturn self.%s" % (getter, indents, self.name) - setter = "def %s(self, value):\n%sself.%s = value" % ( + getter = "def {}(self):\n{}return self.{}".format(getter, indents, self.name) + setter = "def {}(self, value):\n{}self.{} = value".format( setter, indents, self.name, @@ -115,7 +115,7 @@ def _change_holding_module(self, changes, renamer, getter, setter): return new_source -class GetterSetterRenameInModule(object): +class GetterSetterRenameInModule: def __init__(self, project, name, pyname, getter, setter): self.project = project self.name = name @@ -132,7 +132,7 @@ def get_changed_module( return change_finder.get_changed_module() -class _FindChangesForModule(object): +class _FindChangesForModule: def __init__(self, finder, resource, pymodule, skip_start, skip_end): self.project = finder.project self.finder = finder.finder diff --git a/rope/refactor/extract.py b/rope/refactor/extract.py index f48210461..595f6f6c1 100644 --- a/rope/refactor/extract.py +++ b/rope/refactor/extract.py @@ -34,7 +34,7 @@ # # There are a few more helper functions and classes used by above # classes. -class _ExtractRefactoring(object): +class _ExtractRefactoring: kind_prefixes = {} @@ -81,7 +81,7 @@ def get_changes(self, extracted_name, similar=False, global_=False, kind=None): ) info.kind = self._get_kind(kind) new_contents = _ExtractPerformer(info).extract() - changes = ChangeSet("Extract %s <%s>" % (info.kind, extracted_name)) + changes = ChangeSet("Extract {} <{}>".format(info.kind, extracted_name)) changes.add_change(ChangeContents(self.resource, new_contents)) return changes @@ -99,7 +99,7 @@ def _validate_kind_prefix(kind, selected_kind): @classmethod def _get_kind(cls, kind): - raise NotImplementedError("You have to sublass {}".format(cls)) + raise NotImplementedError(f"You have to sublass {cls}") class ExtractMethod(_ExtractRefactoring): @@ -116,7 +116,7 @@ class ExtractVariable(_ExtractRefactoring): def __init__(self, *args, **kwds): kwds = dict(kwds) kwds["variable"] = True - super(ExtractVariable, self).__init__(*args, **kwds) + super().__init__(*args, **kwds) kind = "variable" @@ -124,7 +124,7 @@ def _get_kind(cls, kind): return cls.kind -class _ExtractInfo(object): +class _ExtractInfo: """Holds information about the extract to be performed""" def __init__( @@ -252,7 +252,7 @@ def returning_named_expr(self): return self._returning_named_expr -class _ExtractCollector(object): +class _ExtractCollector: """Collects information needed for performing the extract""" def __init__(self, info): @@ -265,7 +265,7 @@ def __init__(self, info): self.definition_location = None -class _ExtractPerformer(object): +class _ExtractPerformer: def __init__(self, info): self.info = info _ExceptionalConditionChecker()(self.info) @@ -376,7 +376,7 @@ def _find_definition(self, collector): collector.checks = parts.get_checks() -class _DefinitionLocationFinder(object): +class _DefinitionLocationFinder: def __init__(self, info, matched_lines): self.info = info self.matched_lines = matched_lines @@ -420,7 +420,7 @@ def _get_after_scope(self): return self.info.scope.get_end() + 1 -class _ExceptionalConditionChecker(object): +class _ExceptionalConditionChecker: def __call__(self, info): self.base_conditions(info) if info.one_line: @@ -501,7 +501,7 @@ def _is_on_a_word(self, info, offset): return next.isalnum() or next == "_" -class _ExtractMethodParts(object): +class _ExtractMethodParts: def __init__(self, info): self.info = info self.info_collector = self._create_info_collector() @@ -746,7 +746,7 @@ def _get_globals_in_body(unindented_body): return visitor.globals_ -class _ExtractVariableParts(object): +class _ExtractVariableParts: def __init__(self, info): self.info = info @@ -765,7 +765,7 @@ def get_checks(self): return {} -class _FunctionInformationCollector(object): +class _FunctionInformationCollector: def __init__(self, start, end, is_global): self.start = start self.end = end @@ -947,7 +947,7 @@ def _get_argnames(arguments): return result -class _VariableReadsAndWritesFinder(object): +class _VariableReadsAndWritesFinder: def __init__(self): self.written = set() self.read = set() @@ -987,7 +987,7 @@ def find_reads_for_one_liners(code): return visitor.read -class _BaseErrorFinder(object): +class _BaseErrorFinder: @classmethod def has_errors(cls, code): if code.strip() == "": @@ -1055,7 +1055,7 @@ def _ClassDef(self, node): pass -class _GlobalFinder(object): +class _GlobalFinder: def __init__(self): self.globals_ = OrderedSet() diff --git a/rope/refactor/functionutils.py b/rope/refactor/functionutils.py index f17438943..640c946ba 100644 --- a/rope/refactor/functionutils.py +++ b/rope/refactor/functionutils.py @@ -4,7 +4,7 @@ from rope.base import worder -class DefinitionInfo(object): +class DefinitionInfo: def __init__( self, function_name, is_method, args_with_defaults, args_arg, keywords_arg ): @@ -15,13 +15,13 @@ def __init__( self.keywords_arg = keywords_arg def to_string(self): - return "%s(%s)" % (self.function_name, self.arguments_to_string()) + return "{}({})".format(self.function_name, self.arguments_to_string()) def arguments_to_string(self, from_index=0): params = [] for arg, default in self.args_with_defaults: if default is not None: - params.append("%s=%s" % (arg, default)) + params.append("{}={}".format(arg, default)) else: params.append(arg) if self.args_arg is not None: @@ -68,7 +68,7 @@ def read(pyfunction): return DefinitionInfo._read(pyfunction, call) -class CallInfo(object): +class CallInfo: def __init__( self, function_name, @@ -98,12 +98,12 @@ def to_string(self): if self.args[start:]: params.extend(self.args[start:]) if self.keywords: - params.extend(["%s=%s" % (name, value) for name, value in self.keywords]) + params.extend(["{}={}".format(name, value) for name, value in self.keywords]) if self.args_arg is not None: params.append("*" + self.args_arg) if self.keywords_arg: params.append("**" + self.keywords_arg) - return "%s(%s)" % (function, ", ".join(params)) + return "{}({})".format(function, ", ".join(params)) @staticmethod def read(primary, pyname, definition_info, code): @@ -163,7 +163,7 @@ def _is_classmethod(pyname): return False -class ArgumentMapping(object): +class ArgumentMapping: def __init__(self, definition_info, call_info): self.call_info = call_info self.param_dict = {} @@ -210,7 +210,7 @@ def to_call_info(self, definition_info): ) -class _FunctionParser(object): +class _FunctionParser: def __init__(self, call, implicit_arg, is_lambda=False): self.call = call self.implicit_arg = implicit_arg diff --git a/rope/refactor/importutils/__init__.py b/rope/refactor/importutils/__init__.py index 0638a4dba..fb7f362de 100644 --- a/rope/refactor/importutils/__init__.py +++ b/rope/refactor/importutils/__init__.py @@ -13,7 +13,7 @@ import rope.base.codeanalyze -class ImportOrganizer(object): +class ImportOrganizer: """Perform some import-related commands Each method returns a `rope.base.change.Change` object. @@ -70,7 +70,7 @@ def import_filter(import_stmt): return import_filter -class ImportTools(object): +class ImportTools: def __init__(self, project): self.project = project diff --git a/rope/refactor/importutils/actions.py b/rope/refactor/importutils/actions.py index 5414a06eb..d2e290d85 100644 --- a/rope/refactor/importutils/actions.py +++ b/rope/refactor/importutils/actions.py @@ -4,7 +4,7 @@ from rope.refactor.importutils import importinfo -class ImportInfoVisitor(object): +class ImportInfoVisitor: def dispatch(self, import_): try: method_name = "visit" + import_.import_info.__class__.__name__ diff --git a/rope/refactor/importutils/importinfo.py b/rope/refactor/importutils/importinfo.py index 6452b691c..12fb6eca9 100644 --- a/rope/refactor/importutils/importinfo.py +++ b/rope/refactor/importutils/importinfo.py @@ -1,4 +1,4 @@ -class ImportStatement(object): +class ImportStatement: """Represent an import in a module `readonly` attribute controls whether this import can be changed @@ -61,7 +61,7 @@ def accept(self, visitor): return visitor.dispatch(self) -class ImportInfo(object): +class ImportInfo: def get_imported_primaries(self, context): pass @@ -197,7 +197,7 @@ def get_imported_primaries(self, context): return [] -class ImportContext(object): +class ImportContext: def __init__(self, project, folder): self.project = project self.folder = folder diff --git a/rope/refactor/importutils/module_imports.py b/rope/refactor/importutils/module_imports.py index e4f7febed..818664a0a 100644 --- a/rope/refactor/importutils/module_imports.py +++ b/rope/refactor/importutils/module_imports.py @@ -6,7 +6,7 @@ from rope.refactor.importutils import importinfo -class ModuleImports(object): +class ModuleImports: def __init__(self, project, pymodule, import_filter=None): self.project = project self.pymodule = pymodule @@ -290,7 +290,7 @@ def _first_import_line(self): def _get_import_name(self, import_stmt): import_info = import_stmt.import_info if hasattr(import_info, "module_name"): - return "%s.%s" % ( + return "{}.{}".format( import_info.module_name, import_info.names_and_aliases[0][0], ) @@ -355,7 +355,7 @@ def _count_blank_lines(get_line, start, end, step=1): return count -class _OneTimeSelector(object): +class _OneTimeSelector: def __init__(self, names): self.names = names self.selected_names = set() @@ -379,7 +379,7 @@ def _can_name_be_added(self, imported_primary): return False -class _UnboundNameFinder(object): +class _UnboundNameFinder: def __init__(self, pyobject): self.pyobject = pyobject @@ -431,7 +431,7 @@ def add_unbound(self, name): class _GlobalUnboundNameFinder(_UnboundNameFinder): def __init__(self, pymodule, wanted_pyobject): - super(_GlobalUnboundNameFinder, self).__init__(pymodule) + super().__init__(pymodule) self.unbound = set() self.names = set() for name, pyname in pymodule._get_structural_attributes().items(): @@ -459,7 +459,7 @@ def _is_node_interesting(self, node): class _LocalUnboundNameFinder(_UnboundNameFinder): def __init__(self, pyobject, parent): - super(_LocalUnboundNameFinder, self).__init__(pyobject) + super().__init__(pyobject) self.parent = parent def _get_root(self): @@ -479,7 +479,7 @@ def add_unbound(self, name): self.parent.add_unbound(name) -class _GlobalImportFinder(object): +class _GlobalImportFinder: def __init__(self, pymodule): self.current_folder = None if pymodule.get_resource(): diff --git a/rope/refactor/inline.py b/rope/refactor/inline.py index d7f272eaf..a7bb612b4 100644 --- a/rope/refactor/inline.py +++ b/rope/refactor/inline.py @@ -74,7 +74,7 @@ def create_inline(project, resource, offset): raise rope.base.exceptions.RefactoringError(message) -class _Inliner(object): +class _Inliner: def __init__(self, project, resource, offset): self.project = project self.pyname = _get_pyname(project, resource, offset) @@ -93,7 +93,7 @@ def get_kind(self): class InlineMethod(_Inliner): def __init__(self, *args, **kwds): - super(InlineMethod, self).__init__(*args, **kwds) + super().__init__(*args, **kwds) self.pyfunction = self.pyname.get_object() self.pymodule = self.pyfunction.get_module() self.resource = self.pyfunction.get_module().get_resource() @@ -238,7 +238,7 @@ def get_kind(self): class InlineVariable(_Inliner): def __init__(self, *args, **kwds): - super(InlineVariable, self).__init__(*args, **kwds) + super().__init__(*args, **kwds) self.pymodule = self.pyname.get_definition_location()[0] self.resource = self.pymodule.get_resource() self._check_exceptional_conditions() @@ -327,7 +327,7 @@ def get_kind(self): class InlineParameter(_Inliner): def __init__(self, *args, **kwds): - super(InlineParameter, self).__init__(*args, **kwds) + super().__init__(*args, **kwds) resource, offset = self._function_location() index = self.pyname.index self.changers = [change_signature.ArgumentDefaultInliner(index)] @@ -366,7 +366,7 @@ def _join_lines(lines): return joined -class _DefinitionGenerator(object): +class _DefinitionGenerator: unique_prefix = unique_prefix() def __init__(self, project, pyfunction, body=None): @@ -518,7 +518,7 @@ def named_pattern(name, list_): return cls._return_pattern -class _InlineFunctionCallsForModuleHandle(object): +class _InlineFunctionCallsForModuleHandle: def __init__(self, project, resource, definition_generator, aim_offset=None): """Inlines occurrences diff --git a/rope/refactor/introduce_factory.py b/rope/refactor/introduce_factory.py index 58ff31435..5f936bf62 100644 --- a/rope/refactor/introduce_factory.py +++ b/rope/refactor/introduce_factory.py @@ -6,7 +6,7 @@ from rope.refactor import rename, occurrences, sourceutils, importutils -class IntroduceFactory(object): +class IntroduceFactory: def __init__(self, project, resource, offset): self.project = project self.offset = offset @@ -110,14 +110,14 @@ def _get_factory_method(self, lines, class_scope, factory_name, global_): raise rope.base.exceptions.RefactoringError( "Cannot make global factory method for nested classes." ) - return "\ndef %s(*args, **kwds):\n%sreturn %s(*args, **kwds)\n" % ( + return "\ndef {}(*args, **kwds):\n{}return {}(*args, **kwds)\n".format( factory_name, unit_indents, self.old_name, ) unindented_factory = ( "@staticmethod\ndef %s(*args, **kwds):\n" % factory_name - + "%sreturn %s(*args, **kwds)\n" % (unit_indents, self.old_name) + + "{}return {}(*args, **kwds)\n".format(unit_indents, self.old_name) ) indents = self._get_scope_indents(lines, class_scope) + sourceutils.get_indent( self.project diff --git a/rope/refactor/introduce_parameter.py b/rope/refactor/introduce_parameter.py index 464b7f51d..5f1446c40 100644 --- a/rope/refactor/introduce_parameter.py +++ b/rope/refactor/introduce_parameter.py @@ -3,7 +3,7 @@ from rope.refactor import functionutils, sourceutils, occurrences -class IntroduceParameter(object): +class IntroduceParameter: """Introduce parameter refactoring This refactoring adds a new parameter to a function and replaces diff --git a/rope/refactor/localtofield.py b/rope/refactor/localtofield.py index 15057e39a..d9f17267a 100644 --- a/rope/refactor/localtofield.py +++ b/rope/refactor/localtofield.py @@ -2,7 +2,7 @@ from rope.refactor.rename import Rename -class LocalToField(object): +class LocalToField: def __init__(self, project, resource, offset): self.project = project self.resource = resource diff --git a/rope/refactor/method_object.py b/rope/refactor/method_object.py index d65d3b135..7967f873f 100644 --- a/rope/refactor/method_object.py +++ b/rope/refactor/method_object.py @@ -5,7 +5,7 @@ from rope.refactor import sourceutils, occurrences, rename -class MethodObject(object): +class MethodObject: def __init__(self, project, resource, offset): self.project = project this_pymodule = self.project.get_pymodule(resource) @@ -23,7 +23,7 @@ def get_new_class(self, name): body = sourceutils.fix_indentation( self._get_body(), sourceutils.get_indent(self.project) * 2 ) - return "class %s(object):\n\n%s%sdef __call__(self):\n%s" % ( + return "class {}(object):\n\n{}{}def __call__(self):\n{}".format( name, self._get_init(), " " * sourceutils.get_indent(self.project), @@ -43,7 +43,7 @@ def get_changes(self, classname=None, new_class_name=None): indents = sourceutils.get_indents( self.pymodule.lines, self.pyfunction.get_scope().get_start() ) + sourceutils.get_indent(self.project) - new_contents = " " * indents + "return %s(%s)()\n" % ( + new_contents = " " * indents + "return {}({})()\n".format( classname, ", ".join(self._get_parameter_names()), ) @@ -88,9 +88,9 @@ def _get_init(self): if arg == "self": new_name = "host" header += ", %s" % new_name - body += indents * 2 + "self.%s = %s\n" % (arg, new_name) + body += indents * 2 + "self.{} = {}\n".format(arg, new_name) header += "):" - return "%s\n%s\n" % (header, body) + return "{}\n{}\n".format(header, body) def _get_parameter_names(self): return self.pyfunction.get_param_names() diff --git a/rope/refactor/move.py b/rope/refactor/move.py index 97494eab8..84fb3d3bf 100644 --- a/rope/refactor/move.py +++ b/rope/refactor/move.py @@ -53,7 +53,7 @@ def create_move(project, resource, offset=None): ) -class MoveMethod(object): +class MoveMethod: """For moving methods It makes a new method in the destination class and changes @@ -135,7 +135,7 @@ def _get_used_imports(self, import_tools): def _get_changes_made_by_old_class(self, dest_attr, new_name): pymodule = self.pyfunction.get_module() indents = self._get_scope_indents(self.pyfunction) - body = "return self.%s.%s(%s)\n" % ( + body = "return self.{}.{}({})\n".format( dest_attr, new_name, self._get_passed_arguments_string(), @@ -179,7 +179,7 @@ def _get_changes_made_by_new_class(self, dest_attr, new_name): return resource, start, end, body def get_new_method(self, name): - return "%s\n%s" % ( + return "{}\n{}".format( self._get_new_header(name), sourceutils.fix_indentation( self._get_body(), sourceutils.get_indent(self.project) @@ -228,7 +228,7 @@ def _is_host_used(self): return self._get_body("__old_self") != self._get_unchanged_body() -class MoveGlobal(object): +class MoveGlobal: """For moving global function and classes""" def __init__(self, project, resource, offset): @@ -465,7 +465,7 @@ def _add_imports2(self, pymodule, new_imports): return pymodule, True -class MoveModule(object): +class MoveModule: """For moving modules and packages""" def __init__(self, project, resource): @@ -644,7 +644,7 @@ def _handle_moving_in_from_import_stmt( return changed -class _ChangeMoveOccurrencesHandle(object): +class _ChangeMoveOccurrencesHandle: def __init__(self, new_name): self.new_name = new_name self.occurred = False @@ -658,7 +658,7 @@ def occurred_outside_skip(self, change_collector, occurrence): self.occurred = True -class _MoveTools(object): +class _MoveTools: def __init__(self, project, source, pyname, old_name): self.project = project self.source = source @@ -670,7 +670,7 @@ def remove_old_imports(self, pymodule): old_source = pymodule.source_code module_with_imports = self.import_tools.module_imports(pymodule) - class CanSelect(object): + class CanSelect: changed = False old_name = self.old_name old_pyname = self.old_pyname @@ -792,7 +792,7 @@ def moving_code_with_imports(project, resource, source): return moving, imports -class ModuleSkipRenamerHandle(object): +class ModuleSkipRenamerHandle: def occurred_outside_skip(self, change_collector, occurrence): pass @@ -800,7 +800,7 @@ def occurred_inside_skip(self, change_collector, occurrence): pass -class ModuleSkipRenamer(object): +class ModuleSkipRenamer: """Rename occurrences in a module This class can be used when you want to treat a region in a file diff --git a/rope/refactor/multiproject.py b/rope/refactor/multiproject.py index 0be744eab..a13625dfa 100644 --- a/rope/refactor/multiproject.py +++ b/rope/refactor/multiproject.py @@ -8,7 +8,7 @@ from rope.base import resources, libutils -class MultiProjectRefactoring(object): +class MultiProjectRefactoring: def __init__(self, refactoring, projects, addpath=True): """Create a multiproject proxy for the main refactoring @@ -26,7 +26,7 @@ def __call__(self, project, *args, **kwds): ) -class _MultiRefactoring(object): +class _MultiRefactoring: def __init__(self, refactoring, other_projects, addpath, project, *args, **kwds): self.refactoring = refactoring self.projects = [project] + other_projects @@ -51,10 +51,10 @@ def __getattr__(self, name): def _resources_for_args(self, project, args, kwds): newargs = [self._change_project_resource(project, arg) for arg in args] - newkwds = dict( - (name, self._change_project_resource(project, value)) + newkwds = { + name: self._change_project_resource(project, value) for name, value in kwds.items() - ) + } return newargs, newkwds def _change_project_resource(self, project, obj): diff --git a/rope/refactor/occurrences.py b/rope/refactor/occurrences.py index e61819169..de71cb628 100644 --- a/rope/refactor/occurrences.py +++ b/rope/refactor/occurrences.py @@ -47,7 +47,7 @@ from rope.base import worder -class Finder(object): +class Finder: """For finding occurrences of a name The constructor takes a `filters` argument. It should be a list @@ -104,7 +104,7 @@ def create_finder( considered. """ - pynames_ = set([pyname]) + pynames_ = {pyname} filters = [] if only_calls: filters.append(CallsFilter()) @@ -127,7 +127,7 @@ def create_finder( return Finder(project, name, filters=filters, docs=docs) -class Occurrence(object): +class Occurrence: def __init__(self, tools, offset): self.tools = tools self.offset = offset @@ -214,7 +214,7 @@ def unsure_pyname(pyname, unbound=True): return True -class PyNameFilter(object): +class PyNameFilter: """For finding occurrences of a name.""" def __init__(self, pyname): @@ -225,7 +225,7 @@ def __call__(self, occurrence): return True -class InHierarchyFilter(object): +class InHierarchyFilter: """Finds the occurrence if the name is in the class's hierarchy.""" def __init__(self, pyname, implementations_only=False): @@ -256,17 +256,17 @@ def _get_containing_class(self, pyname): def _get_root_classes(self, pyclass, name): if self.impl_only and pyclass == self.pyclass: - return set([pyclass]) + return {pyclass} result = set() for superclass in pyclass.get_superclasses(): if name in superclass: result.update(self._get_root_classes(superclass, name)) if not result: - return set([pyclass]) + return {pyclass} return result -class UnsureFilter(object): +class UnsureFilter: """Occurrences where we don't knoow what the name references.""" def __init__(self, unsure): @@ -277,7 +277,7 @@ def __call__(self, occurrence): return True -class NoImportsFilter(object): +class NoImportsFilter: """Don't include import statements as occurrences.""" def __call__(self, occurrence): @@ -285,7 +285,7 @@ def __call__(self, occurrence): return False -class CallsFilter(object): +class CallsFilter: """Filter out non-call occurrences.""" def __call__(self, occurrence): @@ -293,7 +293,7 @@ def __call__(self, occurrence): return False -class NoKeywordsFilter(object): +class NoKeywordsFilter: """Filter out keyword parameters.""" def __call__(self, occurrence): @@ -301,7 +301,7 @@ def __call__(self, occurrence): return False -class _TextualFinder(object): +class _TextualFinder: def __init__(self, name, docs=False): self.name = name self.docs = docs @@ -321,8 +321,7 @@ def find_offsets(self, source): searcher = self._normal_search else: searcher = self._re_search - for matched in searcher(source): - yield matched + yield from searcher(source) def _re_search(self, source): for match in self.pattern.finditer(source): @@ -386,7 +385,7 @@ def any(name, list_): return "(?P<%s>" % name + "|".join(list_) + ")" -class _OccurrenceToolsCreator(object): +class _OccurrenceToolsCreator: def __init__(self, project, resource=None, pymodule=None, docs=False): self.project = project self.__resource = resource diff --git a/rope/refactor/patchedast.py b/rope/refactor/patchedast.py index 147cd308e..8820af917 100644 --- a/rope/refactor/patchedast.py +++ b/rope/refactor/patchedast.py @@ -69,7 +69,7 @@ class MismatchedTokenError(exceptions.RopeError): pass -class _PatchingASTWalker(object): +class _PatchingASTWalker: def __init__(self, source, children=False): self.source = _Source(source) self.children = children @@ -956,7 +956,7 @@ def _MatchValue(self, node): self._handle(node, [node.value]) -class _Source(object): +class _Source: def __init__(self, source): self.source = source self.offset = 0 @@ -971,7 +971,7 @@ def consume(self, token, skip_comment=True): self._skip_comment() except (ValueError, TypeError) as e: raise MismatchedTokenError( - "Token <%s> at %s cannot be matched" % (token, self._get_location()) + "Token <{}> at {} cannot be matched".format(token, self._get_location()) ) self.offset = new_offset + len(token) return (new_offset, self.offset) @@ -985,8 +985,8 @@ def consume_string(self, end=None): if _Source._string_pattern is None: string_pattern = codeanalyze.get_string_pattern() formatted_string_pattern = codeanalyze.get_formatted_string_pattern() - original = r"(?:%s)|(?:%s)" % (string_pattern, formatted_string_pattern) - pattern = r"(%s)((\s|\\\n|#[^\n]*\n)*(%s))*" % (original, original) + original = r"(?:{})|(?:{})".format(string_pattern, formatted_string_pattern) + pattern = r"({})((\s|\\\n|#[^\n]*\n)*({}))*".format(original, original) _Source._string_pattern = re.compile(pattern) repattern = _Source._string_pattern return self._consume_pattern(repattern, end) diff --git a/rope/refactor/rename.py b/rope/refactor/rename.py index 61638c3ad..31ae3827e 100644 --- a/rope/refactor/rename.py +++ b/rope/refactor/rename.py @@ -14,7 +14,7 @@ from rope.refactor import occurrences -class Rename(object): +class Rename: """A class for performing rename refactoring It can rename everything: classes, functions, modules, packages, @@ -105,7 +105,7 @@ def unsure_func(value=unsure): resources = [self.resource] if resources is None: resources = self.project.get_python_files() - changes = ChangeSet("Renaming <%s> to <%s>" % (self.old_name, new_name)) + changes = ChangeSet("Renaming <{}> to <{}>".format(self.old_name, new_name)) finder = occurrences.create_finder( self.project, self.old_name, @@ -161,7 +161,7 @@ def _rename_module(self, resource, new_name, changes): changes.add_change(MoveResource(resource, new_location)) -class ChangeOccurrences(object): +class ChangeOccurrences: """A class for changing the occurrences of a name in a scope This class replaces the occurrences of a name. Note that it only @@ -192,7 +192,7 @@ def _get_scope_offset(self): def get_changes(self, new_name, only_calls=False, reads=True, writes=True): changes = ChangeSet( - "Changing <%s> occurrences to <%s>" % (self.old_name, new_name) + "Changing <{}> occurrences to <{}>".format(self.old_name, new_name) ) scope_start, scope_end = self._get_scope_offset() finder = occurrences.create_finder( diff --git a/rope/refactor/restructure.py b/rope/refactor/restructure.py index e65a9b464..d4d07dd74 100644 --- a/rope/refactor/restructure.py +++ b/rope/refactor/restructure.py @@ -6,7 +6,7 @@ from rope.refactor.importutils import module_imports -class Restructure(object): +class Restructure: """A class to perform python restructurings A restructuring transforms pieces of code matching `pattern` to @@ -137,7 +137,7 @@ def get_changes( ) self.imports = imports changes = change.ChangeSet( - "Restructuring <%s> to <%s>" % (self.pattern, self.goal) + "Restructuring <{}> to <{}>".format(self.pattern, self.goal) ) if resources is not None: files = [ @@ -206,7 +206,7 @@ def _evaluate(self, code, is_pyname=True): pyname = None if attributes[0] in ("__builtin__", "__builtins__"): - class _BuiltinsStub(object): + class _BuiltinsStub: def get_attribute(self, name): return builtins.builtins[name] @@ -235,7 +235,7 @@ def replace(code, pattern, goal): return result -class _ChangeComputer(object): +class _ChangeComputer: def __init__(self, code, ast, lines, goal, matches): self.source = code self.goal = goal diff --git a/rope/refactor/similarfinder.py b/rope/refactor/similarfinder.py index 302fcd927..5bc042587 100644 --- a/rope/refactor/similarfinder.py +++ b/rope/refactor/similarfinder.py @@ -13,7 +13,7 @@ class BadNameInCheckError(exceptions.RefactoringError): pass -class SimilarFinder(object): +class SimilarFinder: """`SimilarFinder` can be used to find similar pieces of code See the notes in the `rope.refactor.restructure` module for more @@ -66,7 +66,7 @@ def _does_match(self, node, name): return self.wildcards[kind].matches(suspect, arg) -class RawSimilarFinder(object): +class RawSimilarFinder: """A class for finding similar expressions and statements""" def __init__(self, source, node=None, does_match=None): @@ -138,7 +138,7 @@ def _replace_wildcards(self, expression): return template.substitute(mapping) -class _ASTMatcher(object): +class _ASTMatcher: def __init__(self, body, pattern, does_match): """Searches the given pattern in the body AST. @@ -233,7 +233,7 @@ def _match_wildcard(self, node1, node2, mapping): return self._match_nodes(mapping[name], node2, {}) -class Match(object): +class Match: def __init__(self, mapping): self.mapping = mapping @@ -247,7 +247,7 @@ def get_ast(self, name): class ExpressionMatch(Match): def __init__(self, ast, mapping): - super(ExpressionMatch, self).__init__(mapping) + super().__init__(mapping) self.ast = ast def get_region(self): @@ -256,14 +256,14 @@ def get_region(self): class StatementMatch(Match): def __init__(self, ast_list, mapping): - super(StatementMatch, self).__init__(mapping) + super().__init__(mapping) self.ast_list = ast_list def get_region(self): return self.ast_list[0].region[0], self.ast_list[-1].region[1] -class CodeTemplate(object): +class CodeTemplate: def __init__(self, template): self.template = template self._find_names() @@ -307,7 +307,7 @@ def _get_pattern(cls): return cls._match_pattern -class _RopeVariable(object): +class _RopeVariable: """Transform and identify rope inserted wildcards""" _normal_prefix = "__rope__variable_normal_" diff --git a/rope/refactor/suites.py b/rope/refactor/suites.py index cf8c12635..31b6b16cf 100644 --- a/rope/refactor/suites.py +++ b/rope/refactor/suites.py @@ -52,7 +52,7 @@ def ast_suite_tree(node): return Suite(node.body, lineno) -class Suite(object): +class Suite: def __init__(self, child_nodes, lineno, parent=None, ignored=False): self.parent = parent self.lineno = lineno @@ -99,7 +99,7 @@ def _get_level(self): return self.parent._get_level() + 1 -class _SuiteWalker(object): +class _SuiteWalker: def __init__(self, suite): self.suite = suite self.suites = [] diff --git a/rope/refactor/topackage.py b/rope/refactor/topackage.py index 54efee48c..1ef1ad372 100644 --- a/rope/refactor/topackage.py +++ b/rope/refactor/topackage.py @@ -2,7 +2,7 @@ from rope.base.change import ChangeSet, ChangeContents, MoveResource, CreateFolder -class ModuleToPackage(object): +class ModuleToPackage: def __init__(self, project, resource): self.project = project self.resource = resource diff --git a/rope/refactor/usefunction.py b/rope/refactor/usefunction.py index b54661124..e17130227 100644 --- a/rope/refactor/usefunction.py +++ b/rope/refactor/usefunction.py @@ -3,7 +3,7 @@ from rope.refactor import restructure, sourceutils, similarfinder -class UseFunction(object): +class UseFunction: """Try to use a function wherever possible""" def __init__(self, project, resource, offset): @@ -90,7 +90,7 @@ def _make_pattern(self): if self._is_expression(): replacement = "${%s}" % self._rope_returned else: - replacement = "%s = ${%s}" % (self._rope_result, self._rope_returned) + replacement = "{} = ${{{}}}".format(self._rope_result, self._rope_returned) body = restructure.replace( body, "return ${%s}" % self._rope_returned, replacement ) @@ -105,9 +105,9 @@ def _make_goal(self, import_=False): function_name = self.pyfunction.get_name() if import_: function_name = self._module_name() + "." + function_name - goal = "%s(%s)" % (function_name, ", ".join(("${%s}" % p) for p in params)) + goal = "{}({})".format(function_name, ", ".join(("${%s}" % p) for p in params)) if self._does_return() and not self._is_expression(): - goal = "${%s} = %s" % (self._rope_result, goal) + goal = "${{{}}} = {}".format(self._rope_result, goal) return goal def _does_return(self): @@ -165,7 +165,7 @@ def _named_expr_count(node): return visitor.named_expression -class _ReturnOrYieldFinder(object): +class _ReturnOrYieldFinder: def __init__(self): self.returns = 0 self.named_expression = 0 diff --git a/rope/refactor/wildcards.py b/rope/refactor/wildcards.py index 09fa04ebd..5d7260dfc 100644 --- a/rope/refactor/wildcards.py +++ b/rope/refactor/wildcards.py @@ -2,7 +2,7 @@ from rope.refactor import patchedast, occurrences -class Wildcard(object): +class Wildcard: def get_name(self): """Return the name of this wildcard""" @@ -10,14 +10,14 @@ def matches(self, suspect, arg): """Return `True` if `suspect` matches this wildcard""" -class Suspect(object): +class Suspect: def __init__(self, pymodule, node, name): self.name = name self.pymodule = pymodule self.node = node -class DefaultWildcard(object): +class DefaultWildcard: """The default restructuring wildcard The argument passed to this wildcard is in the @@ -85,7 +85,7 @@ def parse_arg(arg): return result -class _CheckObject(object): +class _CheckObject: def __init__(self, project, expected, kind="object", unsure=False): self.project = project self.kind = kind @@ -154,7 +154,7 @@ def _evaluate(self, code): pyname = None if attributes[0] in ("__builtin__", "__builtins__"): - class _BuiltinsStub(object): + class _BuiltinsStub: def get_attribute(self, name): return builtins.builtins[name]