diff --git a/rope/base/arguments.py b/rope/base/arguments.py index 342e2ae5e..7ba436406 100644 --- a/rope/base/arguments.py +++ b/rope/base/arguments.py @@ -72,6 +72,8 @@ def get_pynames(self, parameters): def get_instance_pyname(self): return self.pynames[0] + + class MixedArguments(object): def __init__(self, pyname, arguments, scope): diff --git a/rope/base/builtins.py b/rope/base/builtins.py index 78e7afb08..5bb848598 100644 --- a/rope/base/builtins.py +++ b/rope/base/builtins.py @@ -149,8 +149,10 @@ def _get_builtin(*args): return cls._generated[args] return _get_builtin + def _create_builtin_getter(cls): type_getter = _create_builtin_type_getter(cls) + def _get_builtin(*args): return pyobjects.PyObject(type_getter(*args)) return _get_builtin @@ -233,7 +235,7 @@ def __call__(self, name, returned=None, function=None, except AttributeError: if check_existence: raise - builtin=None + builtin = None self.attributes[name] = BuiltinName( BuiltinFunction(returned=returned, function=function, argnames=argnames, builtin=builtin)) @@ -252,7 +254,8 @@ def __init__(self, holding=None): collector('__new__', function=self._new_list) # Adding methods - collector('append', function=self._list_add, argnames=['self', 'value']) + collector('append', function=self._list_add, + argnames=['self', 'value']) collector('__setitem__', function=self._list_add, argnames=['self', 'index', 'value']) collector('insert', function=self._list_add, @@ -306,7 +309,6 @@ class Dict(BuiltinClass): def __init__(self, keys=None, values=None): self.keys = keys self.values = values - item = get_tuple(self.keys, self.values) collector = _AttributeCollector(dict) collector('__new__', function=self._new_dict) collector('__setitem__', function=self._dict_add) @@ -327,7 +329,8 @@ def do_create(holding=None): if holding is None: return get_dict() type = holding.get_type() - if isinstance(type, Tuple) and len(type.get_holding_objects()) == 2: + if isinstance(type, Tuple) and \ + len(type.get_holding_objects()) == 2: return get_dict(*type.get_holding_objects()) return _create_builtin(args, do_create) @@ -384,7 +387,7 @@ def _self_set(self, context): if new_dict and isinstance(new_dict.get_object().get_type(), Dict): args = arguments.ObjectArguments([new_dict]) items = new_dict.get_object()['popitem'].\ - get_object().get_returned_object(args) + get_object().get_returned_object(args) context.save_per_name(items) else: holding = _infer_sequence_for_pyname(new_dict) @@ -405,7 +408,8 @@ def __init__(self, *objects): first = objects[0] attributes = { '__getitem__': BuiltinName(BuiltinFunction(first)), - '__getslice__': BuiltinName(BuiltinFunction(pyobjects.PyObject(self))), + '__getslice__': + BuiltinName(BuiltinFunction(pyobjects.PyObject(self))), '__new__': BuiltinName(BuiltinFunction(function=self._new_tuple)), '__iter__': BuiltinName(BuiltinFunction(get_iterator(first)))} super(Tuple, self).__init__(tuple, attributes) @@ -485,8 +489,9 @@ def __init__(self): self_methods = ['__getitem__', '__getslice__', 'capitalize', 'center', 'decode', 'encode', 'expandtabs', 'join', 'ljust', - 'lower', 'lstrip', 'replace', 'rjust', 'rstrip', 'strip', - 'swapcase', 'title', 'translate', 'upper', 'zfill'] + 'lower', 'lstrip', 'replace', 'rjust', 'rstrip', + 'strip', 'swapcase', 'title', 'translate', 'upper', + 'zfill'] for method in self_methods: collector(method, self_object) @@ -514,6 +519,7 @@ def get_object(self): def get_definition_location(self): return (None, None) + class Iterator(pyobjects.AbstractClass): def __init__(self, holding=None): @@ -539,7 +545,8 @@ def __init__(self, holding=None): self.holding = holding self.attributes = { 'next': BuiltinName(BuiltinFunction(self.holding)), - '__iter__': BuiltinName(BuiltinFunction(get_iterator(self.holding))), + '__iter__': BuiltinName(BuiltinFunction( + get_iterator(self.holding))), 'close': BuiltinName(BuiltinFunction()), 'send': BuiltinName(BuiltinFunction()), 'throw': BuiltinName(BuiltinFunction())} @@ -556,10 +563,10 @@ def get_returned_object(self, args): class File(BuiltinClass): def __init__(self): - self_object = pyobjects.PyObject(self) str_object = get_str() str_list = get_list(get_str()) attributes = {} + def add(name, returned=None, function=None): builtin = getattr(file, name, None) attributes[name] = BuiltinName( @@ -587,7 +594,8 @@ def __init__(self, fget=None, fset=None, fdel=None, fdoc=None): 'fget': BuiltinName(BuiltinFunction()), 'fset': BuiltinName(pynames.UnboundName()), 'fdel': BuiltinName(pynames.UnboundName()), - '__new__': BuiltinName(BuiltinFunction(function=_property_function))} + '__new__': BuiltinName( + BuiltinFunction(function=_property_function))} super(Property, self).__init__(property, attributes) def get_property_object(self, args): @@ -631,7 +639,7 @@ def get_attributes(self): return {} def get_name(self): - return 'lambda' + return 'lambda' def get_param_names(self, special_args=True): result = [node.id for node in self.arguments.args @@ -671,7 +679,7 @@ def _infer_sequence_for_pyname(pyname): iter = obj.get_returned_object(args) if iter is not None and 'next' in iter: holding = iter['next'].get_object().\ - get_returned_object(args) + get_returned_object(args) return holding @@ -690,12 +698,15 @@ def _create_builtin(args, creator): def _range_function(args): return get_list() + def _reversed_function(args): return _create_builtin(args, get_iterator) + def _sorted_function(args): return _create_builtin(args, get_list) + def _super_function(args): passed_class, passed_self = args.get_arguments(['type', 'self']) if passed_self is None: @@ -709,6 +720,7 @@ def _super_function(args): return pyobjects.PyObject(supers[0]) return passed_self + def _zip_function(args): args = args.get_pynames(['sequence']) objects = [] @@ -721,6 +733,7 @@ def _zip_function(args): tuple = get_tuple(*objects) return get_list(tuple) + def _enumerate_function(args): passed = args.get_pynames(['sequence'])[0] if passed is None: @@ -730,6 +743,7 @@ def _enumerate_function(args): tuple = get_tuple(None, holding) return get_iterator(tuple) + def _iter_function(args): passed = args.get_pynames(['sequence'])[0] if passed is None: @@ -738,6 +752,7 @@ def _iter_function(args): holding = _infer_sequence_for_pyname(passed) return get_iterator(holding) + def _input_function(args): return get_str() @@ -751,17 +766,25 @@ def _input_function(args): 'file': BuiltinName(get_file_type()), 'open': BuiltinName(get_file_type()), 'unicode': BuiltinName(get_str_type()), - 'range': BuiltinName(BuiltinFunction(function=_range_function, builtin=range)), - 'reversed': BuiltinName(BuiltinFunction(function=_reversed_function, builtin=reversed)), - 'sorted': BuiltinName(BuiltinFunction(function=_sorted_function, builtin=sorted)), - 'super': BuiltinName(BuiltinFunction(function=_super_function, builtin=super)), - 'property': BuiltinName(BuiltinFunction(function=_property_function, builtin=property)), + 'range': BuiltinName(BuiltinFunction(function=_range_function, + builtin=range)), + 'reversed': BuiltinName(BuiltinFunction(function=_reversed_function, + builtin=reversed)), + 'sorted': BuiltinName(BuiltinFunction(function=_sorted_function, + builtin=sorted)), + 'super': BuiltinName(BuiltinFunction(function=_super_function, + builtin=super)), + 'property': BuiltinName(BuiltinFunction(function=_property_function, + builtin=property)), 'zip': BuiltinName(BuiltinFunction(function=_zip_function, builtin=zip)), - 'enumerate': BuiltinName(BuiltinFunction(function=_enumerate_function, builtin=enumerate)), + 'enumerate': BuiltinName(BuiltinFunction(function=_enumerate_function, + builtin=enumerate)), 'object': BuiltinName(BuiltinObject()), 'type': BuiltinName(BuiltinType()), - 'iter': BuiltinName(BuiltinFunction(function=_iter_function, builtin=iter)), - 'raw_input': BuiltinName(BuiltinFunction(function=_input_function, builtin=raw_input)), - } + 'iter': BuiltinName(BuiltinFunction(function=_iter_function, + builtin=iter)), + 'raw_input': BuiltinName(BuiltinFunction(function=_input_function, + builtin=raw_input)), +} builtins = BuiltinModule('__builtin__', initial=_initial_builtins) diff --git a/rope/base/change.py b/rope/base/change.py index 8d19aac1b..e97644846 100644 --- a/rope/base/change.py +++ b/rope/base/change.py @@ -2,7 +2,6 @@ import difflib import os import time -import warnings import rope.base.fscommands from rope.base import taskhandle, exceptions, utils @@ -17,13 +16,13 @@ class Change(object): def do(self, job_set=None): """Perform the change - + .. note:: Do use this directly. Use `Project.do()` instead. """ def undo(self, job_set=None): """Perform the change - + .. note:: Do use this directly. Use `History.undo()` instead. """ @@ -97,7 +96,8 @@ def __str__(self): date = datetime.datetime.fromtimestamp(self.time) if date.date() == datetime.date.today(): string_date = 'today' - elif date.date() == (datetime.date.today() - datetime.timedelta(1)): + elif date.date() == (datetime.date.today() - + datetime.timedelta(1)): string_date = 'yesterday' elif date.year == datetime.date.today().year: string_date = date.strftime('%b %d') @@ -257,7 +257,8 @@ class CreateFolder(CreateResource): """ def __init__(self, parent, name): - resource = parent.project.get_folder(self._get_child_path(parent, name)) + resource = parent.project.get_folder( + self._get_child_path(parent, name)) super(CreateFolder, self).__init__(resource) @@ -309,6 +310,7 @@ def count_changes(change): return result return 1 + def create_job_set(task_handle, change): return task_handle.create_jobset(str(change), count_changes(change)) diff --git a/rope/base/codeanalyze.py b/rope/base/codeanalyze.py index 3d2a2a45c..5dbfbb10e 100644 --- a/rope/base/codeanalyze.py +++ b/rope/base/codeanalyze.py @@ -18,6 +18,7 @@ def add_change(self, start, end, new_text=None): def get_changed(self): if not self.changes: return None + def compare_changes(change1, change2): return cmp(change1[:2], change2[:2]) self.changes.sort(compare_changes) @@ -131,6 +132,7 @@ def __call__(self): return result _main_chars = re.compile(r'[\'|"|#|\\|\[|\]|\{|\}|\(|\)]') + def _analyze_line(self, line): char = None for match in self._main_chars.finditer(line): @@ -142,8 +144,8 @@ def _analyze_line(self, line): if char * 3 == line[i:i + 3]: self.in_string = char * 3 elif self.in_string == line[i:i + len(self.in_string)] and \ - not (i > 0 and line[i - 1] == '\\' and - not (i > 1 and line[i - 2] == '\\')): + not (i > 0 and line[i - 1] == '\\' and + not (i > 1 and line[i - 2] == '\\')): self.in_string = '' if self.in_string: continue @@ -158,6 +160,7 @@ def _analyze_line(self, line): else: self.continuation = False + def custom_generator(lines): return _CustomGenerator(lines)() @@ -189,7 +192,6 @@ def generate_regions(self, start_line=1, end_line=None): # XXX: `block_start` should be at a better position! block_start = 1 readline = LinesToReadline(self.lines, block_start) - shifted = start_line - block_start + 1 try: for start, end in self._logical_lines(readline): real_start = start + block_start - 1 @@ -199,7 +201,7 @@ def generate_regions(self, start_line=1, end_line=None): real_end = end + block_start - 1 if real_start >= start_line: yield (real_start, real_end) - except tokenize.TokenError, e: + except tokenize.TokenError: pass def _block_logical_line(self, block_start, line_number): @@ -254,6 +256,7 @@ def __init__(self, lines, generate=custom_generator): self._generate = generate _starts = None + @property def starts(self): if self._starts is None: @@ -261,6 +264,7 @@ def starts(self): return self._starts _ends = None + @property def ends(self): if self._ends is None: @@ -326,6 +330,7 @@ def get_block_start(lines, lineno, maximum_indents=80): _block_start_pattern = None + def get_block_start_patterns(): global _block_start_pattern if not _block_start_pattern: @@ -354,5 +359,6 @@ def get_string_pattern(): return '|'.join([longstr, longstr.replace('"', "'"), shortstr, shortstr.replace('"', "'")]) + def get_comment_pattern(): return r'#[^\n]*' diff --git a/rope/base/evaluate.py b/rope/base/evaluate.py index 6736b2a90..faf094075 100644 --- a/rope/base/evaluate.py +++ b/rope/base/evaluate.py @@ -6,6 +6,7 @@ BadIdentifierError = exceptions.BadIdentifierError + def eval_location(pymodule, offset): """Find the pyname at the offset""" return eval_location2(pymodule, offset)[1] @@ -40,7 +41,8 @@ def eval_str2(holding_scope, name): # parenthesizing for handling cases like 'a_var.\nattr' node = ast.parse('(%s)' % name) except SyntaxError: - raise BadIdentifierError('Not a resolvable python identifier selected.') + raise BadIdentifierError( + 'Not a resolvable python identifier selected.') return eval_node2(holding_scope, node) @@ -81,7 +83,8 @@ def get_primary_and_pyname_at(self, offset): keyword_name = self.worder.get_word_at(offset) pyobject = self.get_enclosing_function(offset) if isinstance(pyobject, pyobjects.PyFunction): - return (None, pyobject.get_parameters().get(keyword_name, None)) + return (None, + pyobject.get_parameters().get(keyword_name, None)) # class body if self._is_defined_in_class_body(holding_scope, offset, lineno): class_scope = holding_scope @@ -93,7 +96,8 @@ def get_primary_and_pyname_at(self, offset): except rope.base.exceptions.AttributeNotFoundError: return (None, None) # function header - if self._is_function_name_in_function_header(holding_scope, offset, lineno): + if self._is_function_name_in_function_header(holding_scope, + offset, lineno): name = self.worder.get_primary_at(offset).strip() return (None, holding_scope.parent[name]) # from statement module @@ -118,7 +122,7 @@ def get_enclosing_function(self, offset): if isinstance(pyobject, pyobjects.AbstractFunction): return pyobject elif isinstance(pyobject, pyobjects.AbstractClass) and \ - '__init__' in pyobject: + '__init__' in pyobject: return pyobject['__init__'].get_object() elif '__call__' in pyobject: return pyobject['__call__'].get_object() @@ -157,6 +161,7 @@ def _Call(self, node): primary, pyobject = self._get_primary_and_object_for_node(node.func) if pyobject is None: return + def _get_returned(pyobject): args = arguments.create_arguments(primary, pyobject, node, self.scope) @@ -295,7 +300,8 @@ def _call_function(self, node, function_name, other_args=None): return if function_name in pyobject: called = pyobject[function_name].get_object() - if not called or not isinstance(called, pyobjects.AbstractFunction): + if not called or \ + not isinstance(called, pyobjects.AbstractFunction): return args = [node] if other_args: diff --git a/rope/base/fscommands.py b/rope/base/fscommands.py index 3bc22044a..daf118a04 100644 --- a/rope/base/fscommands.py +++ b/rope/base/fscommands.py @@ -199,12 +199,14 @@ def unicode_to_file_data(contents, encoding=None): except UnicodeEncodeError: return contents.encode('utf-8') + def file_data_to_unicode(data, encoding=None): result = _decode_data(data, encoding) if '\r' in result: result = result.replace('\r\n', '\n').replace('\r', '\n') return result + def _decode_data(data, encoding): if isinstance(data, unicode): return data @@ -227,7 +229,6 @@ def read_file_coding(path): file = open(path, 'b') count = 0 result = [] - buffsize = 10 while True: current = file.read(10) if not current: diff --git a/rope/base/libutils.py b/rope/base/libutils.py index cb9381e31..6e06ab617 100644 --- a/rope/base/libutils.py +++ b/rope/base/libutils.py @@ -29,13 +29,15 @@ def path_to_resource(project, path, type=None): return project.get_folder(project_path) return None + def relative(root, path): root = rope.base.project._realpath(root).replace(os.path.sep, '/') path = rope.base.project._realpath(path).replace(os.path.sep, '/') if path == root: - return '' + return '' if path.startswith(root + '/'): - return path[len(root) + 1:] + return path[len(root) + 1:] + def report_change(project, path, old_content): """Report that the contents of file at `path` was changed @@ -52,6 +54,7 @@ def report_change(project, path, old_content): rope.base.pycore.perform_soa_on_changed_scopes(project, resource, old_content) + def analyze_modules(project, task_handle=taskhandle.NullTaskHandle()): """Perform static object analysis on all python files in the project diff --git a/rope/base/oi/doa.py b/rope/base/oi/doa.py index 12f505534..e89ab9d3b 100644 --- a/rope/base/oi/doa.py +++ b/rope/base/oi/doa.py @@ -26,7 +26,7 @@ def run(self): env = dict(os.environ) file_path = self.file.real_path path_folders = self.pycore.get_source_folders() + \ - self.pycore.get_python_path_folders() + self.pycore.get_python_path_folders() env['PYTHONPATH'] = os.pathsep.join(folder.real_path for folder in path_folders) runmod_path = self.pycore.find_module('rope.base.oi.runmod').real_path @@ -56,7 +56,8 @@ def _init_data_receiving(self): self.receiver = _SocketReceiver() else: self.receiver = _FIFOReceiver() - self.receiving_thread = threading.Thread(target=self._receive_information) + self.receiving_thread = threading.Thread( + target=self._receive_information) self.receiving_thread.setDaemon(True) self.receiving_thread.start() @@ -114,7 +115,7 @@ def __init__(self): try: self.server_socket.bind(('', self.data_port)) break - except socket.error, e: + except socket.error: self.data_port += 1 self.server_socket.listen(1) diff --git a/rope/base/oi/runmod.py b/rope/base/oi/runmod.py index 8170623c1..e332d7e68 100644 --- a/rope/base/oi/runmod.py +++ b/rope/base/oi/runmod.py @@ -40,9 +40,9 @@ def send_data(self, data): def close(self): self.my_file.close() - def _cached(func): cache = {} + def newfunc(self, arg): if arg in cache: return cache[arg] @@ -76,7 +76,8 @@ def on_function_call(self, frame, event, arg): code = frame.f_code for argname in code.co_varnames[:code.co_argcount]: try: - args.append(self._object_to_persisted_form(frame.f_locals[argname])) + args.append(self._object_to_persisted_form( + frame.f_locals[argname])) except (TypeError, AttributeError): args.append(('unknown',)) try: @@ -94,17 +95,19 @@ def on_function_call(self, frame, event, arg): def _is_an_interesting_call(self, frame): #if frame.f_code.co_name in ['?', '']: # return False - #return not frame.f_back or not self._is_code_inside_project(frame.f_back.f_code) + #return not frame.f_back or + # not self._is_code_inside_project(frame.f_back.f_code) if not self._is_code_inside_project(frame.f_code) and \ - (not frame.f_back or not self._is_code_inside_project(frame.f_back.f_code)): + (not frame.f_back or + not self._is_code_inside_project(frame.f_back.f_code)): return False return True def _is_code_inside_project(self, code): source = self._path(code.co_filename) return source is not None and os.path.exists(source) and \ - _realpath(source).startswith(self.project_root) + _realpath(source).startswith(self.project_root) @_cached def _get_persisted_code(self, object_): @@ -128,7 +131,8 @@ def _get_persisted_builtin(self, object_): holding = None if len(object_) > 0: holding = object_[0] - return ('builtin', 'list', self._object_to_persisted_form(holding)) + return ('builtin', 'list', + self._object_to_persisted_form(holding)) if isinstance(object_, dict): keys = None values = None @@ -152,7 +156,8 @@ def _get_persisted_builtin(self, object_): for o in object_: holding = o break - return ('builtin', 'set', self._object_to_persisted_form(holding)) + return ('builtin', 'set', + self._object_to_persisted_form(holding)) return ('unknown',) def _object_to_persisted_form(self, object_): diff --git a/rope/base/oi/soa.py b/rope/base/oi/soa.py index 38cd5c9dd..a34b970ea 100644 --- a/rope/base/oi/soa.py +++ b/rope/base/oi/soa.py @@ -26,9 +26,11 @@ def _analyze_node(pycore, pydefined, should_analyze, new_followed_calls = max(0, followed_calls - 1) return_true = lambda pydefined: True return_false = lambda pydefined: False + def _follow(pyfunction): _analyze_node(pycore, pyfunction, return_true, return_false, new_followed_calls) + if not followed_calls: _follow = None visitor = SOAVisitor(pycore, pydefined, _follow) @@ -113,7 +115,8 @@ def _Assign(self, node): args_pynames.append(evaluate.eval_node(self.scope, subscript.slice.value)) value = rope.base.oi.soi._infer_assignment( - rope.base.pynames.AssignmentValue(node.value, levels), self.pymodule) + rope.base.pynames.AssignmentValue(node.value, levels), + self.pymodule) args_pynames.append(rope.base.pynames.UnboundName(value)) if instance is not None and value is not None: pyobject = instance.get_object() diff --git a/rope/base/oi/soi.py b/rope/base/oi/soi.py index bf40af90c..5a11b5efd 100644 --- a/rope/base/oi/soi.py +++ b/rope/base/oi/soi.py @@ -30,6 +30,7 @@ def infer_returned_object(pyfunction, args): return result return object_info.get_returned(pyfunction, args) + @_ignore_inferred def infer_parameter_objects(pyfunction): """Infer the `PyObject`\s of parameters of this `PyFunction`""" @@ -40,6 +41,7 @@ def infer_parameter_objects(pyfunction): _handle_first_parameter(pyfunction, result) return result + def _handle_first_parameter(pyobject, parameters): kind = pyobject.get_kind() if parameters is None or kind not in ['method', 'classmethod']: @@ -53,6 +55,7 @@ def _handle_first_parameter(pyobject, parameters): if kind == 'classmethod': parameters[0] = pyobject.parent + @_ignore_inferred def infer_assigned_object(pyname): if not pyname.assignments: @@ -62,6 +65,7 @@ def infer_assigned_object(pyname): if result is not None: return result + def get_passed_objects(pyfunction, parameter_index): object_info = pyfunction.pycore.object_info result = object_info.get_passed_objects(pyfunction, @@ -72,6 +76,7 @@ def get_passed_objects(pyfunction, parameter_index): result.append(statically_inferred[parameter_index]) return result + def _infer_returned(pyobject, args): if args: # HACK: Setting parameter objects manually @@ -99,12 +104,14 @@ def _infer_returned(pyobject, args): except rope.base.pyobjects.IsBeingInferredError: pass + def _parameter_objects(pyobject): params = pyobject.get_param_names(special_args=False) return [rope.base.pyobjects.get_unknown()] * len(params) # handling `rope.base.pynames.AssignmentValue` + @_ignore_inferred def _infer_assignment(assignment, pymodule): result = _follow_pyname(assignment, pymodule) @@ -116,6 +123,7 @@ def _infer_assignment(assignment, pymodule): return None return _follow_levels(assignment, pyobject) + def _follow_levels(assignment, pyobject): for index in assignment.levels: if isinstance(pyobject.get_type(), rope.base.builtins.Tuple): @@ -132,6 +140,7 @@ def _follow_levels(assignment, pyobject): break return pyobject + @_ignore_inferred def _follow_pyname(assignment, pymodule, lineno=None): assign_node = assignment.ast_node @@ -149,6 +158,7 @@ def _follow_pyname(assignment, pymodule, lineno=None): arguments.ObjectArguments([arg])) return pyname, result + @_ignore_inferred def _follow_evaluations(assignment, pyname, pyobject): new_pyname = pyname @@ -181,6 +191,7 @@ def _get_lineno_for_node(assign_node): return assign_node.lineno return 1 + def _get_attribute(pyobject, name): if pyobject is not None and name in pyobject: return pyobject[name] diff --git a/rope/base/oi/transform.py b/rope/base/oi/transform.py index 5a9d600ed..3f73e413b 100644 --- a/rope/base/oi/transform.py +++ b/rope/base/oi/transform.py @@ -120,7 +120,6 @@ def transform(self, textual): return None def builtin_to_pyobject(self, textual): - name = textual[1] method = getattr(self, 'builtin_%s_to_pyobject' % textual[1], None) if method is not None: return method(textual) @@ -221,7 +220,7 @@ def path_to_resource(self, path): class DOITextualToPyObject(TextualToPyObject): """For transforming textual form to `PyObject` - + The textual form DOI uses is different from rope's standard textual form. The reason is that we cannot find the needed information by analyzing live objects. This class can be @@ -253,7 +252,8 @@ def _class_to_pyobject(self, textual): isinstance(suspected, rope.base.pyobjects.PyClass): return suspected else: - lineno = self._find_occurrence(name, pymodule.get_resource().read()) + lineno = self._find_occurrence(name, + pymodule.get_resource().read()) if lineno is not None: inner_scope = module_scope.get_inner_scope_for_line(lineno) return inner_scope.pyobject diff --git a/rope/base/prefs.py b/rope/base/prefs.py index 674a58ecb..2ab45dac5 100644 --- a/rope/base/prefs.py +++ b/rope/base/prefs.py @@ -27,7 +27,7 @@ def get(self, key, default=None): def add_callback(self, key, callback): """Add `key` preference with `callback` function - + Whenever `key` is set the callback is called with the given `value` as parameter. diff --git a/rope/base/project.py b/rope/base/project.py index 97d2dd3ea..6c8780a7b 100644 --- a/rope/base/project.py +++ b/rope/base/project.py @@ -6,7 +6,7 @@ import rope.base.fscommands from rope.base import exceptions, taskhandle, prefs, history, pycore, utils -from rope.base.resourceobserver import * +import rope.base.resourceobserver as resourceobserver from rope.base.resources import File, Folder, _ResourceMatcher @@ -258,7 +258,7 @@ class _FileListCacher(object): def __init__(self, project): self.project = project self.files = None - rawobserver = ResourceObserver( + rawobserver = resourceobserver.ResourceObserver( self._changed, self._invalid, self._invalid, self._invalid, self._invalid) self.project.add_observer(rawobserver) @@ -334,7 +334,7 @@ def write(self): def _can_compress(self): try: - import gzip + import gzip # noqa return True except ImportError: return False diff --git a/rope/base/pycore.py b/rope/base/pycore.py index 32056a0fe..8aa1bb85d 100644 --- a/rope/base/pycore.py +++ b/rope/base/pycore.py @@ -6,9 +6,9 @@ import rope.base.oi.doa import rope.base.oi.objectinfo import rope.base.oi.soa -from rope.base import ast, exceptions, taskhandle, utils, stdmods +from rope.base import exceptions, taskhandle, utils, stdmods from rope.base.exceptions import ModuleNotFoundError -from rope.base.pyobjectsdef import PyModule, PyPackage, PyClass +from rope.base.pyobjectsdef import PyModule, PyPackage import rope.base.resources import rope.base.resourceobserver from rope.base import builtins @@ -38,7 +38,8 @@ def _init_resource_observer(self): callback = self._invalidate_resource_cache observer = rope.base.resourceobserver.ResourceObserver( changed=callback, moved=callback, removed=callback) - self.observer = rope.base.resourceobserver.FilteredResourceObserver(observer) + self.observer = \ + rope.base.resourceobserver.FilteredResourceObserver(observer) self.project.add_observer(self.observer) def _init_source_folders(self): @@ -62,7 +63,7 @@ def automatic_soa(self): def _file_changed_for_soa(self, resource, new_resource=None): old_contents = self.project.history.\ - contents_before_current_change(resource) + contents_before_current_change(resource) if old_contents is not None: perform_soa_on_changed_scopes(self.project, resource, old_contents) @@ -78,7 +79,7 @@ def get_module(self, name, folder=None): # check if this is a builtin module pymod = self._builtin_module(name) if pymod is not None: - return pymod + return pymod module = self.find_module(name, folder) if module is None: raise ModuleNotFoundError('Module %s not found' % name) @@ -124,7 +125,7 @@ def _find_module_in_folder(self, folder, modname): module = folder packages = modname.split('.') for pkg in packages[:-1]: - if module.is_folder() and module.has_child(pkg): + if module.is_folder() and module.has_child(pkg): module = module.get_child(pkg) else: return None @@ -133,7 +134,7 @@ def _find_module_in_folder(self, folder, modname): module.get_child(packages[-1]).is_folder(): return module.get_child(packages[-1]) elif module.has_child(packages[-1] + '.py') and \ - not module.get_child(packages[-1] + '.py').is_folder(): + not module.get_child(packages[-1] + '.py').is_folder(): return module.get_child(packages[-1] + '.py') def get_python_path_folders(self): @@ -141,7 +142,8 @@ def get_python_path_folders(self): result = [] for src in self.project.prefs.get('python_path', []) + sys.path: try: - src_folder = rope.base.project.get_no_project().get_resource(src) + src_folder = \ + rope.base.project.get_no_project().get_resource(src) result.append(src_folder) except rope.base.exceptions.ResourceNotFoundError: pass @@ -282,7 +284,7 @@ def modname(self, resource): source_folder = resource.parent while source_folder != source_folder.parent and \ - source_folder.has_child('__init__.py'): + source_folder.has_child('__init__.py'): module_name = source_folder.name + '.' + module_name source_folder = source_folder.parent return module_name @@ -355,9 +357,11 @@ def perform_soa_on_changed_scopes(project, resource, old_contents): new_contents = resource.read() # detecting changes in new_contents relative to old_contents detector = _TextChangeDetector(new_contents, old_contents) + def search_subscopes(pydefined): scope = pydefined.get_scope() return detector.is_changed(scope.get_start(), scope.get_end()) + def should_analyze(pydefined): scope = pydefined.get_scope() start = scope.get_start() diff --git a/rope/base/pynames.py b/rope/base/pynames.py index 79bba1567..303cd6573 100644 --- a/rope/base/pynames.py +++ b/rope/base/pynames.py @@ -57,7 +57,7 @@ def __init__(self, ast_node, levels=None, evaluation='', """ self.ast_node = ast_node - if levels == None: + if levels is None: self.levels = [] else: self.levels = levels @@ -120,7 +120,8 @@ def _get_pymodule(self): self._current_folder()) else: pymodule = pycore.get_relative_module( - self.module_name, self._current_folder(), self.level) + self.module_name, self._current_folder(), + self.level) self.pymodule.set(pymodule) except exceptions.ModuleNotFoundError: pass @@ -172,6 +173,7 @@ def _circular_inference(): raise rope.base.pyobjects.IsBeingInferredError( 'Circular Object Inference') + class _Inferred(object): def __init__(self, get_inferred, concluded=None): diff --git a/rope/base/pyobjectsdef.py b/rope/base/pyobjectsdef.py index 50b243607..e75ce2edc 100644 --- a/rope/base/pyobjectsdef.py +++ b/rope/base/pyobjectsdef.py @@ -5,14 +5,14 @@ import rope.base.pyscopes from rope.base import (pynamesdef as pynames, exceptions, ast, astutils, pyobjects, fscommands, arguments, utils) -from rope.base.pyobjects import * class PyFunction(pyobjects.PyFunction): def __init__(self, pycore, ast_node, parent): - AbstractFunction.__init__(self) - PyDefinedObject.__init__(self, pycore, ast_node, parent) + rope.base.pyobjects.AbstractFunction.__init__(self) + rope.base.pyobjects.PyDefinedObject.__init__( + self, pycore, ast_node, parent) self.arguments = self.ast_node.args self.parameter_pyobjects = pynames._Inferred( self._infer_parameters, self.get_module()._get_concluded_data()) @@ -109,8 +109,9 @@ class PyClass(pyobjects.PyClass): def __init__(self, pycore, ast_node, parent): self.visitor_class = _ClassVisitor - AbstractClass.__init__(self) - PyDefinedObject.__init__(self, pycore, ast_node, parent) + rope.base.pyobjects.AbstractClass.__init__(self) + rope.base.pyobjects.PyDefinedObject.__init__( + self, pycore, ast_node, parent) self.parent = parent self._superclasses = self.get_module()._get_concluded_data() @@ -134,8 +135,9 @@ def _get_bases(self): base = rope.base.evaluate.eval_node(self.parent.get_scope(), base_name) if base is not None and \ - base.get_object().get_type() == get_base_type('Type'): - result.append(base.get_object()) + base.get_object().get_type() == \ + rope.base.pyobjects.get_base_type('Type'): + result.append(base.get_object()) return result def _create_scope(self): @@ -245,13 +247,14 @@ def _get_child_resources(self): if child.is_folder(): result[child.name] = child elif child.name.endswith('.py') and \ - child.name != '__init__.py': + child.name != '__init__.py': name = child.name[:-3] result[name] = child return result def _get_init_dot_py(self): - if self.resource is not None and self.resource.has_child('__init__.py'): + if self.resource is not None and \ + self.resource.has_child('__init__.py'): return self.resource.get_child('__init__.py') else: return None @@ -329,7 +332,9 @@ def _FunctionDef(self, node): if isinstance(decorator, ast.Name) and decorator.id == 'property': if isinstance(self, _ClassVisitor): type_ = rope.base.builtins.Property(pyfunction) - arg = pynames.UnboundName(PyObject(self.owner_object)) + arg = pynames.UnboundName( + rope.base.pyobjects.PyObject(self.owner_object)) + def _eval(type_=type_, arg=arg): return type_.get_property_object( arguments.ObjectArguments([arg])) @@ -347,7 +352,7 @@ def _AugAssign(self, node): pass def _For(self, node): - names = self._update_evaluated(node.target, node.iter, + names = self._update_evaluated(node.target, node.iter, # noqa '.__iter__().next()') for child in node.body + node.orelse: ast.walk(child, self) @@ -362,7 +367,7 @@ def _assigned(self, name, assignment): self.names[name] = pyname def _update_evaluated(self, targets, assigned, - evaluation= '', eval_type=False): + evaluation='', eval_type=False): result = {} names = astutils.get_name_levels(targets) for name, levels in names: @@ -430,7 +435,8 @@ 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(), AbstractModule) + return not isinstance(imported_module.get_object(), + rope.base.pyobjects.AbstractModule) def _Global(self, node): module = self.get_module() diff --git a/rope/base/pyscopes.py b/rope/base/pyscopes.py index a00381b79..0bed19a92 100644 --- a/rope/base/pyscopes.py +++ b/rope/base/pyscopes.py @@ -230,8 +230,8 @@ def get_holding_scope(self, module_scope, lineno, line_indents=None): current_scope = module_scope new_scope = current_scope while new_scope is not None and \ - (new_scope.get_kind() == 'Module' or - self._get_scope_indents(new_scope) <= line_indents): + (new_scope.get_kind() == 'Module' or + self._get_scope_indents(new_scope) <= line_indents): current_scope = new_scope if current_scope.get_start() == lineno and \ current_scope.get_kind() != 'Module': @@ -268,7 +268,7 @@ def find_scope_end(self, scope): else: body_indents = self._get_body_indents(scope) for l in self.logical_lines.generate_starts( - min(end + 1, self.lines.length()), self.lines.length() + 1): + min(end + 1, self.lines.length()), self.lines.length() + 1): if not self._is_empty_line(l): if self.get_indents(l) < body_indents: return end @@ -288,6 +288,7 @@ def code(self): def logical_lines(self): return self.pymodule.logical_lines + class TemporaryScope(Scope): """Currently used for list comprehensions and generator expressions diff --git a/rope/base/resourceobserver.py b/rope/base/resourceobserver.py index 6d1accbce..7c0937d5b 100644 --- a/rope/base/resourceobserver.py +++ b/rope/base/resourceobserver.py @@ -231,7 +231,8 @@ def _search_resource_changes(self, resource): def _is_changed(self, resource): if self.resources[resource] is None: return False - return self.resources[resource] != self.timekeeper.get_indicator(resource) + return self.resources[resource] != \ + self.timekeeper.get_indicator(resource) def _calculate_new_resource(self, main, new_main, resource): if new_main is None: diff --git a/rope/base/resources.py b/rope/base/resources.py index 46beadb0f..4c49cac8f 100644 --- a/rope/base/resources.py +++ b/rope/base/resources.py @@ -187,8 +187,8 @@ def set_patterns(self, patterns): def _add_pattern(self, pattern): re_pattern = pattern.replace('.', '\\.').\ - replace('*', '[^/]*').replace('?', '[^/]').\ - replace('//', '/(.*/)?') + replace('*', '[^/]*').replace('?', '[^/]').\ + replace('//', '/(.*/)?') re_pattern = '^(.*/)?' + re_pattern + '(/.*)?$' self.compiled_patterns.append(re.compile(re_pattern)) diff --git a/rope/base/taskhandle.py b/rope/base/taskhandle.py index 6d4ed8564..c1f01b984 100644 --- a/rope/base/taskhandle.py +++ b/rope/base/taskhandle.py @@ -1,5 +1,3 @@ -import warnings - from rope.base import exceptions diff --git a/rope/base/utils.py b/rope/base/utils.py index e35ecbf3e..11556c132 100644 --- a/rope/base/utils.py +++ b/rope/base/utils.py @@ -5,6 +5,7 @@ def saveit(func): """A decorator that caches the return value of a function""" name = '_' + func.__name__ + def _wrapper(self, *args, **kwds): if not hasattr(self, name): setattr(self, name, func(self, *args, **kwds)) @@ -13,10 +14,12 @@ def _wrapper(self, *args, **kwds): cacheit = saveit + def prevent_recursion(default): """A decorator that returns the return value of `default` in recursions""" def decorator(func): name = '_calling_%s_' % func.__name__ + def newfunc(self, *args, **kwds): if getattr(self, name, False): return default() @@ -46,6 +49,7 @@ def deprecated(message=None): def _decorator(func, message=message): if message is None: message = '%s is deprecated' % func.__name__ + def newfunc(*args, **kwds): warnings.warn(message, DeprecationWarning, stacklevel=2) return func(*args, **kwds) @@ -59,6 +63,7 @@ def decorator(func): return _Cached(func, count) return decorator + class _Cached(object): def __init__(self, func, count): diff --git a/rope/base/worder.py b/rope/base/worder.py index 08d75f34d..c85c6b366 100644 --- a/rope/base/worder.py +++ b/rope/base/worder.py @@ -257,8 +257,10 @@ def get_splitted_primary_before(self, offset): return (self.raw[real_start:end], '', offset) last_dot_position = word_start if self.code[word_start] != '.': - last_dot_position = self._find_last_non_space_char(word_start - 1) - last_char_position = self._find_last_non_space_char(last_dot_position - 1) + last_dot_position = \ + self._find_last_non_space_char(word_start - 1) + last_char_position = \ + self._find_last_non_space_char(last_dot_position - 1) if self.code[word_start].isspace(): word_start = offset return (self.raw[real_start:last_char_position + 1], @@ -304,8 +306,8 @@ def is_a_function_being_called(self, offset): word_end = self._find_word_end(offset) + 1 next_char = self._find_first_non_space_char(word_end) return next_char < len(self.code) and \ - self.code[next_char] == '(' and \ - not self.is_a_class_or_function_name_in_header(offset) + self.code[next_char] == '(' and \ + not self.is_a_class_or_function_name_in_header(offset) def _find_import_end(self, start): return self._get_line_end(start) @@ -337,7 +339,7 @@ def is_from_statement_module(self, offset): def is_a_name_after_from_import(self, offset): try: - if len(self.code) > offset and self.code[offset] == '\n': + if len(self.code) > offset and self.code[offset] == '\n': line_start = self._get_line_start(offset - 1) else: line_start = self._get_line_start(offset) @@ -405,7 +407,6 @@ def is_on_function_call_keyword(self, offset): def find_parens_start_from_inside(self, offset): stop = self._get_line_start(offset) - opens = 1 while offset > stop: if self.code[offset] == '(': break @@ -501,7 +502,7 @@ def is_assigned_in_a_tuple_assignment(self, offset): parens_start = self.find_parens_start_from_inside(offset) # XXX: only handling (x, y) = value return offset < equals_offset and \ - self.code[start:parens_start].strip() == '' + self.code[start:parens_start].strip() == '' def get_function_and_args_in_header(self, offset): offset = self.find_function_offset(offset) @@ -518,7 +519,7 @@ def find_function_offset(self, offset, definition='def '): return self._find_first_non_space_char(def_) def get_lambda_and_args(self, offset): - offset = self.find_function_offset(offset, definition = 'lambda ') - lparens, rparens = self.get_word_parens_range(offset, opening=' ', closing=':') + offset = self.find_function_offset(offset, definition='lambda ') + lparens, rparens = self.get_word_parens_range(offset, opening=' ', + closing=':') return self.raw[offset:rparens + 1] - diff --git a/rope/contrib/codeassist.py b/rope/contrib/codeassist.py index 37433c2a5..68956c5a6 100644 --- a/rope/contrib/codeassist.py +++ b/rope/contrib/codeassist.py @@ -4,8 +4,8 @@ import rope.base.codeanalyze import rope.base.evaluate -from rope.base import pyobjects, pyobjectsdef, pynames, builtins, exceptions, worder -from rope.base.codeanalyze import SourceLinesAdapter +from rope.base import (pyobjects, pyobjectsdef, pynames, builtins, + exceptions, worder) from rope.contrib import fixsyntax from rope.refactor import functionutils @@ -55,7 +55,6 @@ def get_doc(project, source_code, offset, resource=None, maxfixes=1): """Get the pydoc""" fixer = fixsyntax.FixSyntax(project.pycore, source_code, resource, maxfixes) - pymodule = fixer.get_pymodule() pyname = fixer.pyname_at(offset) if pyname is None: return None @@ -90,7 +89,6 @@ def get_calltip(project, source_code, offset, resource=None, """ fixer = fixsyntax.FixSyntax(project.pycore, source_code, resource, maxfixes) - pymodule = fixer.get_pymodule() pyname = fixer.pyname_at(offset) if pyname is None: return None @@ -110,7 +108,6 @@ def get_definition_location(project, source_code, offset, """ fixer = fixsyntax.FixSyntax(project.pycore, source_code, resource, maxfixes) - pymodule = fixer.get_pymodule() pyname = fixer.pyname_at(offset) if pyname is not None: module, lineno = pyname.get_definition_location() @@ -184,15 +181,14 @@ def type(self): if isinstance(pyobject, builtins.BuiltinFunction): return 'function' elif isinstance(pyobject, builtins.BuiltinClass): - clsobj = pyobject.builtin return 'class' elif isinstance(pyobject, builtins.BuiltinObject) or \ - isinstance(pyobject, builtins.BuiltinName): + isinstance(pyobject, builtins.BuiltinName): return 'instance' elif isinstance(pyname, pynames.ImportedModule): return 'module' elif isinstance(pyname, pynames.ImportedName) or \ - isinstance(pyname, pynames.DefinedName): + isinstance(pyname, pynames.DefinedName): pyobject = pyname.get_object() if isinstance(pyobject, pyobjects.AbstractFunction): return 'function' @@ -222,7 +218,7 @@ def get_doc(self): @property def kind(self): - warnings.warn("the proposal's `kind` property is deprecated, " \ + warnings.warn("the proposal's `kind` property is deprecated, " "use `scope` instead") return self.scope @@ -309,7 +305,7 @@ def _find_starting_offset(self, source_code, offset): current_offset = offset - 1 while current_offset >= 0 and (source_code[current_offset].isalnum() or source_code[current_offset] in '_'): - current_offset -= 1; + current_offset -= 1 return current_offset + 1 def _matching_keywords(self, starting): @@ -339,11 +335,12 @@ def _dotted_completions(self, module_scope, holding_scope): compl_scope = 'imported' for name, pyname in element.get_attributes().items(): if name.startswith(self.starting): - result[name] = CompletionProposal(name, compl_scope, pyname) + result[name] = CompletionProposal(name, compl_scope, + pyname) return result def _undotted_completions(self, scope, result, lineno=None): - if scope.parent != None: + if scope.parent is not None: self._undotted_completions(scope.parent, result) if lineno is None: names = scope.get_propagated_names() @@ -413,24 +410,21 @@ def _keyword_parameters(self, pymodule, scope): if offset == 0: return {} word_finder = worder.Worder(self.code, True) - lines = SourceLinesAdapter(self.code) - lineno = lines.get_line_number(offset) if word_finder.is_on_function_call_keyword(offset - 1): - name_finder = rope.base.evaluate.ScopeNameFinder(pymodule) 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) - except exceptions.BadIdentifierError, e: + except exceptions.BadIdentifierError: return {} if function_pyname is not None: pyobject = function_pyname.get_object() if isinstance(pyobject, pyobjects.AbstractFunction): pass elif isinstance(pyobject, pyobjects.AbstractClass) and \ - '__init__' in pyobject: + '__init__' in pyobject: pyobject = pyobject['__init__'].get_object() elif '__call__' in pyobject: pyobject = pyobject['__call__'].get_object() @@ -455,12 +449,12 @@ def __init__(self, code_assist_proposals, scopepref=None, typepref=None): self.proposals = code_assist_proposals if scopepref is None: scopepref = ['parameter_keyword', 'local', 'global', 'imported', - 'attribute', 'builtin', 'keyword'] + 'attribute', 'builtin', 'keyword'] self.scopepref = scopepref if typepref is None: typepref = ['class', 'function', 'instance', 'module', None] self.typerank = dict((type, index) - for index, type in enumerate(typepref)) + for index, type in enumerate(typepref)) def get_sorted_proposal_list(self): """Return a list of `CodeAssistProposal`""" @@ -471,7 +465,7 @@ def get_sorted_proposal_list(self): for scope in self.scopepref: scope_proposals = proposals.get(scope, []) scope_proposals = [proposal for proposal in scope_proposals - if proposal.type in self.typerank] + if proposal.type in self.typerank] scope_proposals.sort(self._proposal_cmp) result.extend(scope_proposals) return result @@ -526,7 +520,8 @@ 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 %s(%s):\n\n' % (pyclass.get_name(), ', '.join(supers)) \ + + contents if '__init__' in pyclass: init = pyclass['__init__'].get_object() @@ -544,7 +539,7 @@ def _get_function_docstring(self, pyfunction): def _is_method(self, pyfunction): return isinstance(pyfunction, pyobjects.PyFunction) and \ - isinstance(pyfunction.parent, pyobjects.PyClass) + isinstance(pyfunction.parent, pyobjects.PyClass) def _get_single_function_docstring(self, pyfunction): signature = self._get_function_signature(pyfunction) @@ -579,7 +574,6 @@ def _location(self, pyobject, add_module=False): parent = parent.parent if add_module: if isinstance(pyobject, pyobjects.PyFunction): - module = pyobject.get_module() location.insert(0, self._get_module(pyobject)) if isinstance(parent, builtins.BuiltinModule): location.insert(0, parent.get_name() + '.') diff --git a/rope/contrib/findit.py b/rope/contrib/findit.py index e8ddd7e57..76f444f2a 100644 --- a/rope/contrib/findit.py +++ b/rope/contrib/findit.py @@ -7,7 +7,8 @@ def find_occurrences(project, resource, offset, unsure=False, resources=None, - in_hierarchy=False, task_handle=taskhandle.NullTaskHandle()): + in_hierarchy=False, + task_handle=taskhandle.NullTaskHandle()): """Return a list of `Location`\s If `unsure` is `True`, possible matches are returned, too. You @@ -21,6 +22,7 @@ def find_occurrences(project, resource, offset, unsure=False, resources=None, this_pymodule = project.pycore.resource_to_pyobject(resource) primary, pyname = rope.base.evaluate.eval_location2( this_pymodule, offset) + def is_match(occurrence): return unsure finder = occurrences.create_finder( @@ -50,9 +52,11 @@ def find_implementations(project, resource, offset, resources=None, raise exceptions.BadIdentifierError('Not a method!') else: raise exceptions.BadIdentifierError('Cannot resolve the identifier!') + def is_defined(occurrence): if not occurrence.is_defined(): return False + def not_self(occurrence): if occurrence.get_pyname().get_object() == pyname.get_object(): return False @@ -73,13 +77,13 @@ def find_definition(project, code, offset, resource=None, maxfixes=1): determined, otherwise ``None`` is returned. """ fixer = fixsyntax.FixSyntax(project.pycore, code, resource, maxfixes) - main_module = fixer.get_pymodule() 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) if lineno is not None: start = module.lines.get_line_start(lineno) + def check_offset(occurrence): if occurrence.offset < start: return False diff --git a/rope/contrib/fixmodnames.py b/rope/contrib/fixmodnames.py index 7092f1312..0b21f9792 100644 --- a/rope/contrib/fixmodnames.py +++ b/rope/contrib/fixmodnames.py @@ -15,7 +15,7 @@ argument. """ -from rope.base import change, taskhandle +from rope.base import taskhandle from rope.contrib import changestack from rope.refactor import rename diff --git a/rope/contrib/fixsyntax.py b/rope/contrib/fixsyntax.py index 870046c8b..5f6aa4584 100644 --- a/rope/contrib/fixsyntax.py +++ b/rope/contrib/fixsyntax.py @@ -34,7 +34,8 @@ def get_pymodule(self): self.commenter.comment(e.lineno) code = '\n'.join(self.commenter.lines) else: - raise exceptions.ModuleSyntaxError(e.filename, e.lineno, msg) + raise exceptions.ModuleSyntaxError(e.filename, + e.lineno, msg) @property @utils.saveit @@ -43,6 +44,7 @@ def commenter(self): def pyname_at(self, offset): pymodule = self.get_pymodule() + def old_pyname(): word_finder = worder.Worder(self.code, True) expression = word_finder.get_primary_at(offset) @@ -51,6 +53,7 @@ def old_pyname(): scope = pymodule.get_scope().get_inner_scope_for_line(lineno) return rope.base.evaluate.eval_str(scope, expression) new_code = pymodule.source_code + def new_pyname(): newoffset = self.commenter.transfered_offset(offset) return rope.base.evaluate.eval_location(pymodule, newoffset) @@ -108,7 +111,6 @@ def _get_block_end(self, lineno): return end_line def _get_stmt_end(self, lineno): - end_line = lineno base_indents = _get_line_indents(self.lines[lineno]) for i in range(lineno + 1, len(self.lines)): if _get_line_indents(self.lines[i]) <= base_indents: @@ -117,7 +119,7 @@ def _get_stmt_end(self, lineno): def _fix_incomplete_try_blocks(self, lineno, indents): block_start = lineno - last_indents = current_indents = indents + last_indents = indents while block_start > 0: block_start = rope.base.codeanalyze.get_block_start( ArrayLinesAdapter(self.lines), block_start) - 1 @@ -155,6 +157,7 @@ def _insert(self, lineno, line): self.origs.insert(lineno, self.origs[lineno]) self.lines.insert(lineno, line) + def _logical_start(lines, lineno, check_prev=False): logical_finder = LogicalLineFinder(ArrayLinesAdapter(lines)) if check_prev: diff --git a/rope/contrib/generate.py b/rope/contrib/generate.py index 4d850da07..1513f9bbf 100644 --- a/rope/contrib/generate.py +++ b/rope/contrib/generate.py @@ -1,5 +1,6 @@ import rope.base.evaluate -from rope.base import change, pyobjects, exceptions, pynames, worder, codeanalyze +from rope.base import (change, pyobjects, exceptions, pynames, worder, + codeanalyze) from rope.refactor import sourceutils, importutils, functionutils, suites @@ -24,6 +25,7 @@ def create_module(project, name, sourcefolder=None): parent = parent.get_child(package) return parent.create_file(packages[-1] + '.py') + def create_package(project, name, sourcefolder=None): """Creates a package and returns a `rope.base.resources.Folder`""" if sourcefolder is None: @@ -55,14 +57,16 @@ def _check_exceptional_conditions(self): 'Element <%s> already exists.' % self.name) if not self.info.primary_is_found(): raise exceptions.RefactoringError( - 'Cannot determine the scope <%s> should be defined in.' % self.name) + 'Cannot determine the scope <%s> should be defined in.' % + self.name) def get_changes(self): changes = change.ChangeSet('Generate %s <%s>' % (self._get_element_kind(), self.name)) indents = self.info.get_scope_indents() blanks = self.info.get_blank_lines() - base_definition = sourceutils.fix_indentation(self._get_element(), indents) + base_definition = sourceutils.fix_indentation(self._get_element(), + indents) definition = '\n' * blanks[0] + base_definition + '\n' * blanks[1] resource = self.info.get_insertion_resource() @@ -130,7 +134,8 @@ 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('%s/%s.py' % + (package.path, self.name)) if new_resource.exists(): raise exceptions.RefactoringError( 'Module <%s> already exists' % new_resource.path) @@ -141,7 +146,7 @@ def get_changes(self): def get_location(self): package = self.info.get_package() - return (package.get_child('%s.py' % self.name) , 1) + return (package.get_child('%s.py' % self.name), 1) class GeneratePackage(_Generate): @@ -149,7 +154,8 @@ 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('%s/%s' % + (package.path, self.name)) if new_resource.exists(): raise exceptions.RefactoringError( 'Package <%s> already exists' % new_resource.path) @@ -163,7 +169,7 @@ def get_changes(self): def get_location(self): package = self.info.get_package() child = package.get_child(self.name) - return (child.get_child('__init__.py') , 1) + return (child.get_child('__init__.py'), 1) def _add_import_to_module(pycore, resource, imported): @@ -304,15 +310,15 @@ def element_already_exists(self): def is_static_method(self): return self.primary is not None and \ - isinstance(self.primary.get_object(), pyobjects.PyClass) + isinstance(self.primary.get_object(), pyobjects.PyClass) def is_method(self): return self.primary is not None and \ - isinstance(self.primary.get_object().get_type(), pyobjects.PyClass) + isinstance(self.primary.get_object().get_type(), pyobjects.PyClass) def is_constructor(self): return self.pyname is not None and \ - isinstance(self.pyname.get_object(), pyobjects.PyClass) + isinstance(self.pyname.get_object(), pyobjects.PyClass) def is_instance(self): if self.pyname is None: diff --git a/rope/refactor/__init__.py b/rope/refactor/__init__.py index 10d734c3a..4ef675134 100644 --- a/rope/refactor/__init__.py +++ b/rope/refactor/__init__.py @@ -45,8 +45,8 @@ monitoring the progress of refactorings. """ -from rope.refactor.importutils import ImportOrganizer -from rope.refactor.topackage import ModuleToPackage +from rope.refactor.importutils import ImportOrganizer # noqa +from rope.refactor.topackage import ModuleToPackage # noqa __all__ = ['rename', 'move', 'inline', 'extract', 'restructure', 'topackage', diff --git a/rope/refactor/change_signature.py b/rope/refactor/change_signature.py index a8c50d711..4007222e4 100644 --- a/rope/refactor/change_signature.py +++ b/rope/refactor/change_signature.py @@ -1,7 +1,8 @@ import copy import rope.base.exceptions -from rope.base import pyobjects, taskhandle, evaluate, worder, codeanalyze, utils +from rope.base import (pyobjects, taskhandle, evaluate, worder, codeanalyze, + utils) from rope.base.change import ChangeContents, ChangeSet from rope.refactor import occurrences, functionutils @@ -160,12 +161,15 @@ def change_definition(self, call): def change_call(self, primary, pyname, call): call_info = functionutils.CallInfo.read( primary, pyname, self.definition_info, call) - mapping = functionutils.ArgumentMapping(self.definition_info, call_info) + mapping = functionutils.ArgumentMapping(self.definition_info, + call_info) - for definition_info, changer in zip(self.changed_definition_infos, self.changers): + for definition_info, changer in zip(self.changed_definition_infos, + self.changers): changer.change_argument_mapping(definition_info, mapping) - return mapping.to_call_info(self.changed_definition_infos[-1]).to_string() + return mapping.to_call_info( + self.changed_definition_infos[-1]).to_string() class _ArgumentChanger(object): @@ -190,12 +194,14 @@ def change_definition_info(self, call_info): if self.index < len(call_info.args_with_defaults): del call_info.args_with_defaults[self.index] elif self.index == len(call_info.args_with_defaults) and \ - call_info.args_arg is not None: + call_info.args_arg is not None: call_info.args_arg = None elif (self.index == len(call_info.args_with_defaults) and - call_info.args_arg is None and call_info.keywords_arg is not None) or \ - (self.index == len(call_info.args_with_defaults) + 1 and - call_info.args_arg is not None and call_info.keywords_arg is not None): + call_info.args_arg is None and + call_info.keywords_arg is not None) or \ + (self.index == len(call_info.args_with_defaults) + 1 and + call_info.args_arg is not None and + call_info.keywords_arg is not None): call_info.keywords_arg = None def change_argument_mapping(self, definition_info, mapping): @@ -291,11 +297,13 @@ def __init__(self, pycore, occurrence_finder, resource, call_changer): def get_changed_module(self): word_finder = worder.Worder(self.source) change_collector = codeanalyze.ChangeCollector(self.source) - for occurrence in self.occurrence_finder.find_occurrences(self.resource): + for occurrence in self.occurrence_finder.find_occurrences( + self.resource): if not occurrence.is_called() and not occurrence.is_defined(): continue start, end = occurrence.get_primary_range() - begin_parens, end_parens = word_finder.get_word_parens_range(end - 1) + begin_parens, end_parens = word_finder.\ + get_word_parens_range(end - 1) if occurrence.is_called(): primary, pyname = occurrence.get_primary_and_pyname() changed_call = self.call_changer.change_call( diff --git a/rope/refactor/encapsulate_field.py b/rope/refactor/encapsulate_field.py index af8d3ccf6..66a0ca583 100644 --- a/rope/refactor/encapsulate_field.py +++ b/rope/refactor/encapsulate_field.py @@ -61,7 +61,7 @@ def _is_an_attribute(self, pyname): if pyname is not None and isinstance(pyname, pynames.AssignedName): pymodule, lineno = self.pyname.get_definition_location() scope = pymodule.get_scope().\ - get_inner_scope_for_line(lineno) + get_inner_scope_for_line(lineno) if scope.get_kind() == 'Class': return pyname in scope.get_names().values() parent = scope.parent @@ -90,7 +90,7 @@ def _change_holding_module(self, changes, renamer, getter, setter): if new_source is not None: pymodule = self.pycore.get_string_module(new_source, self.resource) class_scope = pymodule.get_scope().\ - get_inner_scope_for_line(class_scope.get_start()) + get_inner_scope_for_line(class_scope.get_start()) indents = sourceutils.get_indent(self.pycore) * ' ' getter = 'def %s(self):\n%sreturn self.%s' % \ (getter, indents, self.name) @@ -155,7 +155,7 @@ def get_changed_module(self): + ' %s ' % assignment_type[:-1]) current_line = self.lines.get_line_number(start) start_line, end_line = self.pymodule.logical_lines.\ - logical_line_in(current_line) + logical_line_in(current_line) self.last_set = self.lines.get_line_end(end_line) end = self.source.index('=', end) + 1 self.set_index = len(result) diff --git a/rope/refactor/extract.py b/rope/refactor/extract.py index 3e7a619c1..e081345c0 100644 --- a/rope/refactor/extract.py +++ b/rope/refactor/extract.py @@ -12,7 +12,7 @@ # # _ExtractInfo: holds information about the refactoring; it is passed # to the parts that need to have information about the refactoring -# +# # _ExtractCollector: merely saves all of the information necessary for # performing the refactoring. # @@ -153,8 +153,8 @@ def _choose_closest_line_end(self, offset, end=False): @property def one_line(self): return self.region != self.lines_region and \ - (self.logical_lines.logical_line_in(self.region_lines[0]) == - self.logical_lines.logical_line_in(self.region_lines[1])) + (self.logical_lines.logical_line_in(self.region_lines[0]) == + self.logical_lines.logical_line_in(self.region_lines[1])) @property def global_(self): @@ -163,7 +163,7 @@ def global_(self): @property def method(self): return self.scope.parent is not None and \ - self.scope.parent.get_kind() == 'Class' + self.scope.parent.get_kind() == 'Class' @property def indents(self): @@ -182,6 +182,7 @@ def extracted(self): return self.source[self.region[0]:self.region[1]] _returned = None + @property def returned(self): """Does the extracted piece contain return statement""" @@ -273,7 +274,8 @@ def _where_to_search(self): if self.info.variable: return [self.info.scope_region] else: - return [self.info._get_scope_region(self.info.scope.parent)] + return [self.info._get_scope_region( + self.info.scope.parent)] else: return [self.info.region] @@ -391,8 +393,9 @@ def multi_line_conditions(self, info): 'contain complete statements.') def _is_region_on_a_word(self, info): - if info.region[0] > 0 and self._is_on_a_word(info, info.region[0] - 1) or \ - self._is_on_a_word(info, info.region[1] - 1): + if info.region[0] > 0 and \ + self._is_on_a_word(info, info.region[0] - 1) or \ + self._is_on_a_word(info, info.region[1] - 1): return True def _is_on_a_word(self, info, offset): @@ -487,11 +490,11 @@ def _get_function_signature(self, args): args.remove(self_name) args.insert(0, self_name) return prefix + self.info.new_name + \ - '(%s)' % self._get_comma_form(args) + '(%s)' % self._get_comma_form(args) def _extracting_method(self): return self.info.method and not self.info.make_global and \ - _get_function_kind(self.info.scope) == 'method' + _get_function_kind(self.info.scope) == 'method' def _get_self_name(self): param_names = self.info.scope.pyobject.get_param_names() @@ -503,7 +506,7 @@ def _get_function_call(self, args): if self.info.method and not self.info.make_global: if _get_function_kind(self.info.scope) == 'method': self_name = self._get_self_name() - if self_name in args: + if self_name in args: args.remove(self_name) prefix = self_name + '.' else: @@ -557,7 +560,7 @@ def _find_function_returns(self): if self.info.one_line or self.info.returned: return [] written = self.info_collector.written | \ - self.info_collector.maybe_written + self.info_collector.maybe_written return list(written & self.info_collector.postread) def _get_unindented_function_body(self, returns): @@ -577,7 +580,7 @@ def __init__(self, info): def get_definition(self): result = self.info.new_name + ' = ' + \ - _join_lines(self.info.extracted) + '\n' + _join_lines(self.info.extracted) + '\n' return result def get_body_pattern(self): @@ -671,7 +674,6 @@ def _For(self, node): self._handle_conditional_node(node) - def _get_argnames(arguments): result = [node.id for node in arguments.args if isinstance(node, ast.Name)] @@ -770,6 +772,7 @@ def has_errors(code): ast.walk(node, visitor) return visitor.error + def _get_function_kind(scope): return scope.pyobject.get_kind() @@ -779,6 +782,7 @@ def _parse_text(body): node = ast.parse(body) return node + def _join_lines(code): lines = [] for line in code.splitlines(): diff --git a/rope/refactor/functionutils.py b/rope/refactor/functionutils.py index a653b9db5..58baf9174 100644 --- a/rope/refactor/functionutils.py +++ b/rope/refactor/functionutils.py @@ -32,9 +32,6 @@ def arguments_to_string(self, from_index=0): @staticmethod def _read(pyfunction, code): - scope = pyfunction.get_scope() - parent = scope.parent - parameter_names = pyfunction.get_param_names() kind = pyfunction.get_kind() is_method = kind == 'method' is_lambda = kind == 'lambda' @@ -89,7 +86,8 @@ 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(['%s=%s' % (name, value) + for name, value in self.keywords]) if self.args_arg is not None: params.append('*' + self.args_arg) if self.keywords_arg: @@ -120,15 +118,15 @@ def read(primary, pyname, definition_info, code): @staticmethod def _is_method_call(primary, pyname): return primary is not None and \ - isinstance(primary.get_object().get_type(), - rope.base.pyobjects.PyClass) and \ - CallInfo._is_method(pyname) + isinstance(primary.get_object().get_type(), + rope.base.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) + isinstance(pyname.get_object(), + rope.base.pyobjects.PyClass) @staticmethod def _is_method(pyname): @@ -184,7 +182,8 @@ def to_call_info(self, definition_info): keywords.extend(self.keyword_args) return CallInfo(self.call_info.function_name, args, keywords, self.call_info.args_arg, self.call_info.keywords_arg, - self.call_info.implicit_arg, self.call_info.constructor) + self.call_info.implicit_arg, + self.call_info.constructor) class _FunctionParser(object): @@ -197,7 +196,8 @@ def __init__(self, call, implicit_arg, is_lambda=False): self.last_parens = self.call.rindex(':') else: self.last_parens = self.call.rindex(')') - self.first_parens = self.word_finder._find_parens_start(self.last_parens) + self.first_parens = self.word_finder._find_parens_start( + self.last_parens) def get_parameters(self): args, keywords = self.word_finder.get_parameters(self.first_parens, diff --git a/rope/refactor/importutils/__init__.py b/rope/refactor/importutils/__init__.py index 2a86edb08..6a71ed15b 100644 --- a/rope/refactor/importutils/__init__.py +++ b/rope/refactor/importutils/__init__.py @@ -81,7 +81,7 @@ def get_from_import(self, resource, name): if isinstance(name, list): names = [(imported, None) for imported in name] else: - names = [(name, None),] + names = [(name, None), ] return FromImport(module_name, 0, tuple(names)) def module_imports(self, module, imports_filter=None): @@ -103,7 +103,8 @@ def froms_to_imports(self, pymodule, import_filter=None): if not import_stmt.readonly and \ self._is_transformable_to_normal(import_stmt.import_info): import_stmt.import_info = \ - NormalImport(((import_stmt.import_info.module_name, None),)) + NormalImport(((import_stmt.import_info.module_name, + None),)) module_imports.remove_duplicates() return module_imports.get_changed_source() @@ -187,10 +188,12 @@ def organize_imports(self, pymodule, def _remove_self_imports(self, pymodule, import_filter=None): module_imports = self.module_imports(pymodule, import_filter) - to_be_fixed, to_be_renamed = module_imports.get_self_import_fix_and_rename_list() + to_be_fixed, to_be_renamed = \ + module_imports.get_self_import_fix_and_rename_list() for name in to_be_fixed: try: - pymodule = self._rename_in_module(pymodule, name, '', till_dot=True) + pymodule = self._rename_in_module(pymodule, name, '', + till_dot=True) except ValueError: # There is a self import with direct access to it return pymodule @@ -200,7 +203,8 @@ def _remove_self_imports(self, pymodule, import_filter=None): module_imports.get_self_import_fix_and_rename_list() source = module_imports.get_changed_source() if source is not None: - pymodule = self.pycore.get_string_module(source, pymodule.get_resource()) + pymodule = self.pycore.get_string_module(source, + pymodule.get_resource()) return pymodule def _rename_in_module(self, pymodule, name, new_name, till_dot=False): @@ -209,7 +213,8 @@ def _rename_in_module(self, pymodule, name, new_name, till_dot=False): occurrence_finder = occurrences.create_finder( self.pycore, old_name, old_pyname, imports=False) changes = rope.base.codeanalyze.ChangeCollector(pymodule.source_code) - for occurrence in occurrence_finder.find_occurrences(pymodule=pymodule): + for occurrence in occurrence_finder.find_occurrences( + pymodule=pymodule): start, end = occurrence.get_primary_range() if till_dot: new_end = pymodule.source_code.index('.', end) + 1 @@ -222,7 +227,8 @@ def _rename_in_module(self, pymodule, name, new_name, till_dot=False): changes.add_change(start, end, new_name) source = changes.get_changed() if source is not None: - pymodule = self.pycore.get_string_module(source, pymodule.get_resource()) + pymodule = self.pycore.get_string_module(source, + pymodule.get_resource()) return pymodule def sort_imports(self, pymodule, import_filter=None): diff --git a/rope/refactor/importutils/actions.py b/rope/refactor/importutils/actions.py index 4851d02f4..cc329cf9b 100644 --- a/rope/refactor/importutils/actions.py +++ b/rope/refactor/importutils/actions.py @@ -1,6 +1,3 @@ -import os -import sys - from rope.base import pyobjects, exceptions, stdmods from rope.refactor import occurrences from rope.refactor.importutils import importinfo @@ -35,7 +32,8 @@ def __init__(self, pycore, current_folder): self.context = importinfo.ImportContext(pycore, current_folder) def visitNormalImport(self, import_stmt, import_info): - self.to_be_absolute.extend(self._get_relative_to_absolute_list(import_info)) + self.to_be_absolute.extend( + self._get_relative_to_absolute_list(import_info)) new_pairs = [] for name, alias in import_info.names_and_aliases: resource = self.pycore.find_module(name, folder=self.folder) @@ -45,7 +43,7 @@ def visitNormalImport(self, import_stmt, import_info): absolute_name = self.pycore.modname(resource) new_pairs.append((absolute_name, alias)) if not import_info._are_name_and_alias_lists_equal( - new_pairs, import_info.names_and_aliases): + new_pairs, import_info.names_and_aliases): import_stmt.import_info = importinfo.NormalImport(new_pairs) def _get_relative_to_absolute_list(self, import_info): @@ -162,7 +160,8 @@ def visitNormalImport(self, import_stmt, import_info): # Multiple imports using a single import statement is discouraged # so we won't bother adding them. if self.import_info._are_name_and_alias_lists_equal( - import_info.names_and_aliases, self.import_info.names_and_aliases): + import_info.names_and_aliases, + self.import_info.names_and_aliases): return True def visitFromImport(self, import_stmt, import_info): @@ -228,7 +227,7 @@ def visitNormalImport(self, import_stmt, import_info): else: new_pairs.append((name, alias)) if not import_info._are_name_and_alias_lists_equal( - new_pairs, import_info.names_and_aliases): + new_pairs, import_info.names_and_aliases): import_stmt.import_info = importinfo.NormalImport(new_pairs) def visitFromImport(self, import_stmt, import_info): @@ -254,7 +253,7 @@ def visitFromImport(self, import_stmt, import_info): except exceptions.AttributeNotFoundError: new_pairs.append((name, alias)) if not import_info._are_name_and_alias_lists_equal( - new_pairs, import_info.names_and_aliases): + new_pairs, import_info.names_and_aliases): import_stmt.import_info = importinfo.FromImport( import_info.module_name, import_info.level, new_pairs) @@ -312,7 +311,6 @@ def __init__(self, current_folder, pycore, maxdots, maxlength): self.new_imports = [] def visitNormalImport(self, import_stmt, import_info): - new_pairs = [] for name, alias in import_info.names_and_aliases: if alias is None and self._is_long(name): self.to_be_renamed.add(name) @@ -324,7 +322,7 @@ def visitNormalImport(self, import_stmt, import_info): def _is_long(self, name): return name.count('.') > self.maxdots or \ - ('.' in name and len(name) > self.maxlength) + ('.' in name and len(name) > self.maxlength) class RemovePyNameVisitor(ImportInfoVisitor): @@ -356,4 +354,4 @@ def dispatch(self, import_): def _is_future(info): return isinstance(info, importinfo.FromImport) and \ - info.module_name == '__future__' + info.module_name == '__future__' diff --git a/rope/refactor/importutils/importinfo.py b/rope/refactor/importutils/importinfo.py index 25c8e813b..f69807abc 100644 --- a/rope/refactor/importutils/importinfo.py +++ b/rope/refactor/importutils/importinfo.py @@ -84,7 +84,7 @@ def _are_name_and_alias_lists_equal(self, list1, list2): def __eq__(self, obj): return isinstance(obj, self.__class__) and \ - self.get_import_statement() == obj.get_import_statement() + self.get_import_statement() == obj.get_import_statement() def __ne__(self, obj): return not self.__eq__(obj) @@ -180,7 +180,7 @@ def is_empty(self): def is_star_import(self): return len(self.names_and_aliases) > 0 and \ - self.names_and_aliases[0][0] == '*' + self.names_and_aliases[0][0] == '*' class EmptyImport(ImportInfo): diff --git a/rope/refactor/importutils/module_imports.py b/rope/refactor/importutils/module_imports.py index 874213f2f..1cd383f3e 100644 --- a/rope/refactor/importutils/module_imports.py +++ b/rope/refactor/importutils/module_imports.py @@ -38,7 +38,8 @@ def remove_unused_imports(self): def get_used_imports(self, defined_pyobject): result = [] - can_select = _OneTimeSelector(self._get_unbound_names(defined_pyobject)) + can_select = _OneTimeSelector( + self._get_unbound_names(defined_pyobject)) visitor = actions.FilteringVisitor( self.pycore, self._current_folder(), can_select) for import_statement in self.imports: @@ -61,7 +62,6 @@ def get_changed_source(self): # Writing imports sorted_imports = sorted(imports, self._compare_import_locations) for stmt in sorted_imports: - start = self._get_import_location(stmt) if stmt != sorted_imports[0]: result.append('\n' * stmt.blank_lines) result.append(stmt.get_import_statement() + '\n') @@ -182,7 +182,6 @@ def sort_imports(self): third_party = sorted(visitor.third_party, self._compare_imports) standards = sorted(visitor.standard, self._compare_imports) future = sorted(visitor.future, self._compare_imports) - blank_lines = 0 last_index = self._first_import_line() last_index = self._move_imports(future, last_index, 0) last_index = self._move_imports(standards, last_index, 1) @@ -277,7 +276,7 @@ def __init__(self, pyobject): def _visit_child_scope(self, node): pyobject = self.pyobject.get_module().get_scope().\ - get_inner_scope_for_line(node.lineno).pyobject + get_inner_scope_for_line(node.lineno).pyobject visitor = _LocalUnboundNameFinder(pyobject, self) for child in ast.get_child_nodes(node): ast.walk(child, visitor) @@ -428,13 +427,14 @@ def visit_from(self, node, end_line): if node.level: level = node.level import_info = importinfo.FromImport( - node.module or '', # see comment at rope.base.ast.walk + node.module or '', # see comment at rope.base.ast.walk level, self._get_names(node.names)) start_line = node.lineno self.imports.append(importinfo.ImportStatement( import_info, node.lineno, end_line, self._get_text(start_line, end_line), - blank_lines=self._count_empty_lines_before(start_line))) + blank_lines= + self._count_empty_lines_before(start_line))) def _get_names(self, alias_names): result = [] diff --git a/rope/refactor/inline.py b/rope/refactor/inline.py index cfd64a7e6..6ea1dacbe 100644 --- a/rope/refactor/inline.py +++ b/rope/refactor/inline.py @@ -26,12 +26,14 @@ from rope.refactor import (occurrences, rename, sourceutils, importutils, move, change_signature) + def unique_prefix(): n = 0 while True: yield "__" + str(n) + "__" n += 1 + def create_inline(project, resource, offset): """Create a refactoring object for inlining @@ -100,7 +102,6 @@ def _init_imports(self): def _get_scope_range(self): scope = self.pyfunction.get_scope() lines = self.pymodule.lines - logicals = self.pymodule.logical_lines start_line = scope.get_start() if self.pyfunction.decorators: decorators = self.pyfunction.decorators @@ -132,7 +133,7 @@ def get_changes(self, remove=True, only_current=False, resources=None, job_set.started_job(file.path) if file == self.resource: changes.add_change(self._defining_file_changes( - changes, remove=remove, only_current=only_current)) + changes, remove=remove, only_current=only_current)) else: aim = None if only_current and self.original == file: @@ -154,8 +155,6 @@ def get_changes(self, remove=True, only_current=False, resources=None, def _get_removed_range(self): scope = self.pyfunction.get_scope() lines = self.pymodule.lines - logical = self.pymodule.logical_lines - start_line = scope.get_start() start, end = self._get_scope_range() end_line = scope.get_end() for i in range(end_line + 1, lines.length()): @@ -200,7 +199,6 @@ def _is_the_last_method_of_a_class(self): return False class_start, class_end = sourceutils.get_body_region(pyclass) source = self.pymodule.source_code - lines = self.pymodule.lines func_start, func_end = self._get_scope_range() if source[class_start:func_start].strip() == '' and \ source[func_end:class_end].strip() == '': @@ -329,6 +327,7 @@ def _join_lines(lines): class _DefinitionGenerator(object): unique_prefix = unique_prefix() + def __init__(self, project, pyfunction, body=None): self.pycore = project.pycore self.pyfunction = pyfunction @@ -360,10 +359,11 @@ def _get_definition_params(self): def get_function_name(self): return self.pyfunction.get_name() - def get_definition(self, primary, pyname, call, host_vars=[],returns=False): + def get_definition(self, primary, pyname, call, host_vars=[], + returns=False): # caching already calculated definitions return self._calculate_definition(primary, pyname, call, - host_vars, returns) + host_vars, returns) def _calculate_header(self, primary, pyname, call): # A header is created which initializes parameters @@ -377,10 +377,6 @@ def _calculate_header(self, primary, pyname, call): paramdict[param_name] = value header = '' to_be_inlined = [] - mod = self.pycore.get_string_module(self.body) - all_names = mod.get_scope().get_names() - assigned_names = [name for name in all_names if - isinstance(all_names[name], rope.base.pynamesdef.AssignedName)] for name, value in paramdict.items(): if name != value and value is not None: header += name + ' = ' + value.replace('\n', ' ') + '\n' @@ -394,8 +390,9 @@ def _calculate_definition(self, primary, pyname, call, host_vars, returns): source = header + self.body mod = self.pycore.get_string_module(source) name_dict = mod.get_scope().get_names() - all_names = [x for x in name_dict if - not isinstance(name_dict[x], rope.base.builtins.BuiltinName)] + all_names = [x for x in name_dict if + not isinstance(name_dict[x], + rope.base.builtins.BuiltinName)] # If there is a name conflict, all variable names # inside the inlined function are renamed @@ -404,13 +401,13 @@ def _calculate_definition(self, primary, pyname, call, host_vars, returns): prefix = _DefinitionGenerator.unique_prefix.next() guest = self.pycore.get_string_module(source, self.resource) - to_be_inlined = [prefix+item for item in to_be_inlined] + to_be_inlined = [prefix + item for item in to_be_inlined] for item in all_names: pyname = guest[item] - occurrence_finder = occurrences.create_finder( - self.pycore, item, pyname) + occurrence_finder = occurrences.create_finder(self.pycore, + item, pyname) source = rename.rename_in_module(occurrence_finder, - prefix+item, pymodule=guest) + prefix + item, pymodule=guest) guest = self.pycore.get_string_module(source, self.resource) #parameters not reassigned inside the functions are now inlined. @@ -425,19 +422,22 @@ def _replace_returns_with(self, source, returns): result = [] returned = None last_changed = 0 - for match in _DefinitionGenerator._get_return_pattern().finditer(source): + for match in _DefinitionGenerator._get_return_pattern().finditer( + source): for key, value in match.groupdict().items(): if value and key == 'return': result.append(source[last_changed:match.start('return')]) if returns: self._check_nothing_after_return(source, match.end('return')) + beg_idx = match.end('return') returned = _join_lines( - source[match.end('return'): len(source)].splitlines()) + source[beg_idx:len(source)].splitlines()) last_changed = len(source) else: current = match.end('return') - while current < len(source) and source[current] in ' \t': + while current < len(source) and \ + source[current] in ' \t': current += 1 last_changed = current if current == len(source) or source[current] == '\n': @@ -452,7 +452,8 @@ def _check_nothing_after_return(self, source, offset): lineno = logical_lines.logical_line_in(lineno)[1] if source[lines.get_line_end(lineno):len(source)].strip() != '': raise rope.base.exceptions.RefactoringError( - 'Cannot inline functions with statements after return statement.') + 'Cannot inline functions with statements ' + + 'after return statement.') @classmethod def _get_return_pattern(cls): @@ -504,24 +505,24 @@ def occurred_outside_skip(self, change_collector, occurrence): end_parens = self._find_end_parens(self.source, end - 1) lineno = self.lines.get_line_number(start) start_line, end_line = self.pymodule.logical_lines.\ - logical_line_in(lineno) + logical_line_in(lineno) line_start = self.lines.get_line_start(start_line) line_end = self.lines.get_line_end(end_line) - returns = self.source[line_start:start].strip() != '' or \ - self.source[end_parens:line_end].strip() != '' + self.source[end_parens:line_end].strip() != '' indents = sourceutils.get_indents(self.lines, start_line) primary, pyname = occurrence.get_primary_and_pyname() host = self.pycore.resource_to_pyobject(self.resource) scope = host.scope.get_inner_scope_for_line(lineno) definition, returned = self.generator.get_definition( - primary, pyname, self.source[start:end_parens], scope.get_names(), returns=returns) + primary, pyname, self.source[start:end_parens], scope.get_names(), + returns=returns) end = min(line_end + 1, len(self.source)) - change_collector.add_change(line_start, end, - sourceutils.fix_indentation(definition, indents)) + change_collector.add_change( + line_start, end, sourceutils.fix_indentation(definition, indents)) if returns: name = returned if name is None: @@ -567,11 +568,12 @@ def _inline_variable(pycore, pymodule, pyname, name, if remove: lines = codeanalyze.SourceLinesAdapter(changed_source) source = changed_source[:lines.get_line_start(start)] + \ - changed_source[lines.get_line_end(end) + 1:] + changed_source[lines.get_line_end(end) + 1:] else: source = changed_source return source + def _getvardef(pymodule, pyname): assignment = pyname.assignments[0] lines = pymodule.lines @@ -581,14 +583,16 @@ def _getvardef(pymodule, pyname): if assignment.levels: raise rope.base.exceptions.RefactoringError( 'Cannot inline tuple assignments.') - definition = definition_with_assignment[definition_with_assignment.\ + definition = definition_with_assignment[definition_with_assignment. index('=') + 1:].strip() return definition + def _assigned_lineno(pymodule, pyname): definition_line = pyname.assignments[0].ast_node.lineno return pymodule.logical_lines.logical_line_in(definition_line) + def _add_imports(pycore, source, resource, imports): if not imports: return source @@ -601,6 +605,7 @@ def _add_imports(pycore, source, resource, imports): import_tools = importutils.ImportTools(pycore) return import_tools.organize_imports(pymodule, unused=False, sort=False) + def _get_pyname(pycore, resource, offset): pymodule = pycore.resource_to_pyobject(resource) pyname = evaluate.eval_location(pymodule, offset) @@ -608,6 +613,7 @@ def _get_pyname(pycore, resource, offset): pyname = pyname._get_imported_pyname() return pyname + def _remove_from(pycore, pyname, source, resource): pymodule = pycore.get_string_module(source, resource) module_import = importutils.get_module_imports(pycore, pymodule) diff --git a/rope/refactor/introduce_factory.py b/rope/refactor/introduce_factory.py index 5a885587a..611397d81 100644 --- a/rope/refactor/introduce_factory.py +++ b/rope/refactor/introduce_factory.py @@ -13,8 +13,9 @@ def __init__(self, project, resource, offset): this_pymodule = self.pycore.resource_to_pyobject(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): + if self.old_pyname is None or \ + not isinstance(self.old_pyname.get_object(), + rope.base.pyobjects.PyClass): raise rope.base.exceptions.RefactoringError( 'Introduce factory should be performed on a class.') self.old_name = self.old_pyname.get_object().get_name() @@ -111,7 +112,7 @@ def _get_factory_method(self, lines, class_scope, ('@staticmethod\ndef %s(*args, **kwds):\n' % factory_name + '%sreturn %s(*args, **kwds)\n' % (unit_indents, self.old_name)) indents = self._get_scope_indents(lines, class_scope) + \ - sourceutils.get_indent(self.pycore) + sourceutils.get_indent(self.pycore) return '\n' + sourceutils.indent_lines(unindented_factory, indents) def _get_scope_indents(self, lines, scope): diff --git a/rope/refactor/introduce_parameter.py b/rope/refactor/introduce_parameter.py index 312c61aa9..2a23b9170 100644 --- a/rope/refactor/introduce_parameter.py +++ b/rope/refactor/introduce_parameter.py @@ -79,7 +79,7 @@ def _get_header_offsets(self): lines = self.pymodule.lines start_line = self.pyfunction.get_scope().get_start() end_line = self.pymodule.logical_lines.\ - logical_line_in(start_line)[1] + logical_line_in(start_line)[1] start = lines.get_line_start(start_line) end = lines.get_line_end(end_line) start = self.pymodule.source_code.find('def', start) + 4 diff --git a/rope/refactor/localtofield.py b/rope/refactor/localtofield.py index 532d4c9e3..8fb102dad 100644 --- a/rope/refactor/localtofield.py +++ b/rope/refactor/localtofield.py @@ -26,7 +26,7 @@ def get_changes(self): new_name = self._get_field_name(function_scope.pyobject, name) changes = Rename(self.project, self.resource, self.offset).\ - get_changes(new_name, resources=[self.resource]) + get_changes(new_name, resources=[self.resource]) return changes def _check_redefinition(self, name, function_scope): @@ -45,6 +45,6 @@ def _is_a_method_local(self, pyname): holding_scope = pymodule.get_scope().get_inner_scope_for_line(lineno) parent = holding_scope.parent return isinstance(pyname, pynames.AssignedName) and \ - pyname in holding_scope.get_names().values() and \ - holding_scope.get_kind() == 'Function' and \ - parent is not None and parent.get_kind() == 'Class' + pyname in holding_scope.get_names().values() and \ + holding_scope.get_kind() == 'Function' and \ + parent is not None and parent.get_kind() == 'Class' diff --git a/rope/refactor/method_object.py b/rope/refactor/method_object.py index b3dd6bddd..f18cb5382 100644 --- a/rope/refactor/method_object.py +++ b/rope/refactor/method_object.py @@ -43,7 +43,8 @@ def get_changes(self, classname=None, new_class_name=None): insertion = self._get_class_insertion_point() collector.add_change(insertion, insertion, '\n\n' + self.get_new_class(classname)) - changes = change.ChangeSet('Replace method with method object refactoring') + changes = change.ChangeSet( + 'Replace method with method object refactoring') changes.add_change(change.ChangeContents(self.resource, collector.get_changed())) return changes diff --git a/rope/refactor/move.py b/rope/refactor/move.py index fc201434a..78e77c4a0 100644 --- a/rope/refactor/move.py +++ b/rope/refactor/move.py @@ -4,9 +4,11 @@ based on inputs. """ -from rope.base import pyobjects, codeanalyze, exceptions, pynames, taskhandle, evaluate, worder +from rope.base import (pyobjects, codeanalyze, exceptions, pynames, + taskhandle, evaluate, worder) from rope.base.change import ChangeSet, ChangeContents, MoveResource -from rope.refactor import importutils, rename, occurrences, sourceutils, functionutils +from rope.refactor import importutils, rename, occurrences, sourceutils, \ + functionutils def create_move(project, resource, offset=None): @@ -113,8 +115,8 @@ 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' % (dest_attr, new_name, - self._get_passed_arguments_string()) + body = 'return self.%s.%s(%s)\n' % ( + dest_attr, new_name, self._get_passed_arguments_string()) region = sourceutils.get_body_region(self.pyfunction) return (pymodule.get_resource(), region[0], region[1], sourceutils.fix_indentation(body, indents)) @@ -212,13 +214,15 @@ def __init__(self, project, resource, offset): def _check_exceptional_conditions(self): if self.old_pyname is None or \ - not isinstance(self.old_pyname.get_object(), pyobjects.PyDefinedObject): + not isinstance(self.old_pyname.get_object(), + pyobjects.PyDefinedObject): raise exceptions.RefactoringError( 'Move refactoring should be performed on a class/function.') moving_pyobject = self.old_pyname.get_object() if not self._is_global(moving_pyobject): raise exceptions.RefactoringError( - 'Move refactoring should be performed on a global class/function.') + 'Move refactoring should be performed ' + + 'on a global class/function.') def _is_global(self, pyobject): return pyobject.get_scope().parent == pyobject.get_module().get_scope() @@ -264,7 +268,8 @@ def _calculate_changes(self, dest, resources, task_handle): if should_import: pymodule = self.tools.new_pymodule(pymodule, source) source, imported = importutils.add_import( - self.pycore, pymodule, self._new_modname(dest), self.old_name) + self.pycore, pymodule, self._new_modname(dest), + self.old_name) source = source.replace(placeholder, imported) source = self.tools.new_source(pymodule, source) if source != file_.read(): @@ -310,7 +315,8 @@ def _dest_module_changes(self, dest): lineno = module_with_imports.imports[-1].end_line - 1 else: while lineno < pymodule.lines.length() and \ - pymodule.lines.get_line(lineno + 1).lstrip().startswith('#'): + pymodule.lines.get_line(lineno + 1).\ + lstrip().startswith('#'): lineno += 1 if lineno > 0: cut = pymodule.lines.get_line_end(lineno) + 1 @@ -345,7 +351,7 @@ def _get_moving_region(self): start = lines.get_line_start(scope.get_start()) end_line = scope.get_end() while end_line < lines.length() and \ - lines.get_line(end_line + 1).strip() == '': + lines.get_line(end_line + 1).strip() == '': end_line += 1 end = min(lines.get_line_end(end_line) + 1, len(pymodule.source_code)) return start, end @@ -385,7 +391,6 @@ def __init__(self, project, resource): def get_changes(self, dest, resources=None, task_handle=taskhandle.NullTaskHandle()): - moving_pyobject = self.old_pyname.get_object() if resources is None: resources = self.pycore.get_python_files() if dest is None or not dest.is_folder(): @@ -480,10 +485,12 @@ def __init__(self, pycore, source, pyname, old_name): def remove_old_imports(self, pymodule): old_source = pymodule.source_code module_with_imports = self.import_tools.module_imports(pymodule) + class CanSelect(object): changed = False old_name = self.old_name old_pyname = self.old_pyname + def __call__(self, name): try: if name == self.old_name and \ @@ -501,7 +508,7 @@ def __call__(self, name): return new_source def rename_in_module(self, new_name, pymodule=None, - imports=False, resource=None): + imports=False, resource=None): occurrence_finder = self._create_finder(imports) source = rename.rename_in_module( occurrence_finder, new_name, replace_primary=True, @@ -618,7 +625,8 @@ def get_changed_module(self): if self.replacement is not None: change_collector.add_change(self.skip_start, self.skip_end, self.replacement) - for occurrence in self.occurrence_finder.find_occurrences(self.resource): + for occurrence in self.occurrence_finder.find_occurrences( + self.resource): start, end = occurrence.get_primary_range() if self.skip_start <= start < self.skip_end: self.handle.occurred_inside_skip(change_collector, occurrence) diff --git a/rope/refactor/multiproject.py b/rope/refactor/multiproject.py index 6a85d2a28..e634d1f26 100644 --- a/rope/refactor/multiproject.py +++ b/rope/refactor/multiproject.py @@ -5,7 +5,7 @@ """ -from rope.base import resources, project, libutils +from rope.base import resources, libutils class MultiProjectRefactoring(object): @@ -57,7 +57,7 @@ def _resources_for_args(self, project, args, kwds): newkwds = dict((name, self._change_project_resource(project, value)) for name, value in kwds.items()) return newargs, newkwds - + def _change_project_resource(self, project, obj): if isinstance(obj, resources.Resource) and \ obj.project != project: diff --git a/rope/refactor/occurrences.py b/rope/refactor/occurrences.py index 2808ed2c3..f78ef3242 100644 --- a/rope/refactor/occurrences.py +++ b/rope/refactor/occurrences.py @@ -1,7 +1,8 @@ import re import rope.base.pynames -from rope.base import pynames, pyobjects, codeanalyze, evaluate, exceptions, utils, worder +from rope.base import (pynames, pyobjects, codeanalyze, evaluate, + exceptions, utils, worder) class Finder(object): @@ -96,7 +97,8 @@ def get_pyname(self): @utils.saveit def get_primary_and_pyname(self): try: - return self.tools.name_finder.get_primary_and_pyname_at(self.offset) + return self.tools.name_finder.get_primary_and_pyname_at( + self.offset) except exceptions.BadIdentifierError: pass @@ -109,11 +111,13 @@ def is_called(self): return self.tools.word_finder.is_a_function_being_called(self.offset) def is_defined(self): - return self.tools.word_finder.is_a_class_or_function_name_in_header(self.offset) + return self.tools.word_finder.is_a_class_or_function_name_in_header( + self.offset) def is_a_fixed_primary(self): - return self.tools.word_finder.is_a_class_or_function_name_in_header(self.offset) or \ - self.tools.word_finder.is_a_name_after_from_import(self.offset) + return self.tools.word_finder.is_a_class_or_function_name_in_header( + self.offset) or \ + self.tools.word_finder.is_a_name_after_from_import(self.offset) def is_written(self): return self.tools.word_finder.is_assigned_here(self.offset) @@ -134,11 +138,14 @@ def same_pyname(expected, pyname): return False if expected == pyname: return True - if type(expected) not in (pynames.ImportedModule, pynames.ImportedName) and \ - type(pyname) not in (pynames.ImportedModule, pynames.ImportedName): + if type(expected) not in (pynames.ImportedModule, pynames.ImportedName) \ + and type(pyname) not in \ + (pynames.ImportedModule, pynames.ImportedName): return False - return expected.get_definition_location() == pyname.get_definition_location() and \ - expected.get_object() == pyname.get_object() + return expected.get_definition_location() == \ + pyname.get_definition_location() and \ + expected.get_object() == pyname.get_object() + def unsure_pyname(pyname, unbound=True): """Return `True` if we don't know what this name references""" @@ -258,8 +265,10 @@ def _normal_search(self, source): try: found = source.index(self.name, current) current = found + len(self.name) - if (found == 0 or not self._is_id_char(source[found - 1])) and \ - (current == len(source) or not self._is_id_char(source[current])): + if (found == 0 or + not self._is_id_char(source[found - 1])) and \ + (current == len(source) or + not self._is_id_char(source[current])): yield found except ValueError: break @@ -282,7 +291,7 @@ def _get_source(self, resource, pymodule): def _get_occurrence_pattern(self, name): occurrence_pattern = _TextualFinder.any('occurrence', - ['\\b' + name + '\\b']) + ['\\b' + name + '\\b']) pattern = re.compile(occurrence_pattern + '|' + self.comment_pattern + '|' + self.string_pattern) return pattern diff --git a/rope/refactor/patchedast.py b/rope/refactor/patchedast.py index b9d9d2650..28d36d5a0 100644 --- a/rope/refactor/patchedast.py +++ b/rope/refactor/patchedast.py @@ -113,7 +113,8 @@ def _handle(self, node, base_children, eat_parens=False, eat_spaces=False): # INFO: This has been added to handle deprecated ``<>`` region = self.source.consume_not_equal() elif child == self.semicolon_or_as_in_except: - # INFO: This has been added to handle deprecated semicolon in except + # INFO: This has been added to handle deprecated + # semicolon in except region = self.source.consume_except_as_or_semicolon() else: region = self.source.consume(child) @@ -209,16 +210,17 @@ def _find_next_statement_start(self): for child in children: if isinstance(child, ast.stmt): return child.col_offset \ - + self.lines.get_line_start(child.lineno) + + self.lines.get_line_start(child.lineno) return len(self.source.source) - _operators = {'And': 'and', 'Or': 'or', 'Add': '+', 'Sub': '-', 'Mult': '*', - 'Div': '/', 'Mod': '%', 'Pow': '**', 'LShift': '<<', - 'RShift': '>>', 'BitOr': '|', 'BitAnd': '&', 'BitXor': '^', - 'FloorDiv': '//', 'Invert': '~', 'Not': 'not', 'UAdd': '+', - 'USub': '-', 'Eq': '==', 'NotEq': '!=', 'Lt': '<', - 'LtE': '<=', 'Gt': '>', 'GtE': '>=', 'Is': 'is', - 'IsNot': 'is not', 'In': 'in', 'NotIn': 'not in'} + _operators = {'And': 'and', 'Or': 'or', 'Add': '+', 'Sub': '-', + 'Mult': '*', 'Div': '/', 'Mod': '%', 'Pow': '**', + 'LShift': '<<', 'RShift': '>>', 'BitOr': '|', 'BitAnd': '&', + 'BitXor': '^', 'FloorDiv': '//', 'Invert': '~', + 'Not': 'not', 'UAdd': '+', 'USub': '-', 'Eq': '==', + 'NotEq': '!=', 'Lt': '<', 'LtE': '<=', 'Gt': '>', + 'GtE': '>=', 'Is': 'is', 'IsNot': 'is not', 'In': 'in', + 'NotIn': 'not in'} def _get_op(self, node): return self._operators[node.__class__.__name__].split(' ') @@ -355,7 +357,8 @@ def _ImportFrom(self, node): children = ['from'] if node.level: children.append('.' * node.level) - children.extend([node.module or '', # see comment at rope.base.ast.walk + # see comment at rope.base.ast.walk + children.extend([node.module or '', 'import']) children.extend(self._child_nodes(node.names, ',')) self._handle(node, children) @@ -384,7 +387,8 @@ def _FunctionDef(self, node): def _arguments(self, node): children = [] args = list(node.args) - defaults = [None] * (len(args) - len(node.defaults)) + list(node.defaults) + defaults = [None] * (len(args) - len(node.defaults)) + \ + list(node.defaults) for index, (arg, default) in enumerate(zip(args, defaults)): if index > 0: children.append(',') @@ -581,7 +585,7 @@ def _excepthandler(self, node): children.append(node.name) children.append(':') children.extend(node.body) - + self._handle(node, children) def _Tuple(self, node): @@ -670,12 +674,10 @@ def consume_not_equal(self): repattern = _Source._not_equals_pattern return self._consume_pattern(repattern) - def consume_except_as_or_semicolon(self): repattern = re.compile(r'as|,') return self._consume_pattern(repattern) - def _good_token(self, token, offset, start=None): """Checks whether consumed token is in comments""" if start is None: diff --git a/rope/refactor/rename.py b/rope/refactor/rename.py index 65e6e1d5d..1988d269f 100644 --- a/rope/refactor/rename.py +++ b/rope/refactor/rename.py @@ -1,8 +1,9 @@ import warnings -from rope.base import exceptions, pyobjects, pynames, taskhandle, evaluate, worder, codeanalyze +from rope.base import (exceptions, pyobjects, pynames, taskhandle, + evaluate, worder, codeanalyze) from rope.base.change import ChangeSet, ChangeContents, MoveResource -from rope.refactor import occurrences, sourceutils +from rope.refactor import occurrences class Rename(object): @@ -70,6 +71,7 @@ def get_changes(self, new_name, in_file=None, in_hierarchy=False, warnings.warn( 'unsure parameter should be a function that returns ' 'True or False', DeprecationWarning, stacklevel=2) + def unsure_func(value=unsure): return value unsure = unsure_func @@ -89,7 +91,8 @@ def unsure_func(value=unsure): self.pycore, self.old_name, self.old_pyname, unsure=unsure, docs=docs, instance=self.old_instance, in_hierarchy=in_hierarchy and self.is_method()) - job_set = task_handle.create_jobset('Collecting Changes', len(resources)) + job_set = task_handle.create_jobset('Collecting Changes', + len(resources)) for file_ in resources: job_set.started_job(file_.path) new_content = rename_in_module(finder, new_name, resource=file_) @@ -119,8 +122,8 @@ def _is_renaming_a_module(self): def is_method(self): pyname = self.old_pyname return isinstance(pyname, pynames.DefinedName) and \ - isinstance(pyname.get_object(), pyobjects.PyFunction) and \ - isinstance(pyname.get_object().parent, pyobjects.PyClass) + isinstance(pyname.get_object(), pyobjects.PyFunction) and \ + isinstance(pyname.get_object().parent, pyobjects.PyClass) def _rename_module(self, resource, new_name, changes): if not resource.is_folder(): @@ -161,7 +164,7 @@ def get_old_name(self): def _get_scope_offset(self): lines = self.pymodule.lines scope = self.pymodule.get_scope().\ - get_inner_scope_for_line(lines.get_line_number(self.offset)) + get_inner_scope_for_line(lines.get_line_number(self.offset)) start = lines.get_line_start(scope.get_start()) end = lines.get_line_end(scope.get_end()) return start, end @@ -181,8 +184,9 @@ def get_changes(self, new_name, only_calls=False, reads=True, writes=True): return changes -def rename_in_module(occurrences_finder, new_name, resource=None, pymodule=None, - replace_primary=False, region=None, reads=True, writes=True): +def rename_in_module(occurrences_finder, new_name, resource=None, + pymodule=None, replace_primary=False, region=None, + reads=True, writes=True): """Returns the changed source or `None` if there is no changes""" if resource is not None: source_code = resource.read() @@ -203,6 +207,7 @@ def rename_in_module(occurrences_finder, new_name, resource=None, pymodule=None, change_collector.add_change(start, end, new_name) return change_collector.get_changed() + def _is_local(pyname): module, lineno = pyname.get_definition_location() if lineno is None: @@ -212,5 +217,5 @@ def _is_local(pyname): scope.get_kind() in ('Function', 'Class'): scope = scope.parent return scope.get_kind() == 'Function' and \ - pyname in scope.get_names().values() and \ - isinstance(pyname, pynames.AssignedName) + pyname in scope.get_names().values() and \ + isinstance(pyname, pynames.AssignedName) diff --git a/rope/refactor/restructure.py b/rope/refactor/restructure.py index 1573c2fea..3798f345e 100644 --- a/rope/refactor/restructure.py +++ b/rope/refactor/restructure.py @@ -183,7 +183,7 @@ def make_checks(self, string_checks): checks = {} for key, value in string_checks.items(): is_pyname = not key.endswith('.object') and \ - not key.endswith('.type') + not key.endswith('.type') evaluated = self._evaluate(value, is_pyname=is_pyname) if evaluated is not None: checks[key] = evaluated diff --git a/rope/refactor/similarfinder.py b/rope/refactor/similarfinder.py index e09136bc1..6b6dd815c 100644 --- a/rope/refactor/similarfinder.py +++ b/rope/refactor/similarfinder.py @@ -2,9 +2,8 @@ import re import rope.refactor.wildcards -from rope.base import codeanalyze, evaluate, exceptions, ast, builtins -from rope.refactor import (patchedast, sourceutils, occurrences, - wildcards, importutils) +from rope.base import codeanalyze, exceptions, ast, builtins +from rope.refactor import (patchedast, wildcards) from rope.refactor.patchedast import MismatchedTokenError @@ -27,7 +26,7 @@ def __init__(self, pymodule, wildcards=None): try: self.raw_finder = RawSimilarFinder( pymodule.source_code, pymodule.get_ast(), self._does_match) - except MismatchedTokenError as ex: + except MismatchedTokenError: print "in file %s" % pymodule.resource.path raise self.pymodule = pymodule @@ -47,7 +46,7 @@ def get_matches(self, code, args={}, start=0, end=None): if 'skip' in args.get('', {}): resource, region = args['']['skip'] if resource == self.pymodule.get_resource(): - skip_region = region + skip_region = region return self.raw_finder.get_matches(code, start=start, end=end, skip=skip_region) @@ -103,7 +102,7 @@ def get_matches(self, code, start=0, end=None, skip=None): if start <= match_start and match_end <= end: if skip is not None and (skip[0] < match_end and skip[1] > match_start): - continue + continue yield match def _get_matched_asts(self, code): @@ -181,8 +180,8 @@ def __check_stmt_list(self, nodes): def _match_nodes(self, expected, node, mapping): if isinstance(expected, ast.Name): - if self.ropevar.is_var(expected.id): - return self._match_wildcard(expected, node, mapping) + if self.ropevar.is_var(expected.id): + return self._match_wildcard(expected, node, mapping) if not isinstance(expected, ast.AST): return expected == node if expected.__class__ != node.__class__: @@ -302,8 +301,8 @@ def substitute(self, mapping): def _get_pattern(cls): if cls._match_pattern is None: pattern = codeanalyze.get_comment_pattern() + '|' + \ - codeanalyze.get_string_pattern() + '|' + \ - r'(?P\$\{[^\s\$\}]*\})' + codeanalyze.get_string_pattern() + '|' + \ + r'(?P\$\{[^\s\$\}]*\})' cls._match_pattern = re.compile(pattern) return cls._match_pattern @@ -345,6 +344,7 @@ def _is_var(self, name): def make_pattern(code, variables): variables = set(variables) collector = codeanalyze.ChangeCollector(code) + def does_match(node, name): return isinstance(node, ast.Name) and node.id == name finder = RawSimilarFinder(code, does_match=does_match) @@ -358,7 +358,8 @@ def does_match(node, name): def _pydefined_to_str(pydefined): address = [] - if isinstance(pydefined, (builtins.BuiltinClass, builtins.BuiltinFunction)): + if isinstance(pydefined, + (builtins.BuiltinClass, builtins.BuiltinFunction)): return '__builtins__.' + pydefined.get_name() else: while pydefined.parent is not None: diff --git a/rope/refactor/sourceutils.py b/rope/refactor/sourceutils.py index f64213db9..6e5041f40 100644 --- a/rope/refactor/sourceutils.py +++ b/rope/refactor/sourceutils.py @@ -1,4 +1,4 @@ -from rope.base import ast, codeanalyze +from rope.base import codeanalyze def get_indents(lines, lineno): @@ -58,7 +58,7 @@ def add_methods(pymodule, class_scope, methods_sources): def get_body(pyfunction): """Return unindented function body""" - scope = pyfunction.get_scope() + # FIXME scope = pyfunction.get_scope() pymodule = pyfunction.get_module() start, end = get_body_region(pyfunction) return fix_indentation(pymodule.source_code[start:end], 0) diff --git a/rope/refactor/suites.py b/rope/refactor/suites.py index d955c8191..4f9a8c715 100644 --- a/rope/refactor/suites.py +++ b/rope/refactor/suites.py @@ -14,6 +14,7 @@ def find_visible_for_suite(root, lines): line2 = find_visible_for_suite(root, lines[1:]) suite1 = root.find_suite(line1) suite2 = root.find_suite(line2) + def valid(suite): return suite is not None and not suite.ignored if valid(suite1) and not valid(suite2): diff --git a/rope/refactor/topackage.py b/rope/refactor/topackage.py index b71139797..d8e1d82e4 100644 --- a/rope/refactor/topackage.py +++ b/rope/refactor/topackage.py @@ -1,5 +1,6 @@ import rope.refactor.importutils -from rope.base.change import ChangeSet, ChangeContents, MoveResource, CreateFolder +from rope.base.change import ChangeSet, ChangeContents, MoveResource, \ + CreateFolder class ModuleToPackage(object): diff --git a/rope/refactor/usefunction.py b/rope/refactor/usefunction.py index b06215256..1a147ab23 100644 --- a/rope/refactor/usefunction.py +++ b/rope/refactor/usefunction.py @@ -1,6 +1,6 @@ from rope.base import (change, taskhandle, evaluate, exceptions, pyobjects, pynames, ast) -from rope.refactor import restructure, sourceutils, similarfinder, importutils +from rope.refactor import restructure, sourceutils, similarfinder class UseFunction(object): @@ -55,7 +55,6 @@ def get_function_name(self): return self.pyfunction.get_name() def _restructure(self, resources, task_handle, others=True): - body = self._get_body() pattern = self._make_pattern() goal = self._make_goal(import_=others) imports = None @@ -135,16 +134,19 @@ def find_temps(project, code): def _returns_last(node): return node.body and isinstance(node.body[-1], ast.Return) + def _yield_count(node): visitor = _ReturnOrYieldFinder() visitor.start_walking(node) return visitor.yields + def _return_count(node): visitor = _ReturnOrYieldFinder() visitor.start_walking(node) return visitor.returns + class _ReturnOrYieldFinder(object): def __init__(self): diff --git a/rope/refactor/wildcards.py b/rope/refactor/wildcards.py index 6c487a2af..57ff80154 100644 --- a/rope/refactor/wildcards.py +++ b/rope/refactor/wildcards.py @@ -100,7 +100,7 @@ def __call__(self, pymodule, node): pyname = self._evaluate_node(pymodule, node) if pyname is None or self.expected is None: return self.unsure - if self._unsure_pyname(pyname, unbound=self.kind=='name'): + if self._unsure_pyname(pyname, unbound=self.kind == 'name'): return True if self.kind == 'name': return self._same_pyname(self.expected, pyname) @@ -161,8 +161,10 @@ def _evaluate(self, code): class _BuiltinsStub(object): def get_attribute(self, name): return builtins.builtins[name] + def __getitem__(self, name): return builtins.builtins[name] + def __contains__(self, name): return name in builtins.builtins pyobject = _BuiltinsStub() diff --git a/ropetest/advanced_oi_test.py b/ropetest/advanced_oi_test.py index 5fed5bbae..da595342c 100644 --- a/ropetest/advanced_oi_test.py +++ b/ropetest/advanced_oi_test.py @@ -42,17 +42,16 @@ def test_class_from_another_module_dti(self): mod2 = testutils.create_module(self.project, 'mod2') code1 = 'class AClass(object):\n pass\n' code2 = 'from mod1 import AClass\n' \ - '\ndef a_func(arg):\n return eval("arg")\n' \ - 'a_var = a_func(AClass)\n' + '\ndef a_func(arg):\n return eval("arg")\n' \ + 'a_var = a_func(AClass)\n' mod1.write(code1) mod2.write(code2) self.pycore.run_module(mod2).wait_process() - pymod1 = self.pycore.resource_to_pyobject(mod1) + #pymod1 = self.pycore.resource_to_pyobject(mod1) pymod2 = self.pycore.resource_to_pyobject(mod2) self.assertEquals(pymod2['AClass'].get_object(), pymod2['a_var'].get_object()) - def test_class_dti(self): mod = testutils.create_module(self.project, 'mod') code = 'class AClass(object):\n pass\n' \ @@ -217,19 +216,23 @@ def test_strs_and_dynamicoi(self): def test_textual_transformations(self): mod = testutils.create_module(self.project, 'mod') - code = 'class C(object):\n pass\ndef f():\n pass\na_var = C()\n' \ + code = 'class C(object):\n pass\ndef f():' \ + '\n pass\na_var = C()\n' \ 'a_list = [C()]\na_str = "hey"\na_file = open("file.txt")\n' mod.write(code) to_pyobject = rope.base.oi.transform.TextualToPyObject(self.project) to_textual = rope.base.oi.transform.PyObjectToTextual(self.project) pymod = self.pycore.resource_to_pyobject(mod) + def complex_to_textual(pyobject): return to_textual.transform( to_pyobject.transform(to_textual.transform(pyobject))) for name in ('C', 'f', 'a_var', 'a_list', 'a_str', 'a_file'): var = pymod[name].get_object() - self.assertEquals(to_textual.transform(var), complex_to_textual(var)) - self.assertEquals(to_textual.transform(pymod), complex_to_textual(pymod)) + self.assertEquals(to_textual.transform(var), + complex_to_textual(var)) + self.assertEquals(to_textual.transform(pymod), + complex_to_textual(pymod)) enumerate_func = rope.base.builtins.builtins['enumerate'].get_object() self.assertEquals(to_textual.transform(enumerate_func), complex_to_textual(enumerate_func)) @@ -283,7 +286,8 @@ def test_a_function_with_different_returns2(self): def test_ignoring_star_args(self): mod = testutils.create_module(self.project, 'mod') code = 'class C1(object):\n pass\nclass C2(object):\n pass\n' \ - 'def a_func(p, *args):\n if p == C1:\n return C1()\n' \ + 'def a_func(p, *args):' \ + '\n if p == C1:\n return C1()\n' \ ' else:\n return C2()\n' \ 'a = a_func(C1, 1)\nb = a_func(C2, 2)\n' mod.write(code) @@ -299,7 +303,8 @@ def test_ignoring_star_args(self): def test_ignoring_double_star_args(self): mod = testutils.create_module(self.project, 'mod') code = 'class C1(object):\n pass\nclass C2(object):\n pass\n' \ - 'def a_func(p, *kwds, **args):\n if p == C1:\n return C1()\n' \ + 'def a_func(p, *kwds, **args):\n ' \ + 'if p == C1:\n return C1()\n' \ ' else:\n return C2()\n' \ 'a = a_func(C1, kwd=1)\nb = a_func(C2, kwd=2)\n' mod.write(code) @@ -396,7 +401,7 @@ def test_static_oi_preventing_soi_maximum_recursion_exceptions(self): except RuntimeError, e: self.fail(str(e)) - def test_static_oi_for_infering_returned_types_from_functions_based_on_parameters(self): + def test_static_oi_for_infer_return_typs_from_funcs_based_on_params(self): code = 'class C(object):\n pass\ndef func(p):\n return p\n' \ 'a_var = func(C())\n' self.mod.write(code) @@ -461,8 +466,9 @@ def test_handling_generator_functions_for_strs(self): self.assertEquals(c_class, a_var.get_type()) # TODO: Returning a generator for functions that yield unknowns - def xxx_test_handling_generator_functions_when_unknown_type_is_yielded(self): - self.mod.write('class C(object):\n pass\ndef f():\n yield eval("C()")\n' + def xxx_test_handl_generator_functions_when_unknown_type_is_yielded(self): + self.mod.write('class C(object):\n pass' + '\ndef f():\n yield eval("C()")\n' 'a_var = f()\n') pymod = self.pycore.resource_to_pyobject(self.mod) a_var = pymod['a_var'].get_object() @@ -491,7 +497,8 @@ def test_static_oi_for_lists_per_object_for_get_item(self): def test_static_oi_for_lists_per_object_for_fields(self): code = 'class C(object):\n pass\n' \ - 'class A(object):\n def __init__(self):\n self.l = []\n' \ + 'class A(object):\n ' \ + 'def __init__(self):\n self.l = []\n' \ ' def set(self):\n self.l.append(C())\n' \ 'a = A()\na.set()\na_var = a.l[0]\n' self.mod.write(code) @@ -547,7 +554,8 @@ def test_static_oi_for_dicts_depending_on_append_function(self): def test_static_oi_for_dicts_depending_on_for_loops(self): code = 'class C1(object):\n pass\nclass C2(object):\n pass\n' \ - 'd = {}\nd[C1()] = C2()\nfor k, v in d.items():\n a = k\n b = v\n' + 'd = {}\nd[C1()] = C2()\n' \ + 'for k, v in d.items():\n a = k\n b = v\n' self.mod.write(code) self.pycore.analyze_module(self.mod) pymod = self.pycore.resource_to_pyobject(self.mod) @@ -560,7 +568,8 @@ def test_static_oi_for_dicts_depending_on_for_loops(self): def test_static_oi_for_dicts_depending_on_update(self): code = 'class C1(object):\n pass\nclass C2(object):\n pass\n' \ - 'd = {}\nd[C1()] = C2()\nd2 = {}\nd2.update(d)\na, b = d2.popitem()\n' + 'd = {}\nd[C1()] = C2()\n' \ + 'd2 = {}\nd2.update(d)\na, b = d2.popitem()\n' self.mod.write(code) self.pycore.analyze_module(self.mod) pymod = self.pycore.resource_to_pyobject(self.mod) @@ -620,7 +629,8 @@ def test_soi_on_constructors(self): def test_not_saving_unknown_function_returns(self): mod2 = testutils.create_module(self.project, 'mod2') self.mod.write('class C(object):\n pass\nl = []\nl.append(C())\n') - mod2.write('import mod\ndef f():\n return mod.l.pop()\na_var = f()\n') + mod2.write('import mod\ndef f():\n ' + 'return mod.l.pop()\na_var = f()\n') pymod = self.pycore.resource_to_pyobject(self.mod) pymod2 = self.pycore.resource_to_pyobject(mod2) c_class = pymod['C'].get_object() @@ -700,8 +710,8 @@ def test_validation_problems_for_changing_builtin_types(self): self.pycore.analyze_module(mod1) mod1.write('l = {}\nv = l["key"]\n') - pymod1 = self.pycore.resource_to_pyobject(mod1) - var = pymod1['v'].get_object() + pymod1 = self.pycore.resource_to_pyobject(mod1) # noqa + var = pymod1['v'].get_object() # noqa def test_always_returning_containing_class_for_selfs(self): code = 'class A(object):\n def f(p):\n return p\n' \ diff --git a/ropetest/builtinstest.py b/ropetest/builtinstest.py index 416d7fb2c..99f448d85 100644 --- a/ropetest/builtinstest.py +++ b/ropetest/builtinstest.py @@ -22,14 +22,16 @@ def test_simple_case(self): self.assertTrue('append' in pymod['l'].get_object()) def test_holding_type_information(self): - self.mod.write('class C(object):\n pass\nl = [C()]\na_var = l.pop()\n') + self.mod.write('class C(object):\n pass\n' + 'l = [C()]\na_var = l.pop()\n') pymod = self.pycore.resource_to_pyobject(self.mod) c_class = pymod['C'].get_object() a_var = pymod['a_var'].get_object() self.assertEquals(c_class, a_var.get_type()) def test_get_items(self): - self.mod.write('class C(object):\n def __getitem__(self, i):\n return C()\n' + self.mod.write('class C(object):' + '\n def __getitem__(self, i):\n return C()\n' 'c = C()\na_var = c[0]') pymod = self.pycore.resource_to_pyobject(self.mod) c_class = pymod['C'].get_object() @@ -44,7 +46,8 @@ def test_get_items_for_lists(self): self.assertEquals(c_class, a_var.get_type()) def test_get_items_from_slices(self): - self.mod.write('class C(object):\n pass\nl = [C()]\na_var = l[:].pop()\n') + self.mod.write('class C(object):\n pass' + '\nl = [C()]\na_var = l[:].pop()\n') pymod = self.pycore.resource_to_pyobject(self.mod) c_class = pymod['C'].get_object() a_var = pymod['a_var'].get_object() @@ -71,21 +74,24 @@ def test_simple_case_for_dicts(self): self.assertTrue('get' in pymod['d'].get_object()) def test_get_item_for_dicts(self): - self.mod.write('class C(object):\n pass\nd = {1: C()}\na_var = d[1]\n') + self.mod.write('class C(object):\n pass\n' + 'd = {1: C()}\na_var = d[1]\n') pymod = self.pycore.resource_to_pyobject(self.mod) c_class = pymod['C'].get_object() a_var = pymod['a_var'].get_object() self.assertEquals(c_class, a_var.get_type()) def test_popping_dicts(self): - self.mod.write('class C(object):\n pass\nd = {1: C()}\na_var = d.pop(1)\n') + self.mod.write('class C(object):\n pass\n' + 'd = {1: C()}\na_var = d.pop(1)\n') pymod = self.pycore.resource_to_pyobject(self.mod) c_class = pymod['C'].get_object() a_var = pymod['a_var'].get_object() self.assertEquals(c_class, a_var.get_type()) def test_getting_keys_from_dicts(self): - self.mod.write('class C1(object):\n pass\nclass C2(object):\n pass\n' + self.mod.write('class C1(object):\n pass\n' + 'class C2(object):\n pass\n' 'd = {C1(): C2()}\nfor c in d.keys():\n a_var = c\n') pymod = self.pycore.resource_to_pyobject(self.mod) c_class = pymod['C1'].get_object() @@ -93,15 +99,18 @@ def test_getting_keys_from_dicts(self): self.assertEquals(c_class, a_var.get_type()) def test_getting_values_from_dicts(self): - self.mod.write('class C1(object):\n pass\nclass C2(object):\n pass\n' - 'd = {C1(): C2()}\nfor c in d.values():\n a_var = c\n') + self.mod.write('class C1(object):\n pass\n' + 'class C2(object):\n pass\n' + 'd = {C1(): C2()}\nfor c in d.values():' + '\n a_var = c\n') pymod = self.pycore.resource_to_pyobject(self.mod) c_class = pymod['C2'].get_object() a_var = pymod['a_var'].get_object() self.assertEquals(c_class, a_var.get_type()) def test_getting_iterkeys_from_dicts(self): - self.mod.write('class C1(object):\n pass\nclass C2(object):\n pass\n' + self.mod.write('class C1(object):\n pass' + '\nclass C2(object):\n pass\n' 'd = {C1(): C2()}\nfor c in d.keys():\n a_var = c\n') pymod = self.pycore.resource_to_pyobject(self.mod) c_class = pymod['C1'].get_object() @@ -109,15 +118,18 @@ def test_getting_iterkeys_from_dicts(self): self.assertEquals(c_class, a_var.get_type()) def test_getting_itervalues_from_dicts(self): - self.mod.write('class C1(object):\n pass\nclass C2(object):\n pass\n' - 'd = {C1(): C2()}\nfor c in d.values():\n a_var = c\n') + self.mod.write('class C1(object):\n pass' + '\nclass C2(object):\n pass\n' + 'd = {C1(): C2()}\nfor c in d.values():' + '\n a_var = c\n') pymod = self.pycore.resource_to_pyobject(self.mod) c_class = pymod['C2'].get_object() a_var = pymod['a_var'].get_object() self.assertEquals(c_class, a_var.get_type()) def test_using_copy_for_dicts(self): - self.mod.write('class C1(object):\n pass\nclass C2(object):\n pass\n' + self.mod.write('class C1(object):\n pass' + '\nclass C2(object):\n pass\n' 'd = {C1(): C2()}\nfor c in d.copy():\n a_var = c\n') pymod = self.pycore.resource_to_pyobject(self.mod) c_class = pymod['C1'].get_object() @@ -125,7 +137,8 @@ def test_using_copy_for_dicts(self): self.assertEquals(c_class, a_var.get_type()) def test_tuple_assignments_for_items(self): - self.mod.write('class C1(object):\n pass\nclass C2(object):\n pass\n' + self.mod.write('class C1(object):\n pass' + '\nclass C2(object):\n pass\n' 'd = {C1(): C2()}\nkey, value = d.items()[0]\n') pymod = self.pycore.resource_to_pyobject(self.mod) c1_class = pymod['C1'].get_object() @@ -136,7 +149,8 @@ def test_tuple_assignments_for_items(self): self.assertEquals(c2_class, value.get_type()) def test_tuple_assignment_for_lists(self): - self.mod.write('class C(object):\n pass\nl = [C(), C()]\na, b = l\n') + self.mod.write('class C(object):\n pass\n' + 'l = [C(), C()]\na, b = l\n') pymod = self.pycore.resource_to_pyobject(self.mod) c_class = pymod['C'].get_object() a_var = pymod['a'].get_object() @@ -145,8 +159,10 @@ def test_tuple_assignment_for_lists(self): self.assertEquals(c_class, b_var.get_type()) def test_tuple_assignments_for_iteritems_in_fors(self): - self.mod.write('class C1(object):\n pass\nclass C2(object):\n pass\n' - 'd = {C1(): C2()}\nfor x, y in d.items():\n a = x;\n b = y\n') + self.mod.write('class C1(object):\n pass\n' + 'class C2(object):\n pass\n' + 'd = {C1(): C2()}\n' + 'for x, y in d.items():\n a = x;\n b = y\n') pymod = self.pycore.resource_to_pyobject(self.mod) c1_class = pymod['C1'].get_object() c2_class = pymod['C2'].get_object() @@ -156,7 +172,8 @@ def test_tuple_assignments_for_iteritems_in_fors(self): self.assertEquals(c2_class, b_var.get_type()) def test_simple_tuple_assignments(self): - self.mod.write('class C1(object):\n pass\nclass C2(object):\n pass\n' + self.mod.write('class C1(object):' + '\n pass\nclass C2(object):\n pass\n' 'a, b = C1(), C2()\n') pymod = self.pycore.resource_to_pyobject(self.mod) c1_class = pymod['C1'].get_object() @@ -208,7 +225,8 @@ def test_making_sets_using_the_passed_argument_to_init(self): self.assertEquals(c_class, a_var.get_type()) def test_making_dicts_using_the_passed_argument_to_init(self): - self.mod.write('class C1(object):\n pass\nclass C2(object):\n pass\n' + self.mod.write('class C1(object):\n pass\n' + 'class C2(object):\n pass\n' 'l1 = [(C1(), C2())]\n' 'l2 = dict(l1)\na, b = l2.items()[0]') pymod = self.pycore.resource_to_pyobject(self.mod) @@ -245,7 +263,8 @@ def test_super_builtin_function(self): self.mod.write( 'class C(object):\n pass\n' 'class A(object):\n def a_f(self):\n return C()\n' - 'class B(A):\n def b_f(self):\n return super(B, self).a_f()\n' + 'class B(A):\n def b_f(self):\n ' + 'return super(B, self).a_f()\n' 'a_var = B.b_f()\n') pymod = self.pycore.resource_to_pyobject(self.mod) c_class = pymod['C'].get_object() @@ -321,7 +340,7 @@ def test_wrong_arguments_to_zip_function(self): pymod = self.pycore.resource_to_pyobject(self.mod) c1_class = pymod['C1'].get_object() a_var = pymod['a'].get_object() - b_var = pymod['b'].get_object() + b_var = pymod['b'].get_object() # noqa self.assertEquals(c1_class, a_var.get_type()) def test_enumerate_builtin_function(self): @@ -335,8 +354,8 @@ def test_enumerate_builtin_function(self): def test_builtin_class_get_name(self): self.assertEquals('object', builtins.builtins['object'].get_object().get_name()) - self.assertEquals('property', - builtins.builtins['property'].get_object().get_name()) + self.assertEquals( + 'property', builtins.builtins['property'].get_object().get_name()) def test_star_args_and_double_star_args(self): self.mod.write('def func(p, *args, **kwds):\n pass\n') @@ -460,7 +479,7 @@ def test_ignored_extensions(self): pymod = self.pycore.resource_to_pyobject(self.mod) self.assertTrue('rename' not in pymod['os'].get_object()) - def test_ignored_extensions(self): + def test_ignored_extensions_2(self): self.mod.write('import os') pymod = self.pycore.resource_to_pyobject(self.mod) self.assertTrue('rename' not in pymod['os'].get_object()) @@ -470,7 +489,7 @@ def test_nonexistent_modules(self): pymod = self.pycore.resource_to_pyobject(self.mod) pymod['invalid'].get_object() - def test_nonexistent_modules(self): + def test_nonexistent_modules_2(self): self.mod.write('import invalid\nimport invalid.sub') pymod = self.pycore.resource_to_pyobject(self.mod) invalid = pymod['invalid'].get_object() diff --git a/ropetest/codeanalyzetest.py b/ropetest/codeanalyzetest.py index bd276cc05..3881990c0 100644 --- a/ropetest/codeanalyzetest.py +++ b/ropetest/codeanalyzetest.py @@ -4,8 +4,9 @@ import unittest import rope.base.evaluate -from rope.base import exceptions, ast, worder, codeanalyze -from rope.base.codeanalyze import SourceLinesAdapter, LogicalLineFinder, get_block_start +from rope.base import exceptions, worder, codeanalyze +from rope.base.codeanalyze import (SourceLinesAdapter, + LogicalLineFinder, get_block_start) from ropetest import testutils @@ -115,7 +116,8 @@ def test_strings(self): def test_function_calls2(self): code = 'file("afile.txt").read()' - self.assertEquals('file("afile.txt").read', self._find_primary(code, 18)) + self.assertEquals('file("afile.txt").read', + self._find_primary(code, 18)) def test_parens(self): code = '("afile.txt").split()' @@ -212,7 +214,8 @@ def test_import_statement_finding(self): code = 'import mod\na_var = 10\n' word_finder = worder.Worder(code) self.assertTrue(word_finder.is_import_statement(code.index('mod') + 1)) - self.assertFalse(word_finder.is_import_statement(code.index('a_var') + 1)) + self.assertFalse(word_finder.is_import_statement( + code.index('a_var') + 1)) def test_import_statement_finding2(self): code = 'import a.b.c.d\nresult = a.b.c.d.f()\n' @@ -232,7 +235,7 @@ def test_getting_primary_before_get_index(self): def test_getting_primary_and_strings_at_the_end_of_line(self): code = 'f(\'\\\'\')\n' - result = self._find_primary(code, len(code) - 1) + result = self._find_primary(code, len(code) - 1) # noqa def test_getting_primary_and_not_crossing_newlines(self): code = '\na = (b + c)\n(4 + 1).x\n' @@ -448,7 +451,7 @@ def test_relative_modules_after_from_statements2(self): mod1 = testutils.create_module(self.project, 'mod1') pkg1 = testutils.create_package(self.project, 'pkg1') pkg2 = testutils.create_package(self.project, 'pkg2', pkg1) - mod2 = testutils.create_module(self.project, 'mod2', pkg2) + mod2 = testutils.create_module(self.project, 'mod2', pkg2) # noqa mod1.write('import pkg1.pkg2.mod2') mod1_scope = self.pycore.resource_to_pyobject(mod1).get_scope() @@ -524,7 +527,8 @@ def test_explicit_continuation_comments(self): self.assertEquals((2, 2), line_finder.logical_line_in(2)) def test_multiple_indented_ifs(self): - code = 'if True:\n if True:\n if True:\n pass\n a = 10\n' + code = 'if True:\n if True:\n ' \ + 'if True:\n pass\n a = 10\n' line_finder = self._logical_finder(code) self.assertEquals((5, 5), line_finder.logical_line_in(5)) @@ -590,6 +594,7 @@ def test_generating_line_starts_and_unmatched_deindents(self): line_finder = self._logical_finder(code) self.assertEquals([4, 5], list(line_finder.generate_starts(4))) + class TokenizerLogicalLineFinderTest(LogicalLineFinderTest): def _logical_finder(self, code): @@ -597,6 +602,7 @@ def _logical_finder(self, code): return codeanalyze.CachingLogicalLineFinder( lines, codeanalyze.tokenizer_generator) + class CustomLogicalLineFinderTest(LogicalLineFinderTest): def _logical_finder(self, code): diff --git a/ropetest/contrib/autoimporttest.py b/ropetest/contrib/autoimporttest.py index e4bd48e03..f26de801d 100644 --- a/ropetest/contrib/autoimporttest.py +++ b/ropetest/contrib/autoimporttest.py @@ -127,6 +127,7 @@ def test_submodules(self): self.assertEquals(set([self.mod2, self.pkg]), autoimport.submodules(self.pkg)) + class AutoImportObservingTest(unittest.TestCase): def setUp(self): diff --git a/ropetest/contrib/changestacktest.py b/ropetest/contrib/changestacktest.py index 3e77a57a9..ba16c4704 100644 --- a/ropetest/contrib/changestacktest.py +++ b/ropetest/contrib/changestacktest.py @@ -2,7 +2,7 @@ import rope.base.history import rope.contrib.changestack -from rope.base.change import * +import rope.base.change from ropetest import testutils @@ -20,9 +20,9 @@ def test_change_stack(self): myfile = self.project.root.create_file('myfile.txt') myfile.write('1') stack = rope.contrib.changestack.ChangeStack(self.project) - stack.push(ChangeContents(myfile, '2')) + stack.push(rope.base.change.ChangeContents(myfile, '2')) self.assertEquals('2', myfile.read()) - stack.push(ChangeContents(myfile, '3')) + stack.push(rope.base.change.ChangeContents(myfile, '3')) self.assertEquals('3', myfile.read()) stack.pop_all() self.assertEquals('1', myfile.read()) diff --git a/ropetest/contrib/codeassisttest.py b/ropetest/contrib/codeassisttest.py index c0e4cff22..b33381489 100644 --- a/ropetest/contrib/codeassisttest.py +++ b/ropetest/contrib/codeassisttest.py @@ -25,7 +25,7 @@ def tearDown(self): def _assist(self, code, offset=None, **args): if offset is None: offset = len(code) - return code_assist(self.project, code, offset, **args) + return code_assist(self.project, code, offset, **args) def test_simple_assist(self): self._assist('', 0) @@ -34,12 +34,13 @@ def assert_completion_in_result(self, name, scope, result, type=None): for proposal in result: if proposal.name == name: self.assertEqual(scope, proposal.scope, - "proposal <%s> has wrong scope, expected " \ - "%r, got %r" % (name, scope, proposal.scope)) + "proposal <%s> has wrong scope, expected " + "%r, got %r" % (name, scope, proposal.scope)) if type is not None: self.assertEqual(type, proposal.type, - "proposal <%s> has wrong type, expected " \ - "%r, got %r" % (name, type, proposal.type)) + "proposal <%s> has wrong type, expected " + "%r, got %r" % + (name, type, proposal.type)) return self.fail('completion <%s> not proposed' % name) @@ -264,12 +265,12 @@ def test_ignoring_current_statement_explicit_continuation(self): result = self._assist(code) self.assert_completion_in_result('my_var', 'global', result) - def test_ignoring_current_statement_while_the_first_statement_of_the_block(self): + def test_ignor_current_statement_while_the_first_stmnt_of_the_block(self): code = "my_var = 10\ndef f():\n my_" result = self._assist(code) self.assert_completion_in_result('my_var', 'global', result) - def test_ignoring_current_statement_while_current_line_ends_with_a_colon(self): + def test_ignor_current_stmnt_while_current_line_ends_with_a_colon(self): code = "my_var = 10\nif my_:\n pass" result = self._assist(code, 18) self.assert_completion_in_result('my_var', 'global', result) @@ -314,7 +315,7 @@ def test_ignoring_string_contents_with_triple_quotes_and_backslash(self): result = self._assist(code) self.assert_completion_in_result('my_var', 'global', result) - def test_ignoring_string_contents_with_triple_quotes_and_double_backslash(self): + def test_ignor_str_contents_with_triple_quotes_and_double_backslash(self): code = 'my_var = """\\\\"""\nmy_' result = self._assist(code) self.assert_completion_in_result('my_var', 'global', result) @@ -361,14 +362,11 @@ def test_get_definition_location_dotted_module_names(self): self.assertEquals((module_resource, 1), result) def test_get_definition_location_for_nested_packages(self): - pycore = self.project.pycore mod1 = testutils.create_module(self.project, 'mod1') pkg1 = testutils.create_package(self.project, 'pkg1') pkg2 = testutils.create_package(self.project, 'pkg2', pkg1) - mod2 = testutils.create_module(self.project, 'mod2', pkg2) mod1.write('import pkg1.pkg2.mod2') - mod1_scope = pycore.resource_to_pyobject(mod1).get_scope() init_dot_py = pkg2.get_child('__init__.py') found_pyname = get_definition_location(self.project, mod1.read(), mod1.read().index('pkg2') + 1) @@ -394,7 +392,8 @@ def test_get_definition_location_dot_line_break_inside_parens(self): self.assertEquals((None, 2), result) def test_if_scopes_in_other_scopes_for_get_definition_location(self): - code = 'def f(a_var):\n pass\na_var = 10\nif True:\n print a_var\n' + code = 'def f(a_var):\n pass\na_var = 10\n' \ + 'if True:\n print a_var\n' result = get_definition_location(self.project, code, len(code) - 3) self.assertEquals((None, 3), result) @@ -483,7 +482,7 @@ def test_proposals_sorter_and_missing_type_in_typepref(self): ' pass\n' \ 'my_' result = self._assist(code) - proposals = sorted_proposals(result, typepref=['function']) + proposals = sorted_proposals(result, typepref=['function']) # noqa def test_get_pydoc_unicode(self): src = u'# coding: utf-8\ndef foo():\n u"юникод-объект"' @@ -515,7 +514,6 @@ def test_get_pydoc_for_classes_with_init(self): get_doc(self.project, src, src.index('AClass') + 1).index('AClass') def test_get_pydoc_for_modules(self): - pycore = self.project.pycore mod = testutils.create_module(self.project, 'mod') mod.write('"""a module"""\n') src = 'import mod\nmod' @@ -535,7 +533,7 @@ def test_get_pydoc_for_methods_should_include_class_name(self): doc.index('AClass.a_method') doc.index('hey') - def test_get_pydoc_for_methods_should_include_methods_from_super_classes(self): + def test_get_pydoc_for_meths_should_inc_methods_from_super_classes(self): src = 'class A(object):\n' \ ' def a_method(self):\n' \ ' """hey1"""\n' \ @@ -563,7 +561,7 @@ def test_get_pydoc_for_builtin_functions(self): def test_commenting_errors_before_offset(self): src = 'lsjd lsjdf\ns = "hey"\ns.replace()\n' - doc = get_doc(self.project, src, src.rindex('replace') + 1) + doc = get_doc(self.project, src, src.rindex('replace') + 1) # noqa def test_proposing_variables_defined_till_the_end_of_scope(self): code = 'if True:\n a_v\na_var = 10\n' @@ -596,7 +594,8 @@ def test_already_complete_try_blocks_with_except(self): self.assert_completion_in_result('a_var', 'global', result) def test_already_complete_try_blocks_with_except2(self): - code = 'a_var = 10\ntry:\n another_var = a_\n another_var = 10\n' \ + code = 'a_var = 10\ntry:\n ' \ + 'another_var = a_\n another_var = 10\n' \ 'except Exception:\n pass\n' result = self._assist(code, code.rindex('a_') + 2) self.assert_completion_in_result('a_var', 'global', result) @@ -618,7 +617,7 @@ def test_completing_excepts_in_uncomplete_try_blocks(self): def test_and_normal_complete_blocks_and_single_fixing(self): code = 'try:\n range.\nexcept:\n pass\n' - result = self._assist(code, code.index('.'), maxfixes=1) + result = self._assist(code, code.index('.'), maxfixes=1) # noqa def test_nested_blocks(self): code = 'a_var = 10\ntry:\n try:\n a_v' @@ -632,7 +631,7 @@ def test_proposing_function_keywords_when_calling(self): def test_proposing_function_keywords_when_calling_for_non_functions(self): code = 'f = 1\nf(p' - result = self._assist(code) + result = self._assist(code) # noqa def test_proposing_function_keywords_when_calling_extra_spaces(self): code = 'def f(p):\n pass\nf( p' @@ -647,14 +646,15 @@ def test_proposing_function_keywords_when_calling_on_second_argument(self): def test_proposing_function_keywords_when_calling_not_proposing_args(self): code = 'def f(p1, *args):\n pass\nf(1, a' result = self._assist(code) - self.assert_completion_not_in_result('args=', 'parameter_keyword', result) + self.assert_completion_not_in_result('args=', 'parameter_keyword', + result) - def test_proposing_function_keywords_when_calling_with_no_nothing_after_parens(self): + def test_propos_function_kwrds_when_call_with_no_noth_after_parens(self): code = 'def f(p):\n pass\nf(' result = self._assist(code) self.assert_completion_in_result('p=', 'parameter_keyword', result) - def test_proposing_function_keywords_when_calling_with_no_nothing_after_parens2(self): + def test_propos_function_kwrds_when_call_with_no_noth_after_parens2(self): code = 'def f(p):\n pass\ndef g():\n h = f\n f(' result = self._assist(code) self.assert_completion_in_result('p=', 'parameter_keyword', result) @@ -701,7 +701,7 @@ def test_get_calltips_and_including_module_name(self): doc = get_calltip(self.project, src, src.rindex('c'), mod) self.assertEquals('mod.C.__call__(self, p)', doc) - def test_get_calltips_and_including_module_name(self): + def test_get_calltips_and_including_module_name_2(self): src = 'range()\n' doc = get_calltip(self.project, src, 1, ignore_unknown=True) self.assertTrue(doc is None) @@ -847,7 +847,6 @@ def test_parameter_keyword_completion_proposal(self): class CodeAssistInProjectsTest(unittest.TestCase): - def setUp(self): super(CodeAssistInProjectsTest, self).setUp() self.project = testutils.sample_project() @@ -860,7 +859,8 @@ def setUp(self): 'def _underlined_func():\n pass\n\n' samplemod.write(code) package = testutils.create_package(self.project, 'package') - nestedmod = testutils.create_module(self.project, 'nestedmod', package) + nestedmod = testutils.create_module(self.project, # noqa + 'nestedmod', package) def tearDown(self): testutils.remove_project(self.project) @@ -924,7 +924,8 @@ def test_from_import_star2(self): def test_from_import_star_not_imporing_underlined(self): code = 'from samplemod import *\n_under' result = self._assist(code) - self.assert_completion_not_in_result('_underlined_func', 'global', result) + self.assert_completion_not_in_result('_underlined_func', 'global', + result) def test_from_package_import_mod(self): code = 'from package import nestedmod\nnest' diff --git a/ropetest/contrib/findittest.py b/ropetest/contrib/findittest.py index e81cd5074..9406a36db 100644 --- a/ropetest/contrib/findittest.py +++ b/ropetest/contrib/findittest.py @@ -89,12 +89,12 @@ def test_find_implementations_real_implementation(self): self.assertEquals(1, len(result)) self.assertEquals(mod1.read().rindex('f('), result[0].offset) - def test_find_implementations_real_implementation(self): + def test_find_implementations_real_implementation_simple(self): mod1 = testutils.create_module(self.project, 'mod1') mod1.write('class A(object):\n pass\n') offset = mod1.read().index('A') with self.assertRaises(exceptions.BadIdentifierError): - result = find_implementations(self.project, mod1, offset) + find_implementations(self.project, mod1, offset) def test_trivial_find_definition(self): code = 'def a_func():\n pass\na_func()' diff --git a/ropetest/contrib/fixmodnamestest.py b/ropetest/contrib/fixmodnamestest.py index e053aabe0..9fa364221 100644 --- a/ropetest/contrib/fixmodnamestest.py +++ b/ropetest/contrib/fixmodnamestest.py @@ -42,7 +42,7 @@ def test_fixing_contents(self): def test_handling_nested_modules(self): pkg = create_package(self.project, 'xkg') - mod = create_module(self.project, 'xkg.xod') + mod = create_module(self.project, 'xkg.xod') # noqa self.project.do(FixModuleNames(self.project).get_changes(_fixer)) self.assertFalse(pkg.exists()) self.assertTrue(self.project.get_resource('_kg/__init__.py').exists()) diff --git a/ropetest/contrib/generatetest.py b/ropetest/contrib/generatetest.py index c1151b66d..48f9f913a 100644 --- a/ropetest/contrib/generatetest.py +++ b/ropetest/contrib/generatetest.py @@ -80,7 +80,8 @@ def test_generating_variable_in_classes(self): changes = self._get_generate(code.index('attr')).get_changes() self.project.do(changes) self.assertEquals( - 'class C(object):\n def f(self):\n pass\n\n attr = None\n' \ + 'class C(object):\n def f(self):\n ' + 'pass\n\n attr = None\n' 'c = C()\na_var = c.attr', self.mod.read()) def test_generating_variable_in_classes_removing_pass(self): @@ -88,7 +89,7 @@ def test_generating_variable_in_classes_removing_pass(self): self.mod.write(code) changes = self._get_generate(code.index('attr')).get_changes() self.project.do(changes) - self.assertEquals('class C(object):\n\n attr = None\n' \ + self.assertEquals('class C(object):\n\n attr = None\n' 'c = C()\na_var = c.attr', self.mod.read()) def test_generating_variable_in_packages(self): @@ -130,7 +131,8 @@ def test_generating_packages(self): def test_generating_function(self): code = 'a_func()\n' self.mod.write(code) - changes = self._get_generate_function(code.index('a_func')).get_changes() + changes = self._get_generate_function( + code.index('a_func')).get_changes() self.project.do(changes) self.assertEquals('def a_func():\n pass\n\n\na_func()\n', self.mod.read()) @@ -148,13 +150,13 @@ def test_generating_variable_already_exists(self): code = 'b = 1\nc = b\n' self.mod.write(code) with self.assertRaises(exceptions.RefactoringError): - changes = self._get_generate(code.index('b')).get_changes() + self._get_generate(code.index('b')).get_changes() def test_generating_variable_primary_cannot_be_determined(self): code = 'c = can_not_be_found.b\n' self.mod.write(code) with self.assertRaises(exceptions.RefactoringError): - changes = self._get_generate(code.rindex('b')).get_changes() + self._get_generate(code.rindex('b')).get_changes() def test_generating_modules_when_already_exists(self): code = 'mod2\n' @@ -166,16 +168,19 @@ def test_generating_modules_when_already_exists(self): def test_generating_static_methods(self): code = 'class C(object):\n pass\nC.a_func()\n' self.mod.write(code) - changes = self._get_generate_function(code.index('a_func')).get_changes() + changes = self._get_generate_function( + code.index('a_func')).get_changes() self.project.do(changes) self.assertEquals( - 'class C(object):\n\n @staticmethod\n def a_func():\n pass\nC.a_func()\n', + 'class C(object):\n\n @staticmethod' + '\n def a_func():\n pass\nC.a_func()\n', self.mod.read()) def test_generating_methods(self): code = 'class C(object):\n pass\nc = C()\nc.a_func()\n' self.mod.write(code) - changes = self._get_generate_function(code.index('a_func')).get_changes() + changes = self._get_generate_function( + code.index('a_func')).get_changes() self.project.do(changes) self.assertEquals( 'class C(object):\n\n def a_func(self):\n pass\n' @@ -215,7 +220,8 @@ def test_generating_calls_in_other_modules(self): def test_generating_function_handling_arguments(self): code = 'a_func(1)\n' self.mod.write(code) - changes = self._get_generate_function(code.index('a_func')).get_changes() + changes = self._get_generate_function( + code.index('a_func')).get_changes() self.project.do(changes) self.assertEquals('def a_func(arg0):\n pass\n\n\na_func(1)\n', self.mod.read()) @@ -223,7 +229,8 @@ def test_generating_function_handling_arguments(self): def test_generating_function_handling_keyword_xarguments(self): code = 'a_func(p=1)\n' self.mod.write(code) - changes = self._get_generate_function(code.index('a_func')).get_changes() + changes = self._get_generate_function( + code.index('a_func')).get_changes() self.project.do(changes) self.assertEquals('def a_func(p):\n pass\n\n\na_func(p=1)\n', self.mod.read()) @@ -231,9 +238,11 @@ def test_generating_function_handling_keyword_xarguments(self): def test_generating_function_handling_arguments_better_naming(self): code = 'a_var = 1\na_func(a_var)\n' self.mod.write(code) - changes = self._get_generate_function(code.index('a_func')).get_changes() + changes = self._get_generate_function( + code.index('a_func')).get_changes() self.project.do(changes) - self.assertEquals('a_var = 1\ndef a_func(a_var):\n pass\n\n\na_func(a_var)\n', + self.assertEquals('a_var = 1\ndef a_func(a_var):' + '\n pass\n\n\na_func(a_var)\n', self.mod.read()) def test_generating_variable_in_other_modules2(self): @@ -248,9 +257,11 @@ def test_generating_variable_in_other_modules2(self): def test_generating_function_in_a_suite(self): code = 'if True:\n a_func()\n' self.mod.write(code) - changes = self._get_generate_function(code.index('a_func')).get_changes() + changes = self._get_generate_function( + code.index('a_func')).get_changes() self.project.do(changes) - self.assertEquals('def a_func():\n pass\n\n\nif True:\n a_func()\n', + self.assertEquals('def a_func():\n pass' + '\n\n\nif True:\n a_func()\n', self.mod.read()) def test_generating_function_in_a_suite_in_a_function(self): diff --git a/ropetest/historytest.py b/ropetest/historytest.py index 4ece62339..2eaa92caf 100644 --- a/ropetest/historytest.py +++ b/ropetest/historytest.py @@ -5,7 +5,7 @@ import rope.base.history from rope.base import exceptions -from rope.base.change import * +import rope.base.change from ropetest import testutils @@ -45,6 +45,7 @@ def test_writing_files_that_does_not_change_contents(self): self.project.history.undo() self.assertFalse(my_file.exists()) + class IsolatedHistoryTest(unittest.TestCase): def setUp(self): @@ -59,25 +60,25 @@ def tearDown(self): super(IsolatedHistoryTest, self).tearDown() def test_simple_undo(self): - change = ChangeContents(self.file1, '1') + change = rope.base.change.ChangeContents(self.file1, '1') self.history.do(change) self.assertEquals('1', self.file1.read()) self.history.undo() self.assertEquals('', self.file1.read()) def test_tobe_undone(self): - change1 = ChangeContents(self.file1, '1') + change1 = rope.base.change.ChangeContents(self.file1, '1') self.assertEquals(None, self.history.tobe_undone) self.history.do(change1) self.assertEquals(change1, self.history.tobe_undone) - change2 = ChangeContents(self.file1, '2') + change2 = rope.base.change.ChangeContents(self.file1, '2') self.history.do(change2) self.assertEquals(change2, self.history.tobe_undone) self.history.undo() self.assertEquals(change1, self.history.tobe_undone) def test_tobe_redone(self): - change = ChangeContents(self.file1, '1') + change = rope.base.change.ChangeContents(self.file1, '1') self.history.do(change) self.assertEquals(None, self.history.tobe_redone) self.history.undo() @@ -85,8 +86,8 @@ def test_tobe_redone(self): def test_undo_limit(self): history = rope.base.history.History(self.project, maxundos=1) - history.do(ChangeContents(self.file1, '1')) - history.do(ChangeContents(self.file1, '2')) + history.do(rope.base.change.ChangeContents(self.file1, '1')) + history.do(rope.base.change.ChangeContents(self.file1, '2')) try: history.undo() with self.assertRaises(exceptions.HistoryError): @@ -95,14 +96,14 @@ def test_undo_limit(self): self.assertEquals('1', self.file1.read()) def test_simple_redo(self): - change = ChangeContents(self.file1, '1') + change = rope.base.change.ChangeContents(self.file1, '1') self.history.do(change) self.history.undo() self.history.redo() self.assertEquals('1', self.file1.read()) def test_simple_re_undo(self): - change = ChangeContents(self.file1, '1') + change = rope.base.change.ChangeContents(self.file1, '1') self.history.do(change) self.history.undo() self.history.redo() @@ -110,13 +111,13 @@ def test_simple_re_undo(self): self.assertEquals('', self.file1.read()) def test_multiple_undos(self): - change = ChangeContents(self.file1, '1') + change = rope.base.change.ChangeContents(self.file1, '1') self.history.do(change) - change = ChangeContents(self.file1, '2') + change = rope.base.change.ChangeContents(self.file1, '2') self.history.do(change) self.history.undo() self.assertEquals('1', self.file1.read()) - change = ChangeContents(self.file1, '3') + change = rope.base.change.ChangeContents(self.file1, '3') self.history.do(change) self.history.undo() self.assertEquals('1', self.file1.read()) @@ -138,32 +139,32 @@ def test_dropping_undone_changes(self): self.history.redo() def test_undoing_choosen_changes(self): - change = ChangeContents(self.file1, '1') + change = rope.base.change.ChangeContents(self.file1, '1') self.history.do(change) self.history.undo(change) self.assertEquals('', self.file1.read()) self.assertFalse(self.history.undo_list) def test_undoing_choosen_changes2(self): - change1 = ChangeContents(self.file1, '1') + change1 = rope.base.change.ChangeContents(self.file1, '1') self.history.do(change1) - self.history.do(ChangeContents(self.file1, '2')) + self.history.do(rope.base.change.ChangeContents(self.file1, '2')) self.history.undo(change1) self.assertEquals('', self.file1.read()) self.assertFalse(self.history.undo_list) def test_undoing_choosen_changes_not_undoing_others(self): - change1 = ChangeContents(self.file1, '1') + change1 = rope.base.change.ChangeContents(self.file1, '1') self.history.do(change1) - self.history.do(ChangeContents(self.file2, '2')) + self.history.do(rope.base.change.ChangeContents(self.file2, '2')) self.history.undo(change1) self.assertEquals('', self.file1.read()) self.assertEquals('2', self.file2.read()) def test_undoing_writing_after_moving(self): - change1 = ChangeContents(self.file1, '1') + change1 = rope.base.change.ChangeContents(self.file1, '1') self.history.do(change1) - self.history.do(MoveResource(self.file1, 'file3.txt')) + self.history.do(rope.base.change.MoveResource(self.file1, 'file3.txt')) file3 = self.project.get_resource('file3.txt') self.history.undo(change1) self.assertEquals('', self.file1.read()) @@ -172,22 +173,22 @@ def test_undoing_writing_after_moving(self): def test_undoing_folder_movements_for_undoing_writes_inside_it(self): folder = self.project.root.create_folder('folder') file3 = folder.create_file('file3.txt') - change1 = ChangeContents(file3, '1') + change1 = rope.base.change.ChangeContents(file3, '1') self.history.do(change1) - self.history.do(MoveResource(folder, 'new_folder')) + self.history.do(rope.base.change.MoveResource(folder, 'new_folder')) new_folder = self.project.get_resource('new_folder') self.history.undo(change1) self.assertEquals('', file3.read()) self.assertFalse(new_folder.exists()) def test_undoing_changes_that_depend_on_a_dependant_change(self): - change1 = ChangeContents(self.file1, '1') + change1 = rope.base.change.ChangeContents(self.file1, '1') self.history.do(change1) - changes = ChangeSet('2nd change') - changes.add_change(ChangeContents(self.file1, '2')) - changes.add_change(ChangeContents(self.file2, '2')) + changes = rope.base.change.ChangeSet('2nd change') + changes.add_change(rope.base.change.ChangeContents(self.file1, '2')) + changes.add_change(rope.base.change.ChangeContents(self.file2, '2')) self.history.do(changes) - self.history.do(MoveResource(self.file2, 'file3.txt')) + self.history.do(rope.base.change.MoveResource(self.file2, 'file3.txt')) file3 = self.project.get_resource('file3.txt') self.history.undo(change1) @@ -198,35 +199,35 @@ def test_undoing_changes_that_depend_on_a_dependant_change(self): def test_undoing_writes_for_undoing_folder_movements_containing_it(self): folder = self.project.root.create_folder('folder') old_file = folder.create_file('file3.txt') - change1 = MoveResource(folder, 'new_folder') + change1 = rope.base.change.MoveResource(folder, 'new_folder') self.history.do(change1) new_file = self.project.get_resource('new_folder/file3.txt') - self.history.do(ChangeContents(new_file, '1')) + self.history.do(rope.base.change.ChangeContents(new_file, '1')) self.history.undo(change1) self.assertEquals('', old_file.read()) self.assertFalse(new_file.exists()) def test_undoing_not_available_change(self): - change = ChangeContents(self.file1, '1') + change = rope.base.change.ChangeContents(self.file1, '1') with self.assertRaises(exceptions.HistoryError): self.history.undo(change) def test_ignoring_ignored_resources(self): self.project.set('ignored_resources', ['ignored*']) ignored = self.project.get_file('ignored.txt') - change = CreateResource(ignored) + change = rope.base.change.CreateResource(ignored) self.history.do(change) self.assertTrue(ignored.exists()) self.assertEquals(0, len(self.history.undo_list)) def test_get_file_undo_list_simple(self): - change = ChangeContents(self.file1, '1') + change = rope.base.change.ChangeContents(self.file1, '1') self.history.do(change) self.assertEquals(set([change]), set(self.history.get_file_undo_list(self.file1))) def test_get_file_undo_list_for_moves(self): - change = MoveResource(self.file1, 'file2.txt') + change = rope.base.change.MoveResource(self.file1, 'file2.txt') self.history.do(change) self.assertEquals(set([change]), set(self.history.get_file_undo_list(self.file1))) @@ -235,27 +236,27 @@ def test_get_file_undo_list_for_moves(self): def xxx_test_get_file_undo_list_and_moving_its_contining_folder(self): folder = self.project.root.create_folder('folder') old_file = folder.create_file('file3.txt') - change1 = MoveResource(folder, 'new_folder') + change1 = rope.base.change.MoveResource(folder, 'new_folder') self.history.do(change1) self.assertEquals(set([change1]), set(self.history.get_file_undo_list(old_file))) def test_clearing_redo_list_after_do(self): - change = ChangeContents(self.file1, '1') + change = rope.base.change.ChangeContents(self.file1, '1') self.history.do(change) self.history.undo() self.history.do(change) self.assertEquals(0, len(self.history.redo_list)) def test_undoing_a_not_yet_performed_change(self): - change = ChangeContents(self.file1, '1') + change = rope.base.change.ChangeContents(self.file1, '1') str(change) with self.assertRaises(exceptions.HistoryError): change.undo() def test_clearing_up_the_history(self): - change1 = ChangeContents(self.file1, '1') - change2 = ChangeContents(self.file1, '2') + change1 = rope.base.change.ChangeContents(self.file1, '1') + change2 = rope.base.change.ChangeContents(self.file1, '2') self.history.do(change1) self.history.do(change2) self.history.undo() @@ -264,8 +265,8 @@ def test_clearing_up_the_history(self): self.assertEquals(0, len(self.history.redo_list)) def test_redoing_choosen_changes_not_undoing_others(self): - change1 = ChangeContents(self.file1, '1') - change2 = ChangeContents(self.file2, '2') + change1 = rope.base.change.ChangeContents(self.file1, '1') + change2 = rope.base.change.ChangeContents(self.file2, '2') self.history.do(change1) self.history.do(change2) self.history.undo() @@ -282,15 +283,15 @@ def setUp(self): super(SavingHistoryTest, self).setUp() self.project = testutils.sample_project() self.history = rope.base.history.History(self.project) - self.to_data = ChangeToData() - self.to_change = DataToChange(self.project) + self.to_data = rope.base.change.ChangeToData() + self.to_change = rope.base.change.DataToChange(self.project) def tearDown(self): testutils.remove_project(self.project) super(SavingHistoryTest, self).tearDown() def test_simple_set_saving(self): - data = self.to_data(ChangeSet('testing')) + data = self.to_data(rope.base.change.ChangeSet('testing')) change = self.to_change(data) self.assertEquals('testing', str(change)) @@ -298,7 +299,7 @@ def test_simple_change_content_saving(self): myfile = self.project.get_file('myfile.txt') myfile.create() myfile.write('1') - data = self.to_data(ChangeContents(myfile, '2')) + data = self.to_data(rope.base.change.ChangeContents(myfile, '2')) change = self.to_change(data) self.history.do(change) self.assertEquals('2', myfile.read()) @@ -308,7 +309,7 @@ def test_simple_change_content_saving(self): def test_move_resource_saving(self): myfile = self.project.root.create_file('myfile.txt') myfolder = self.project.root.create_folder('myfolder') - data = self.to_data(MoveResource(myfile, 'myfolder')) + data = self.to_data(rope.base.change.MoveResource(myfile, 'myfolder')) change = self.to_change(data) self.history.do(change) self.assertFalse(myfile.exists()) @@ -320,7 +321,7 @@ def test_move_resource_saving(self): def test_move_resource_saving_for_folders(self): myfolder = self.project.root.create_folder('myfolder') newfolder = self.project.get_folder('newfolder') - change = MoveResource(myfolder, 'newfolder') + change = rope.base.change.MoveResource(myfolder, 'newfolder') self.history.do(change) data = self.to_data(change) @@ -331,7 +332,8 @@ def test_move_resource_saving_for_folders(self): def test_create_file_saving(self): myfile = self.project.get_file('myfile.txt') - data = self.to_data(CreateFile(self.project.root, 'myfile.txt')) + data = self.to_data(rope.base.change.CreateFile(self.project.root, + 'myfile.txt')) change = self.to_change(data) self.history.do(change) self.assertTrue(myfile.exists()) @@ -340,7 +342,8 @@ def test_create_file_saving(self): def test_create_folder_saving(self): myfolder = self.project.get_folder('myfolder') - data = self.to_data(CreateFolder(self.project.root, 'myfolder')) + data = self.to_data(rope.base.change.CreateFolder(self.project.root, + 'myfolder')) change = self.to_change(data) self.history.do(change) self.assertTrue(myfolder.exists()) @@ -349,7 +352,7 @@ def test_create_folder_saving(self): def test_create_resource_saving(self): myfile = self.project.get_file('myfile.txt') - data = self.to_data(CreateResource(myfile)) + data = self.to_data(rope.base.change.CreateResource(myfile)) change = self.to_change(data) self.history.do(change) self.assertTrue(myfile.exists()) @@ -358,16 +361,16 @@ def test_create_resource_saving(self): def test_remove_resource_saving(self): myfile = self.project.root.create_file('myfile.txt') - data = self.to_data(RemoveResource(myfile)) + data = self.to_data(rope.base.change.RemoveResource(myfile)) change = self.to_change(data) self.history.do(change) self.assertFalse(myfile.exists()) def test_change_set_saving(self): - change = ChangeSet('testing') + change = rope.base.change.ChangeSet('testing') myfile = self.project.get_file('myfile.txt') - change.add_change(CreateResource(myfile)) - change.add_change(ChangeContents(myfile, '1')) + change.add_change(rope.base.change.CreateResource(myfile)) + change.add_change(rope.base.change.ChangeContents(myfile, '1')) data = self.to_data(change) change = self.to_change(data) @@ -377,11 +380,11 @@ def test_change_set_saving(self): self.assertFalse(myfile.exists()) def test_writing_and_reading_history(self): - history_file = self.project.get_file('history.pickle') + history_file = self.project.get_file('history.pickle') # noqa self.project.set('save_history', True) history = rope.base.history.History(self.project) myfile = self.project.get_file('myfile.txt') - history.do(CreateResource(myfile)) + history.do(rope.base.change.CreateResource(myfile)) history.write() history = rope.base.history.History(self.project) @@ -389,11 +392,11 @@ def test_writing_and_reading_history(self): self.assertFalse(myfile.exists()) def test_writing_and_reading_history2(self): - history_file = self.project.get_file('history.pickle') + history_file = self.project.get_file('history.pickle') # noqa self.project.set('save_history', True) history = rope.base.history.History(self.project) myfile = self.project.get_file('myfile.txt') - history.do(CreateResource(myfile)) + history.do(rope.base.change.CreateResource(myfile)) history.undo() history.write() @@ -401,6 +404,7 @@ def test_writing_and_reading_history2(self): history.redo() self.assertTrue(myfile.exists()) + def suite(): result = unittest.TestSuite() result.addTests(unittest.makeSuite(HistoryTest)) diff --git a/ropetest/objectinfertest.py b/ropetest/objectinfertest.py index 9480a9ed3..254bb6182 100644 --- a/ropetest/objectinfertest.py +++ b/ropetest/objectinfertest.py @@ -29,7 +29,7 @@ def test_simple_type_inferencing_classes_defined_in_holding_scope(self): scope = self.pycore.get_string_scope(code) sample_class = scope['Sample'].get_object() a_var = scope['a_func'].get_object().\ - get_scope()['a_var'].get_object() + get_scope()['a_var'].get_object() self.assertEquals(sample_class, a_var.get_type()) def test_simple_type_inferencing_classes_in_class_methods(self): @@ -40,7 +40,7 @@ def test_simple_type_inferencing_classes_in_class_methods(self): sample_class = scope['Sample'].get_object() another_class = scope['Another'].get_object() a_var = another_class['a_method'].\ - get_object().get_scope()['a_var'].get_object() + get_object().get_scope()['a_var'].get_object() self.assertEquals(sample_class, a_var.get_type()) def test_simple_type_inferencing_class_attributes(self): @@ -110,7 +110,7 @@ def test_recursive_function_returned_object_static_type_inference(self): a_var = scope['a_var'].get_object() self.assertEquals(sample_class, a_var.get_type()) - def test_function_returned_object_using_call_special_function_static_type_inference(self): + def test_func_returned_obj_using_call_spec_func_static_type_infer(self): src = 'class Sample(object):\n' \ ' def __call__(self):\n return Sample\n' \ 'sample = Sample()\na_var = sample()' @@ -202,7 +202,7 @@ def test_nested_tuple_assignments(self): def test_empty_tuples(self): mod = self.pycore.get_string_module('t = ()\na, b = t\n') - a = mod['a'].get_object() + a = mod['a'].get_object() # noqa def test_handling_generator_functions(self): code = 'class C(object):\n pass\n' \ diff --git a/ropetest/projecttest.py b/ropetest/projecttest.py index 6d11dd6a2..14aaf944d 100644 --- a/ropetest/projecttest.py +++ b/ropetest/projecttest.py @@ -9,8 +9,7 @@ from rope.base.libutils import path_to_resource from rope.base.project import Project, NoProject, _realpath from ropetest import testutils -from rope.base.resourceobserver import ResourceObserver, FilteredResourceObserver - +from rope.base.resourceobserver import FilteredResourceObserver class ProjectTest(unittest.TestCase): @@ -52,7 +51,7 @@ def test_project_file_reading(self): def test_getting_not_existing_project_file(self): with self.assertRaises(ResourceNotFoundError): - projectFile = self.project.get_resource('DoesNotExistFile.txt') + self.project.get_resource('DoesNotExistFile.txt') def test_writing_in_project_files(self): project_file = self.project.get_resource(self.sample_file) @@ -81,7 +80,7 @@ def test_failure_when_project_root_exists_and_is_a_file(self): project_root = 'sampleproject2' open(project_root, 'w').close() with self.assertRaises(RopeError): - project = Project(project_root) + Project(project_root) testutils.remove_recursively(project_root) @@ -89,7 +88,8 @@ def test_creating_folders(self): folderName = 'SampleFolder' self.project.root.create_folder(folderName) folderPath = os.path.join(self.project.address, folderName) - self.assertTrue(os.path.exists(folderPath) and os.path.isdir(folderPath)) + self.assertTrue(os.path.exists(folderPath) and + os.path.isdir(folderPath)) def test_making_folder_that_already_exists(self): folderName = 'SampleFolder' @@ -112,8 +112,9 @@ def test_creating_file_inside_folder(self): file = self.project.get_resource(file_path) file.write('sample notes') self.assertEquals(file_path, file.path) - self.assertEquals('sample notes', open(os.path.join(self.project.address, - file_path)).read()) + self.assertEquals('sample notes', + open(os.path.join(self.project.address, + file_path)).read()) def test_failing_when_creating_file_inside_non_existent_folder(self): with self.assertRaises(ResourceNotFoundError): @@ -123,8 +124,10 @@ def test_nested_directories(self): folder_name = 'SampleFolder' parent = self.project.root.create_folder(folder_name) parent.create_folder(folder_name) - folder_path = os.path.join(self.project.address, folder_name, folder_name) - self.assertTrue(os.path.exists(folder_path) and os.path.isdir(folder_path)) + folder_path = os.path.join(self.project.address, + folder_name, folder_name) + self.assertTrue(os.path.exists(folder_path) and + os.path.isdir(folder_path)) def test_removing_files(self): self.assertTrue(os.path.exists(self.sample_path)) @@ -155,7 +158,7 @@ def test_removing_nested_files(self): self.assertTrue(os.path.exists(os.path.join(self.project.address, self.sample_folder))) self.assertTrue(not os.path.exists(os.path.join(self.project.address, - file_name))) + file_name))) def test_file_get_name(self): file = self.project.get_resource(self.sample_file) @@ -186,8 +189,10 @@ def test_folder_get_path(self): self.assertEquals(self.sample_folder, folder.path) def test_is_folder(self): - self.assertTrue(self.project.get_resource(self.sample_folder).is_folder()) - self.assertTrue(not self.project.get_resource(self.sample_file).is_folder()) + self.assertTrue(self.project.get_resource( + self.sample_folder).is_folder()) + self.assertTrue(not self.project.get_resource( + self.sample_file).is_folder()) def testget_children(self): children = self.project.get_resource(self.sample_folder).get_children() @@ -212,8 +217,10 @@ def test_nonempty_get_children2(self): parent.create_folder(folder_name) children = parent.get_children() self.assertEquals(2, len(children)) - self.assertTrue(filePath == children[0].path or filePath == children[1].path) - self.assertTrue(folderPath == children[0].path or folderPath == children[1].path) + self.assertTrue(filePath == children[0].path or + filePath == children[1].path) + self.assertTrue(folderPath == children[0].path or + folderPath == children[1].path) def test_getting_files(self): files = self.project.root.get_files() @@ -223,7 +230,8 @@ def test_getting_files(self): def test_getting_folders(self): folders = self.project.root.get_folders() self.assertEquals(1, len(folders)) - self.assertTrue(self.project.get_resource(self.sample_folder) in folders) + self.assertTrue(self.project.get_resource( + self.sample_folder) in folders) def test_nested_folder_get_files(self): parent = self.project.root.create_folder('top') @@ -291,7 +299,7 @@ def test_folder_creating_nested_files(self): parent_folder = self.project.get_resource(self.sample_folder) parent_folder.create_file(project_file) new_file = self.project.get_resource(self.sample_folder - + '/' + project_file) + + '/' + project_file) self.assertTrue(new_file is not None and not new_file.is_folder()) def test_folder_creating_files2(self): @@ -364,7 +372,8 @@ def test_moving_files_and_resource_objects(self): def test_file_encoding_reading(self): sample_file = self.project.root.create_file('my_file.txt') - contents = u'# -*- coding: utf-8 -*-\n#\N{LATIN SMALL LETTER I WITH DIAERESIS}\n' + contents = u'# -*- coding: utf-8 -*-\n' \ + '#\N{LATIN SMALL LETTER I WITH DIAERESIS}\n' file = open(sample_file.real_path, 'w') file.write(contents.encode('utf-8')) file.close() @@ -372,7 +381,8 @@ def test_file_encoding_reading(self): def test_file_encoding_writing(self): sample_file = self.project.root.create_file('my_file.txt') - contents = u'# -*- coding: utf-8 -*-\n\N{LATIN SMALL LETTER I WITH DIAERESIS}\n' + contents = u'# -*- coding: utf-8 -*-\n' \ + '\N{LATIN SMALL LETTER I WITH DIAERESIS}\n' sample_file.write(contents) self.assertEquals(contents, sample_file.read()) @@ -514,10 +524,10 @@ def test_resource_change_observer_for_folders(self): my_folder = root_folder.create_folder('my_folder') my_folder_observer = _SampleObserver() root_folder_observer = _SampleObserver() - self.project.add_observer(FilteredResourceObserver(my_folder_observer, - [my_folder])) - self.project.add_observer(FilteredResourceObserver(root_folder_observer, - [root_folder])) + self.project.add_observer( + FilteredResourceObserver(my_folder_observer, [my_folder])) + self.project.add_observer( + FilteredResourceObserver(root_folder_observer, [root_folder])) my_file = my_folder.create_file('my_file.txt') self.assertEquals(1, my_folder_observer.change_count) my_file.move('another_file.txt') @@ -533,8 +543,9 @@ def test_resource_change_observer_after_moving(self): self.project.add_observer(sample_observer) sample_file.move('new_file.txt') self.assertEquals(1, sample_observer.change_count) - self.assertEquals((sample_file, self.project.get_resource('new_file.txt')), - sample_observer.last_moved) + self.assertEquals((sample_file, + self.project.get_resource('new_file.txt')), + sample_observer.last_moved) def test_revalidating_files(self): root = self.project.root @@ -560,7 +571,7 @@ def test_revalidating_files_and_no_changes2(self): def test_revalidating_folders(self): root = self.project.root my_folder = root.create_folder('myfolder') - my_file = my_folder.create_file('myfile.txt') + my_file = my_folder.create_file('myfile.txt') # noqa sample_observer = _SampleObserver() self.project.add_observer(FilteredResourceObserver(sample_observer, [my_folder])) @@ -587,8 +598,8 @@ def test_validation_and_changing_files(self): my_file = self.project.root.create_file('my_file.txt') sample_observer = _SampleObserver() timekeeper = _MockChangeIndicator() - filtered_observer = FilteredResourceObserver(sample_observer, [my_file], - timekeeper=timekeeper) + filtered_observer = FilteredResourceObserver( + sample_observer, [my_file], timekeeper=timekeeper) self.project.add_observer(filtered_observer) self._write_file(my_file.real_path) timekeeper.set_indicator(my_file, 1) @@ -665,7 +676,7 @@ def test_validating_twice_when_created(self): self.assertEquals(1, sample_observer.change_count) def test_changes_and_adding_resources(self): - root = self.project.root + root = self.project.root # noqa file1 = self.project.get_file('file1.txt') file2 = self.project.get_file('file2.txt') file1.create() @@ -678,7 +689,7 @@ def test_changes_and_adding_resources(self): self.assertEquals((file1, file2), sample_observer.last_moved) def test_validating_get_files_list(self): - root = self.project.root + root = self.project.root # noqa self.assertEquals(0, len(self.project.get_files())) file = open(os.path.join(self.project.address, 'myfile.txt'), 'w') file.close() @@ -787,7 +798,8 @@ def test_folder_get_child(self): sample_resource = self.no_project.get_resource(sample_file_path) self.assertTrue(sample_folder.has_child('sample.txt')) self.assertFalse(sample_folder.has_child('doesnothave.txt')) - self.assertEquals(sample_resource, sample_folder.get_child('sample.txt')) + self.assertEquals(sample_resource, + sample_folder.get_child('sample.txt')) def test_out_of_project_files_and_path_to_resource(self): sample_file_path = os.path.join(self.test_directory, 'sample.txt') @@ -800,7 +812,6 @@ def test_out_of_project_files_and_path_to_resource(self): class _MockFSCommands(object): - def __init__(self): self.log = '' self.fscommands = FileSystemCommands() @@ -843,7 +854,8 @@ def test_getting_project_rope_folder(self): self.assertTrue('.ropeproject', self.project.ropefolder.path) def test_setting_ignored_resources(self): - self.project = testutils.sample_project(ignored_resources=['myfile.txt']) + self.project = testutils.sample_project( + ignored_resources=['myfile.txt']) myfile = self.project.get_file('myfile.txt') file2 = self.project.get_file('file2.txt') self.assertTrue(self.project.is_ignored(myfile)) @@ -867,7 +879,7 @@ def test_ignored_resources_and_get_files(self): def test_ignored_resources_and_get_files2(self): self.project = testutils.sample_project( ignored_resources=['myfile.txt'], ropefolder=None) - myfile = self.project.root.create_file('myfile.txt') + myfile = self.project.root.create_file('myfile.txt') # noqa self.assertEquals(0, len(self.project.get_files())) def test_setting_ignored_resources_patterns(self): @@ -895,7 +907,8 @@ def test_normal_fscommands(self): def test_fscommands_and_ignored_resources(self): fscommands = _MockFSCommands() self.project = testutils.sample_project( - fscommands=fscommands, ignored_resources=['myfile.txt'], ropefolder=None) + fscommands=fscommands, + ignored_resources=['myfile.txt'], ropefolder=None) myfile = self.project.get_file('myfile.txt') myfile.create() self.assertEquals('', fscommands.log) @@ -927,7 +940,7 @@ def test_ignoring_syntax_errors(self): pycore = self.project.pycore mod = testutils.create_module(self.project, 'mod') mod.write('xyz print') - pymod = pycore.resource_to_pyobject(mod) + pymod = pycore.resource_to_pyobject(mod) # noqa def test_compressed_history(self): self.project = testutils.sample_project(compress_history=True) diff --git a/ropetest/pycoretest.py b/ropetest/pycoretest.py index 2a889a46f..ba30aae6a 100644 --- a/ropetest/pycoretest.py +++ b/ropetest/pycoretest.py @@ -29,7 +29,7 @@ def test_simple_module(self): def test_nested_modules(self): pkg = testutils.create_package(self.project, 'pkg') - mod = testutils.create_module(self.project, 'mod', pkg) + mod = testutils.create_module(self.project, 'mod', pkg) # noqa package = self.pycore.get_module('pkg') self.assertEquals(get_base_type('Module'), package.get_type()) self.assertEquals(1, len(package.get_attributes())) @@ -38,7 +38,7 @@ def test_nested_modules(self): def test_package(self): pkg = testutils.create_package(self.project, 'pkg') - mod = testutils.create_module(self.project, 'mod', pkg) + mod = testutils.create_module(self.project, 'mod', pkg) # noqa result = self.pycore.get_module('pkg') self.assertEquals(get_base_type('Module'), result.type) @@ -72,14 +72,14 @@ def test_global_variables(self): mod = testutils.create_module(self.project, 'mod') mod.write('var = 10') mod_element = self.pycore.get_module('mod') - result = mod_element['var'] + result = mod_element['var'] # noqa def test_class_variables(self): mod = testutils.create_module(self.project, 'mod') mod.write('class SampleClass(object):\n var = 10\n') mod_element = self.pycore.get_module('mod') sample_class = mod_element['SampleClass'].get_object() - var = sample_class['var'] + var = sample_class['var'] # noqa def test_class_attributes_set_in_init(self): mod = testutils.create_module(self.project, 'mod') @@ -87,7 +87,7 @@ def test_class_attributes_set_in_init(self): ' def __init__(self):\n self.var = 20\n') mod_element = self.pycore.get_module('mod') sample_class = mod_element['C'].get_object() - var = sample_class['var'] + var = sample_class['var'] # noqa def test_class_attributes_set_in_init_overwriting_a_defined(self): mod = testutils.create_module(self.project, 'mod') @@ -134,12 +134,13 @@ def test_imported_as_names(self): self.assertEquals(get_base_type('Module'), imported_mod.get_type()) def test_get_string_module(self): - mod = self.pycore.get_string_module('class Sample(object):\n pass\n') + mod = self.pycore.get_string_module('class Sample(object):' + '\n pass\n') sample_class = mod['Sample'].get_object() self.assertEquals(get_base_type('Type'), sample_class.get_type()) def test_get_string_module_with_extra_spaces(self): - mod = self.pycore.get_string_module('a = 10\n ') + mod = self.pycore.get_string_module('a = 10\n ') # noqa def test_parameter_info_for_functions(self): code = 'def func(param1, param2=10, *param3, **param4):\n pass' @@ -181,7 +182,7 @@ def test_inheriting_multiple_base_class_attributes(self): self.assertTrue('method1' in derived) self.assertTrue('method2' in derived) - def test_inheriting_multiple_base_class_attributes_with_the_same_name(self): + def test_inherit_multiple_base_class_attrs_with_the_same_name(self): code = 'class Base1(object):\n def method(self):\n pass\n' \ 'class Base2(object):\n def method(self):\n pass\n' \ 'class Derived(Base1, Base2):\n pass\n' @@ -205,33 +206,38 @@ def test_module_creation(self): self.assertEquals(self.project.get_resource('module.py'), new_module) def test_packaged_module_creation(self): - package = self.project.root.create_folder('package') + package = self.project.root.create_folder('package') # noqa new_module = testutils.create_module(self.project, 'package.module') - self.assertEquals(self.project.get_resource('package/module.py'), new_module) + self.assertEquals(self.project.get_resource('package/module.py'), + new_module) def test_packaged_module_creation_with_nested_src(self): src = self.project.root.create_folder('src') - package = src.create_folder('pkg') + src.create_folder('pkg') new_module = testutils.create_module(self.project, 'pkg.mod', src) - self.assertEquals(self.project.get_resource('src/pkg/mod.py'), new_module) + self.assertEquals(self.project.get_resource('src/pkg/mod.py'), + new_module) def test_package_creation(self): new_package = testutils.create_package(self.project, 'pkg') self.assertTrue(new_package.is_folder()) self.assertEquals(self.project.get_resource('pkg'), new_package) self.assertEquals(self.project.get_resource('pkg/__init__.py'), - new_package.get_child('__init__.py')); + new_package.get_child('__init__.py')) def test_nested_package_creation(self): - package = testutils.create_package(self.project, 'pkg1') + testutils.create_package(self.project, 'pkg1') nested_package = testutils.create_package(self.project, 'pkg1.pkg2') - self.assertEquals(self.project.get_resource('pkg1/pkg2'), nested_package) + self.assertEquals(self.project.get_resource('pkg1/pkg2'), + nested_package) def test_packaged_package_creation_with_nested_src(self): src = self.project.root.create_folder('src') - package = testutils.create_package(self.project, 'pkg1', src) - nested_package = testutils.create_package(self.project, 'pkg1.pkg2', src) - self.assertEquals(self.project.get_resource('src/pkg1/pkg2'), nested_package) + testutils.create_package(self.project, 'pkg1', src) + nested_package = testutils.create_package(self.project, 'pkg1.pkg2', + src) + self.assertEquals(self.project.get_resource('src/pkg1/pkg2'), + nested_package) def test_find_module(self): src = self.project.root.create_folder('src') @@ -242,7 +248,8 @@ def test_find_module(self): def test_find_nested_module(self): src = self.project.root.create_folder('src') samplepkg = testutils.create_package(self.project, 'samplepkg', src) - samplemod = testutils.create_module(self.project, 'samplemod', samplepkg) + samplemod = testutils.create_module(self.project, 'samplemod', + samplepkg) found_module = self.pycore.find_module('samplepkg.samplemod') self.assertEquals(samplemod, found_module) @@ -265,14 +272,14 @@ def test_find_module_packages(self): def test_find_module_when_module_and_package_with_the_same_name(self): src = self.project.root - samplemod = testutils.create_module(self.project, 'sample', src) + testutils.create_module(self.project, 'sample', src) samplepkg = testutils.create_package(self.project, 'sample', src) found_module = self.pycore.find_module('sample') self.assertEquals(samplepkg, found_module) def test_source_folders_preference(self): - pkg1 = testutils.create_package(self.project, 'pkg1') - src2 = testutils.create_package(self.project, 'pkg1.src2') + testutils.create_package(self.project, 'pkg1') + testutils.create_package(self.project, 'pkg1.src2') lost = testutils.create_module(self.project, 'pkg1.src2.lost') self.assertEqual(self.project.pycore.find_module('lost'), None) self.project.close() @@ -324,13 +331,13 @@ def test_multi_source_folders(self): self.assertTrue(test in source_folders) def test_multi_source_folders2(self): - mod1 = testutils.create_module(self.project, 'mod1') + testutils.create_module(self.project, 'mod1') src = self.project.root.create_folder('src') package = testutils.create_package(self.project, 'package', src) - mod2 = testutils.create_module(self.project, 'mod2', package) + testutils.create_module(self.project, 'mod2', package) source_folders = self.pycore.get_source_folders() self.assertEquals(2, len(source_folders)) - self.assertTrue(self.project.root in source_folders and \ + self.assertTrue(self.project.root in source_folders and src in source_folders) def test_get_pyname_definition_location(self): @@ -361,7 +368,7 @@ def test_get_pyname_definition_location_reassigning(self): self.assertEquals((mod, 1), a_var.get_definition_location()) def test_get_pyname_definition_location_importes(self): - module = testutils.create_module(self.project, 'mod') + testutils.create_module(self.project, 'mod') mod = self.pycore.get_string_module('import mod\n') imported_module = self.pycore.get_module('mod') module_pyname = mod['mod'] @@ -374,7 +381,8 @@ def test_get_pyname_definition_location_imports(self): imported_module = self.pycore.get_module('mod') mod = self.pycore.get_string_module('from mod import a_func\n') a_func = mod['a_func'] - self.assertEquals((imported_module, 2), a_func.get_definition_location()) + self.assertEquals((imported_module, 2), + a_func.get_definition_location()) def test_get_pyname_definition_location_parameters(self): code = 'def a_func(param1, param2):\n a_var = param\n' @@ -389,7 +397,8 @@ def test_module_get_resource(self): module_resource = testutils.create_module(self.project, 'mod') module = self.pycore.get_module('mod') self.assertEquals(module_resource, module.get_resource()) - string_module = self.pycore.get_string_module('from mod import a_func\n') + string_module = self.pycore.get_string_module( + 'from mod import a_func\n') self.assertEquals(None, string_module.get_resource()) def test_get_pyname_definition_location_class2(self): @@ -404,10 +413,12 @@ def test_get_pyname_definition_location_class2(self): def test_import_not_found_module_get_definition_location(self): mod = self.pycore.get_string_module('import doesnotexist\n') does_not_exist = mod['doesnotexist'] - self.assertEquals((None, None), does_not_exist.get_definition_location()) + self.assertEquals((None, None), + does_not_exist.get_definition_location()) def test_from_not_found_module_get_definition_location(self): - mod = self.pycore.get_string_module('from doesnotexist import Sample\n') + mod = self.pycore.get_string_module( + 'from doesnotexist import Sample\n') sample = mod['Sample'] self.assertEquals((None, None), sample.get_definition_location()) @@ -421,16 +432,18 @@ def test_from_package_import_module_get_definition_location(self): imported_mod.get_definition_location()) def test_get_module_for_defined_pyobjects(self): - mod = self.pycore.get_string_module('class AClass(object):\n pass\n') + mod = self.pycore.get_string_module( + 'class AClass(object):\n pass\n') a_class = mod['AClass'].get_object() self.assertEquals(mod, a_class.get_module()) def test_get_definition_location_for_packages(self): - pkg = testutils.create_package(self.project, 'pkg') + testutils.create_package(self.project, 'pkg') init_module = self.pycore.get_module('pkg.__init__') mod = self.pycore.get_string_module('import pkg\n') pkg_pyname = mod['pkg'] - self.assertEquals((init_module, 1), pkg_pyname.get_definition_location()) + self.assertEquals((init_module, 1), + pkg_pyname.get_definition_location()) def test_get_definition_location_for_filtered_packages(self): pkg = testutils.create_package(self.project, 'pkg') @@ -438,15 +451,18 @@ def test_get_definition_location_for_filtered_packages(self): init_module = self.pycore.get_module('pkg.__init__') mod = self.pycore.get_string_module('import pkg.mod') pkg_pyname = mod['pkg'] - self.assertEquals((init_module, 1), pkg_pyname.get_definition_location()) + self.assertEquals((init_module, 1), + pkg_pyname.get_definition_location()) def test_out_of_project_modules(self): - scope = self.pycore.get_string_scope('import rope.base.project as project\n') + scope = self.pycore.get_string_scope( + 'import rope.base.project as project\n') imported_module = scope['project'].get_object() self.assertTrue('Project' in imported_module) def test_file_encoding_reading(self): - contents = u'# -*- coding: utf-8 -*-\n#\N{LATIN SMALL LETTER I WITH DIAERESIS}\n' + contents = u'# -*- coding: utf-8 -*-\n' + \ + u'#\N{LATIN SMALL LETTER I WITH DIAERESIS}\n' mod = testutils.create_module(self.project, 'mod') mod.write(contents) self.pycore.get_module('mod') @@ -577,11 +593,11 @@ def test_get_definition_location_in_tuple_assnames(self): def test_syntax_errors_in_code(self): with self.assertRaises(exceptions.ModuleSyntaxError): - mod = self.pycore.get_string_module('xyx print\n') + self.pycore.get_string_module('xyx print\n') def test_holding_error_location_information(self): try: - mod = self.pycore.get_string_module('xyx print\n') + self.pycore.get_string_module('xyx print\n') except exceptions.ModuleSyntaxError, e: self.assertEquals(1, e.lineno) @@ -667,7 +683,7 @@ def setUp(self): ' pass\n\n' samplemod.write(code) package = testutils.create_package(self.project, 'package') - nestedmod = testutils.create_module(self.project, 'nestedmod', package) + testutils.create_module(self.project, 'nestedmod', package) def tearDown(self): testutils.remove_project(self.project) @@ -679,7 +695,8 @@ def test_simple_import(self): self.assertEquals(get_base_type('Module'), samplemod.get_type()) def test_from_import_class(self): - mod = self.pycore.get_string_module('from samplemod import SampleClass\n') + mod = self.pycore.get_string_module( + 'from samplemod import SampleClass\n') result = mod['SampleClass'].get_object() self.assertEquals(get_base_type('Type'), result.get_type()) self.assertTrue('sample_func' not in mod.get_attributes()) @@ -720,7 +737,8 @@ def xxx_test_from_package_import_star(self): self.assertTrue('nestedmod' not in mod.get_attributes()) def test_unknown_when_module_cannot_be_found(self): - mod = self.pycore.get_string_module('from doesnotexist import nestedmod\n') + mod = self.pycore.get_string_module( + 'from doesnotexist import nestedmod\n') self.assertTrue('nestedmod' in mod) def test_from_import_function(self): @@ -735,14 +753,16 @@ def test_circular_imports(self): mod2 = testutils.create_module(self.project, 'mod2') mod1.write('import mod2\n') mod2.write('import mod1\n') - module1 = self.pycore.get_module('mod1') + self.pycore.get_module('mod1') def test_circular_imports2(self): mod1 = testutils.create_module(self.project, 'mod1') mod2 = testutils.create_module(self.project, 'mod2') - mod1.write('from mod2 import Sample2\nclass Sample1(object):\n pass\n') - mod2.write('from mod1 import Sample1\nclass Sample2(object):\n pass\n') - module1 = self.pycore.get_module('mod1').get_attributes() + mod1.write( + 'from mod2 import Sample2\nclass Sample1(object):\n pass\n') + mod2.write( + 'from mod1 import Sample1\nclass Sample2(object):\n pass\n') + self.pycore.get_module('mod1').get_attributes() def test_multi_dot_imports(self): pkg = testutils.create_package(self.project, 'pkg') @@ -751,13 +771,14 @@ def test_multi_dot_imports(self): mod = self.pycore.get_string_module('import pkg.mod\n') self.assertTrue('pkg' in mod) self.assertTrue('sample_func' in mod['pkg'].get_object()['mod']. - get_object()) + get_object()) def test_multi_dot_imports2(self): pkg = testutils.create_package(self.project, 'pkg') - mod1 = testutils.create_module(self.project, 'mod1', pkg) - mod2 = testutils.create_module(self.project, 'mod2', pkg) - mod = self.pycore.get_string_module('import pkg.mod1\nimport pkg.mod2\n') + testutils.create_module(self.project, 'mod1', pkg) + testutils.create_module(self.project, 'mod2', pkg) + mod = self.pycore.get_string_module( + 'import pkg.mod1\nimport pkg.mod2\n') package = mod['pkg'].get_object() self.assertEquals(2, len(package.get_attributes())) self.assertTrue('mod1' in package and @@ -766,8 +787,8 @@ def test_multi_dot_imports2(self): def test_multi_dot_imports3(self): pkg1 = testutils.create_package(self.project, 'pkg1') pkg2 = testutils.create_package(self.project, 'pkg2', pkg1) - mod1 = testutils.create_module(self.project, 'mod1', pkg2) - mod2 = testutils.create_module(self.project, 'mod2', pkg2) + testutils.create_module(self.project, 'mod1', pkg2) + testutils.create_module(self.project, 'mod2', pkg2) code = 'import pkg1.pkg2.mod1\nimport pkg1.pkg2.mod2\n' mod = self.pycore.get_string_module(code) package1 = mod['pkg1'].get_object() @@ -787,7 +808,7 @@ def test_multi_dot_imports_as(self): def xxx_test_from_package_import_package(self): pkg1 = testutils.create_package(self.project, 'pkg1') pkg2 = testutils.create_package(self.project, 'pkg2', pkg1) - module = testutils.create_module(self.project, 'mod', pkg2) + testutils.create_module(self.project, 'mod', pkg2) mod = self.pycore.get_string_module('from pkg1 import pkg2\n') package = mod['pkg2'] self.assertEquals(0, len(package.get_attributes())) @@ -810,9 +831,10 @@ def test_invalidating_cache_after_resource_change_for_init_dot_pys(self): pymod = self.pycore.get_module('mod') self.assertTrue('a_var' in pymod['pkg'].get_object()) init_dot_py.write('new_var = 10\n') - self.assertTrue('a_var' not in pymod['pkg'].get_object().get_attributes()) + self.assertTrue('a_var' not in + pymod['pkg'].get_object().get_attributes()) - def test_invalidating_cache_after_resource_change_for_nested_init_dot_pys(self): + def test_invalidating_cache_after_rsrc_chng_for_nested_init_dot_pys(self): pkg1 = testutils.create_package(self.project, 'pkg1') pkg2 = testutils.create_package(self.project, 'pkg2', pkg1) mod = testutils.create_module(self.project, 'mod') @@ -820,9 +842,11 @@ def test_invalidating_cache_after_resource_change_for_nested_init_dot_pys(self): init_dot_py.write('a_var = 10\n') mod.write('import pkg1\n') pymod = self.pycore.get_module('mod') - self.assertTrue('a_var' in pymod['pkg1'].get_object()['pkg2'].get_object()) + self.assertTrue('a_var' in + pymod['pkg1'].get_object()['pkg2'].get_object()) init_dot_py.write('new_var = 10\n') - self.assertTrue('a_var' not in pymod['pkg1'].get_object()['pkg2'].get_object()) + self.assertTrue('a_var' not in + pymod['pkg1'].get_object()['pkg2'].get_object()) def test_from_import_nonexistent_module(self): code = 'from doesnotexistmod import DoesNotExistClass\n' @@ -866,8 +890,7 @@ def test_self_in_methods(self): func_scope = scope.get_scopes()[0].get_scopes()[0] self.assertEquals(sample_class, func_scope['self'].get_object().get_type()) - self.assertTrue('func' in func_scope['self']. - get_object()) + self.assertTrue('func' in func_scope['self'].get_object()) def test_none_assignments_in_classes(self): code = 'class C(object):\n' \ @@ -896,11 +919,12 @@ def test_location_of_imports_when_importing(self): scope = self.pycore.get_string_scope('from mod import SampleClass\n') sample_class = scope['SampleClass'] samplemod = self.pycore.get_module('samplemod') - self.assertEquals((samplemod, 1), sample_class.get_definition_location()) + self.assertEquals((samplemod, 1), + sample_class.get_definition_location()) def test_nested_modules(self): pkg = testutils.create_package(self.project, 'pkg') - mod = testutils.create_module(self.project, 'mod', pkg) + testutils.create_module(self.project, 'mod', pkg) imported_module = self.pycore.get_module('pkg.mod') scope = self.pycore.get_string_scope('import pkg.mod\n') mod_pyobject = scope['pkg'].get_object()['mod'] @@ -921,7 +945,8 @@ def test_relative_imports(self): mod2.write('import mod1\n') mod1_object = self.pycore.resource_to_pyobject(mod1) mod2_object = self.pycore.resource_to_pyobject(mod2) - self.assertEquals(mod1_object, mod2_object.get_attributes()['mod1'].get_object()) + self.assertEquals(mod1_object, + mod2_object.get_attributes()['mod1'].get_object()) def test_relative_froms(self): pkg = testutils.create_package(self.project, 'pkg') diff --git a/ropetest/pyscopestest.py b/ropetest/pyscopestest.py index 4939459e0..79a9cb657 100644 --- a/ropetest/pyscopestest.py +++ b/ropetest/pyscopestest.py @@ -33,9 +33,10 @@ def test_classes_inside_function_scopes(self): 'def sample_func():\n' ' class SampleClass(object):\n pass\n') self.assertEquals(1, len(scope.get_scopes())) - sample_func_scope = scope.get_scopes()[0] + sample_func_scope = scope.get_scopes()[0] # noqa self.assertEquals(get_base_type('Type'), - scope.get_scopes()[0]['SampleClass'].get_object().get_type()) + scope.get_scopes()[0]['SampleClass']. + get_object().get_type()) def test_simple_class_scope(self): scope = self.pycore.get_string_scope( @@ -125,7 +126,8 @@ def test_first_parameter_of_a_method(self): ' def a_func(self, param):\n pass\n' a_class = self.pycore.get_string_module(code)['AClass']. get_object() function_scope = a_class['a_func'].get_object().get_scope() - self.assertEquals(a_class, function_scope['self'].get_object().get_type()) + self.assertEquals(a_class, + function_scope['self'].get_object().get_type()) self.assertNotEquals(a_class, function_scope['param']. get_object().get_type()) @@ -134,8 +136,9 @@ def test_first_parameter_of_static_methods(self): ' @staticmethod\n def a_func(param):\n pass\n' a_class = self.pycore.get_string_module(code)['AClass']. get_object() function_scope = a_class['a_func'].\ - get_object().get_scope() - self.assertNotEquals(a_class, function_scope['param'].get_object().get_type()) + get_object().get_scope() + self.assertNotEquals(a_class, + function_scope['param'].get_object().get_type()) def test_first_parameter_of_class_methods(self): code = 'class AClass(object):\n' \ @@ -209,7 +212,7 @@ def test_getting_defined_names_for_classes(self): scope = self.pycore.get_string_scope( 'class A(object):\n def a(self):\n pass\n' 'class B(A):\n def b(self):\n pass\n') - a_scope = scope['A'].get_object().get_scope() + a_scope = scope['A'].get_object().get_scope() # noqa b_scope = scope['B'].get_object().get_scope() self.assertTrue('a' in b_scope.get_names()) self.assertTrue('b' in b_scope.get_names()) diff --git a/ropetest/refactor/__init__.py b/ropetest/refactor/__init__.py index 9c1542bbd..ab9152926 100644 --- a/ropetest/refactor/__init__.py +++ b/ropetest/refactor/__init__.py @@ -49,7 +49,8 @@ def test_trivial_return(self): self.mod.write(code) replacer = MethodObject(self.project, self.mod, code.index('func')) self.assertEquals( - 'class _New(object):\n\n def __call__(self):\n return 1\n', + 'class _New(object):\n\n def __call__(self):' + '\n return 1\n', replacer.get_new_class('_New')) def test_multi_line_header(self): @@ -57,7 +58,8 @@ def test_multi_line_header(self): self.mod.write(code) replacer = MethodObject(self.project, self.mod, code.index('func')) self.assertEquals( - 'class _New(object):\n\n def __call__(self):\n return 1\n', + 'class _New(object):\n\n def __call__(self):' + '\n return 1\n', replacer.get_new_class('_New')) def test_a_single_parameter(self): @@ -102,7 +104,8 @@ def test_self_keywords_and_args_parameters(self): ' self.args = args\n' \ ' self.kwds = kwds\n\n' \ ' def __call__(self):\n' \ - ' result = self.arg + self.args[0] + self.kwds[self.arg]\n' \ + ' result = self.arg + ' \ + 'self.args[0] + self.kwds[self.arg]\n' \ ' return result\n' self.assertEquals(expected, replacer.get_new_class('_New')) @@ -110,7 +113,7 @@ def test_performing_on_not_a_function(self): code = 'my_var = 10\n' self.mod.write(code) with self.assertRaises(RefactoringError): - replacer = MethodObject(self.project, self.mod, code.index('my_var')) + MethodObject(self.project, self.mod, code.index('my_var')) def test_changing_the_module(self): code = 'def func():\n return 1\n' @@ -212,7 +215,8 @@ def test_changing_occurances_in_other_modules(self): mod2 = testutils.create_module(self.project, 'mod2') mod1.write('class AClass(object):\n an_attr = 10\n') mod2.write('import mod1\na_var = mod1.AClass()\n') - self._introduce_factory(mod1, mod1.read().index('AClass') + 1, 'create') + self._introduce_factory(mod1, mod1.read().index('AClass') + 1, + 'create') expected1 = 'class AClass(object):\n' \ ' an_attr = 10\n\n' \ ' @staticmethod\n' \ @@ -237,7 +241,8 @@ def test_undoing_introduce_factory(self): mod1.write(code1) code2 = 'from mod1 import AClass\na_var = AClass()\n' mod2.write(code2) - self._introduce_factory(mod1, mod1.read().index('AClass') + 1, 'create') + self._introduce_factory(mod1, mod1.read().index('AClass') + 1, + 'create') self.project.history.undo() self.assertEquals(code1, mod1.read()) self.assertEquals(code2, mod2.read()) @@ -247,7 +252,8 @@ def test_using_on_an_occurance_outside_the_main_module(self): mod2 = testutils.create_module(self.project, 'mod2') mod1.write('class AClass(object):\n an_attr = 10\n') mod2.write('import mod1\na_var = mod1.AClass()\n') - self._introduce_factory(mod2, mod2.read().index('AClass') + 1, 'create') + self._introduce_factory(mod2, mod2.read().index('AClass') + 1, + 'create') expected1 = 'class AClass(object):\n' \ ' an_attr = 10\n\n' \ ' @staticmethod\n' \ @@ -268,7 +274,8 @@ def test_introduce_factory_in_nested_scopes(self): expected = 'def create_var():\n'\ ' class AClass(object):\n'\ ' an_attr = 10\n\n'\ - ' @staticmethod\n def create(*args, **kwds):\n'\ + ' @staticmethod\n ' \ + 'def create(*args, **kwds):\n'\ ' return AClass(*args, **kwds)\n'\ ' return AClass.create()\n' self._introduce_factory(mod, mod.read().index('AClass') + 1, 'create') @@ -283,7 +290,7 @@ def test_adding_factory_for_global_factories(self): 'def create(*args, **kwds):\n' \ ' return AClass(*args, **kwds)\n' self._introduce_factory(mod, mod.read().index('AClass') + 1, - 'create', global_factory=True) + 'create', global_factory=True) self.assertEquals(expected, mod.read()) def test_get_name_for_factories(self): @@ -303,7 +310,7 @@ def test_raising_exception_for_global_factory_for_nested_classes(self): mod.write(code) with self.assertRaises(RefactoringError): self._introduce_factory(mod, mod.read().index('AClass') + 1, - 'create', global_factory=True) + 'create', global_factory=True) def test_changing_occurances_in_the_main_module_for_global_factories(self): code = 'class AClass(object):\n' \ @@ -316,7 +323,7 @@ def test_changing_occurances_in_the_main_module_for_global_factories(self): ' return AClass(*args, **kwds)\n'\ 'a_var = create()' self._introduce_factory(mod, mod.read().index('AClass') + 1, - 'create', global_factory=True) + 'create', global_factory=True) self.assertEquals(expected, mod.read()) def test_changing_occurances_in_other_modules_for_global_factories(self): @@ -325,7 +332,7 @@ def test_changing_occurances_in_other_modules_for_global_factories(self): mod1.write('class AClass(object):\n an_attr = 10\n') mod2.write('import mod1\na_var = mod1.AClass()\n') self._introduce_factory(mod1, mod1.read().index('AClass') + 1, - 'create', global_factory=True) + 'create', global_factory=True) expected1 = 'class AClass(object):\n' \ ' an_attr = 10\n\n' \ 'def create(*args, **kwds):\n' \ @@ -335,13 +342,13 @@ def test_changing_occurances_in_other_modules_for_global_factories(self): self.assertEquals(expected1, mod1.read()) self.assertEquals(expected2, mod2.read()) - def test_importing_if_necessary_in_other_modules_for_global_factories(self): + def test_import_if_necessary_in_other_mods_for_global_factories(self): mod1 = testutils.create_module(self.project, 'mod1') mod2 = testutils.create_module(self.project, 'mod2') mod1.write('class AClass(object):\n an_attr = 10\n') mod2.write('from mod1 import AClass\npair = AClass(), AClass\n') self._introduce_factory(mod1, mod1.read().index('AClass') + 1, - 'create', global_factory=True) + 'create', global_factory=True) expected1 = 'class AClass(object):\n' \ ' an_attr = 10\n\n' \ 'def create(*args, **kwds):\n' \ @@ -352,7 +359,8 @@ def test_importing_if_necessary_in_other_modules_for_global_factories(self): self.assertEquals(expected2, mod2.read()) def test_changing_occurances_for_renamed_classes(self): - code = 'class AClass(object):\n an_attr = 10\na_class = AClass\na_var = a_class()' + code = 'class AClass(object):\n an_attr = 10' \ + '\na_class = AClass\na_var = a_class()' mod = testutils.create_module(self.project, 'mod') mod.write(code) expected = 'class AClass(object):\n' \ @@ -365,7 +373,7 @@ def test_changing_occurances_for_renamed_classes(self): self._introduce_factory(mod, mod.read().index('a_class') + 1, 'create') self.assertEquals(expected, mod.read()) - def test_changing_occurrences_in_the_same_module_with_conflicting_ranges(self): + def test_changing_occurrs_in_the_same_module_with_conflict_ranges(self): mod = testutils.create_module(self.project, 'mod') code = 'class C(object):\n' \ ' def create(self):\n' \ @@ -457,7 +465,7 @@ def tearDown(self): def _encapsulate(self, resource, offset, **args): changes = EncapsulateField(self.project, resource, offset).\ - get_changes(**args) + get_changes(**args) self.project.do(changes) def test_adding_getters_and_setters(self): @@ -523,13 +531,13 @@ def test_performing_in_other_modules(self): def test_changing_main_module_occurances(self): code = self.a_class + \ - 'a_var = A()\n' \ - 'a_var.attr = a_var.attr * 2\n' + 'a_var = A()\n' \ + 'a_var.attr = a_var.attr * 2\n' self.mod1.write(code) self._encapsulate(self.mod1, self.mod1.read().index('attr') + 1) expected = self.encapsulated + \ - 'a_var = A()\n' \ - 'a_var.set_attr(a_var.get_attr() * 2)\n' + 'a_var = A()\n' \ + 'a_var.set_attr(a_var.get_attr() * 2)\n' self.assertEquals(expected, self.mod1.read()) def test_raising_exception_when_performed_on_non_attributes(self): @@ -611,14 +619,14 @@ def test_changing_augmented_assignments2(self): def test_changing_occurrences_inside_the_class(self): new_class = self.a_class + '\n' \ - ' def a_func(self):\n' \ - ' self.attr = 1\n' + ' def a_func(self):\n' \ + ' self.attr = 1\n' self.mod.write(new_class) self._encapsulate(self.mod, self.mod.read().index('attr') + 1) expected = self.a_class + '\n' \ - ' def a_func(self):\n' \ - ' self.set_attr(1)\n' + \ - self.added_methods + ' def a_func(self):\n' \ + ' self.set_attr(1)\n' + \ + self.added_methods self.assertEquals(expected, self.mod.read()) def test_getter_and_setter_parameters(self): @@ -626,7 +634,7 @@ def test_getter_and_setter_parameters(self): self._encapsulate(self.mod, self.mod.read().index('attr') + 1, getter='getAttr', setter='setAttr') new_methods = self.added_methods.replace('get_attr', 'getAttr').\ - replace('set_attr', 'setAttr') + replace('set_attr', 'setAttr') expected = self.a_class + new_methods self.assertEquals(expected, self.mod.read()) @@ -696,7 +704,7 @@ def test_raising_exception_when_performed_on_a_parameter(self): # NOTE: This situation happens alot and is normally not an error #@testutils.assert_raises(RefactoringError) - def test_not_raising_exception_when_there_is_a_field_with_the_same_name(self): + def test_not_rais_exception_when_there_is_a_field_with_the_same_name(self): code = 'class A(object):\n' \ ' def __init__(self):\n' \ ' self.var = 1\n' \ @@ -711,7 +719,7 @@ def test_local_to_field_with_self_renamed(self): ' var = 10\n' self.mod.write(code) self._perform_convert_local_variable_to_field(self.mod, - code.index('var') + 1) + code.index('var') + 1) expected = 'class A(object):\n' \ ' def a_func(myself):\n' \ ' myself.var = 10\n' @@ -810,6 +818,7 @@ def __init__(self): def __call__(self): self.called += 1 + class TaskHandleTest(unittest.TestCase): def test_trivial_case(self): @@ -857,7 +866,7 @@ def test_calling_the_observer_after_creating_job_sets(self): handle = rope.base.taskhandle.TaskHandle() observer = _MockTaskObserver() handle.add_observer(observer) - jobs = handle.create_jobset() + jobs = handle.create_jobset() # noqa self.assertEquals(1, observer.called) def test_calling_the_observer_when_starting_and_finishing_jobs(self): diff --git a/ropetest/refactor/change_signature_test.py b/ropetest/refactor/change_signature_test.py index 5b220fd41..b4885de6a 100644 --- a/ropetest/refactor/change_signature_test.py +++ b/ropetest/refactor/change_signature_test.py @@ -5,7 +5,6 @@ import rope.base.exceptions from rope.refactor import change_signature -from rope.refactor.change_signature import * from ropetest import testutils @@ -24,25 +23,29 @@ def tearDown(self): def test_normalizing_parameters_for_trivial_case(self): code = 'def a_func():\n pass\na_func()' self.mod.write(code) - signature = ChangeSignature(self.project, self.mod, - self.mod.read().index('a_func') + 1) - self.project.do(signature.get_changes([ArgumentNormalizer()])) + signature = change_signature.ChangeSignature( + self.project, self.mod, self.mod.read().index('a_func') + 1) + self.project.do(signature.get_changes( + [change_signature.ArgumentNormalizer()])) self.assertEquals(code, self.mod.read()) def test_normalizing_parameters_for_trivial_case2(self): code = 'def a_func(param):\n pass\na_func(2)' self.mod.write(code) - signature = ChangeSignature(self.project, self.mod, - self.mod.read().index('a_func') + 1) - self.project.do(signature.get_changes([ArgumentNormalizer()])) + signature = change_signature.ChangeSignature( + self.project, self.mod, self.mod.read().index('a_func') + 1) + self.project.do(signature.get_changes( + [change_signature.ArgumentNormalizer()])) self.assertEquals(code, self.mod.read()) def test_normalizing_parameters_for_unneeded_keyword(self): self.mod.write('def a_func(param):\n pass\na_func(param=1)') - signature = ChangeSignature(self.project, self.mod, - self.mod.read().index('a_func') + 1) - self.project.do(signature.get_changes([ArgumentNormalizer()])) - self.assertEquals('def a_func(param):\n pass\na_func(1)', self.mod.read()) + signature = change_signature.ChangeSignature( + self.project, self.mod, self.mod.read().index('a_func') + 1) + self.project.do(signature.get_changes( + [change_signature.ArgumentNormalizer()])) + self.assertEquals('def a_func(param):\n pass\na_func(1)', + self.mod.read()) def test_normalizing_parameters_for_unneeded_keyword_for_methods(self): code = 'class A(object):\n' \ @@ -51,9 +54,10 @@ def test_normalizing_parameters_for_unneeded_keyword_for_methods(self): 'a_var = A()\n' \ 'a_var.a_func(param=1)\n' self.mod.write(code) - signature = ChangeSignature(self.project, self.mod, - self.mod.read().index('a_func') + 1) - self.project.do(signature.get_changes([ArgumentNormalizer()])) + signature = change_signature.ChangeSignature( + self.project, self.mod, self.mod.read().index('a_func') + 1) + self.project.do(signature.get_changes( + [change_signature.ArgumentNormalizer()])) expected = 'class A(object):\n' \ ' def a_func(self, param):\n' \ ' pass\n' \ @@ -63,31 +67,35 @@ def test_normalizing_parameters_for_unneeded_keyword_for_methods(self): def test_normalizing_parameters_for_unsorted_keyword(self): self.mod.write('def a_func(p1, p2):\n pass\na_func(p2=2, p1=1)') - signature = ChangeSignature(self.project, self.mod, - self.mod.read().index('a_func') + 1) - self.project.do(signature.get_changes([ArgumentNormalizer()])) + signature = change_signature.ChangeSignature( + self.project, self.mod, self.mod.read().index('a_func') + 1) + self.project.do(signature.get_changes( + [change_signature.ArgumentNormalizer()])) self.assertEquals('def a_func(p1, p2):\n pass\na_func(1, 2)', self.mod.read()) def test_raising_exceptions_for_non_functions(self): self.mod.write('a_var = 10') with self.assertRaises(rope.base.exceptions.RefactoringError): - signature = ChangeSignature(self.project, self.mod, - self.mod.read().index('a_var') + 1) + change_signature.ChangeSignature( + self.project, self.mod, self.mod.read().index('a_var') + 1) def test_normalizing_parameters_for_args_parameter(self): self.mod.write('def a_func(*arg):\n pass\na_func(1, 2)\n') - signature = ChangeSignature(self.project, self.mod, - self.mod.read().index('a_func') + 1) - self.project.do(signature.get_changes([ArgumentNormalizer()])) + signature = change_signature.ChangeSignature( + self.project, self.mod, self.mod.read().index('a_func') + 1) + self.project.do(signature.get_changes( + [change_signature.ArgumentNormalizer()])) self.assertEquals('def a_func(*arg):\n pass\na_func(1, 2)\n', self.mod.read()) def test_normalizing_parameters_for_args_parameter_and_keywords(self): - self.mod.write('def a_func(param, *args):\n pass\na_func(*[1, 2, 3])\n') - signature = ChangeSignature(self.project, self.mod, - self.mod.read().index('a_func') + 1) - self.project.do(signature.get_changes([ArgumentNormalizer()])) + self.mod.write( + 'def a_func(param, *args):\n pass\na_func(*[1, 2, 3])\n') + signature = change_signature.ChangeSignature( + self.project, self.mod, self.mod.read().index('a_func') + 1) + self.project.do(signature.get_changes( + [change_signature.ArgumentNormalizer()])) self.assertEquals('def a_func(param, *args):\n pass\n' 'a_func(*[1, 2, 3])\n', self.mod.read()) @@ -95,73 +103,82 @@ def test_normalizing_functions_from_other_modules(self): mod1 = testutils.create_module(self.project, 'mod1') mod1.write('def a_func(param):\n pass\n') self.mod.write('import mod1\nmod1.a_func(param=1)\n') - signature = ChangeSignature(self.project, mod1, - mod1.read().index('a_func') + 1) - self.project.do(signature.get_changes([ArgumentNormalizer()])) + signature = change_signature.ChangeSignature( + self.project, mod1, mod1.read().index('a_func') + 1) + self.project.do(signature.get_changes( + [change_signature.ArgumentNormalizer()])) self.assertEquals('import mod1\nmod1.a_func(1)\n', self.mod.read()) def test_normalizing_parameters_for_keyword_parameters(self): self.mod.write('def a_func(p1, **kwds):\n pass\n' 'a_func(p2=2, p1=1)\n') - signature = ChangeSignature(self.project, self.mod, - self.mod.read().index('a_func') + 1) - self.project.do(signature.get_changes([ArgumentNormalizer()])) + signature = change_signature.ChangeSignature( + self.project, self.mod, self.mod.read().index('a_func') + 1) + self.project.do(signature.get_changes( + [change_signature.ArgumentNormalizer()])) self.assertEquals('def a_func(p1, **kwds):\n pass\n' 'a_func(1, p2=2)\n', self.mod.read()) def test_removing_arguments(self): self.mod.write('def a_func(p1):\n pass\na_func(1)\n') - signature = ChangeSignature(self.project, self.mod, - self.mod.read().index('a_func') + 1) - self.project.do(signature.get_changes([ArgumentRemover(0)])) + signature = change_signature.ChangeSignature( + self.project, self.mod, self.mod.read().index('a_func') + 1) + self.project.do(signature.get_changes( + [change_signature.ArgumentRemover(0)])) self.assertEquals('def a_func():\n pass\na_func()\n', self.mod.read()) def test_removing_arguments_with_multiple_args(self): self.mod.write('def a_func(p1, p2):\n pass\na_func(1, 2)\n') - signature = ChangeSignature(self.project, self.mod, - self.mod.read().index('a_func') + 1) - self.project.do(signature.get_changes([ArgumentRemover(0)])) + signature = change_signature.ChangeSignature( + self.project, self.mod, self.mod.read().index('a_func') + 1) + self.project.do(signature.get_changes( + [change_signature.ArgumentRemover(0)])) self.assertEquals('def a_func(p2):\n pass\na_func(2)\n', self.mod.read()) def test_removing_arguments_passed_as_keywords(self): self.mod.write('def a_func(p1):\n pass\na_func(p1=1)\n') - signature = ChangeSignature(self.project, self.mod, - self.mod.read().index('a_func') + 1) - self.project.do(signature.get_changes([ArgumentRemover(0)])) + signature = change_signature.ChangeSignature( + self.project, self.mod, self.mod.read().index('a_func') + 1) + self.project.do(signature.get_changes( + [change_signature.ArgumentRemover(0)])) self.assertEquals('def a_func():\n pass\na_func()\n', self.mod.read()) def test_removing_arguments_with_defaults(self): self.mod.write('def a_func(p1=1):\n pass\na_func(1)\n') - signature = ChangeSignature(self.project, self.mod, - self.mod.read().index('a_func') + 1) - self.project.do(signature.get_changes([ArgumentRemover(0)])) + signature = change_signature.ChangeSignature( + self.project, self.mod, self.mod.read().index('a_func') + 1) + self.project.do(signature.get_changes( + [change_signature.ArgumentRemover(0)])) self.assertEquals('def a_func():\n pass\na_func()\n', self.mod.read()) def test_removing_arguments_star_args(self): self.mod.write('def a_func(p1, *args):\n pass\na_func(1)\n') - signature = ChangeSignature(self.project, self.mod, - self.mod.read().index('a_func') + 1) - self.project.do(signature.get_changes([ArgumentRemover(1)])) + signature = change_signature.ChangeSignature( + self.project, self.mod, self.mod.read().index('a_func') + 1) + self.project.do(signature.get_changes( + [change_signature.ArgumentRemover(1)])) self.assertEquals('def a_func(p1):\n pass\na_func(1)\n', self.mod.read()) def test_removing_keyword_arg(self): self.mod.write('def a_func(p1, **kwds):\n pass\na_func(1)\n') - signature = ChangeSignature(self.project, self.mod, - self.mod.read().index('a_func') + 1) - self.project.do(signature.get_changes([ArgumentRemover(1)])) + signature = change_signature.ChangeSignature( + self.project, self.mod, self.mod.read().index('a_func') + 1) + self.project.do(signature.get_changes( + [change_signature.ArgumentRemover(1)])) self.assertEquals('def a_func(p1):\n pass\na_func(1)\n', self.mod.read()) def test_removing_keyword_arg2(self): self.mod.write('def a_func(p1, *args, **kwds):\n pass\na_func(1)\n') - signature = ChangeSignature(self.project, self.mod, - self.mod.read().index('a_func') + 1) - self.project.do(signature.get_changes([ArgumentRemover(2)])) + signature = change_signature.ChangeSignature( + self.project, self.mod, self.mod.read().index('a_func') + 1) + self.project.do(signature.get_changes( + [change_signature.ArgumentRemover(2)])) self.assertEquals('def a_func(p1, *args):\n pass\na_func(1)\n', self.mod.read()) @@ -169,9 +186,10 @@ def test_removing_keyword_arg2(self): def xxx_test_removing_arguments_star_args2(self): self.mod.write('def a_func(p1, *args):\n pass\n' 'a_func(2, 3, p1=1)\n') - signature = ChangeSignature(self.project, self.mod, - self.mod.read().index('a_func') + 1) - self.project.do(signature.get_changes([ArgumentRemover(1)])) + signature = change_signature.ChangeSignature( + self.project, self.mod, self.mod.read().index('a_func') + 1) + self.project.do(signature.get_changes( + [change_signature.ArgumentRemover(1)])) self.assertEquals('def a_func(p1):\n pass\na_func(p1=1)\n', self.mod.read()) @@ -179,51 +197,53 @@ def xxx_test_removing_arguments_star_args2(self): def xxx_test_removing_arguments_star_args3(self): self.mod.write('def a_func(p1, *args):\n pass\n' 'a_func(*[1, 2, 3])\n') - signature = ChangeSignature(self.project, self.mod, - self.mod.read().index('a_func') + 1) - self.project.do(signature.get_changes([ArgumentRemover(1)])) + signature = change_signature.ChangeSignature( + self.project, self.mod, self.mod.read().index('a_func') + 1) + self.project.do(signature.get_changes( + [change_signature.ArgumentRemover(1)])) self.assertEquals('def a_func(p1):\n pass\na_func(*[1, 2, 3])\n', self.mod.read()) def test_adding_arguments_for_normal_args_changing_definition(self): self.mod.write('def a_func():\n pass\n') - signature = ChangeSignature(self.project, self.mod, - self.mod.read().index('a_func') + 1) - self.project.do(signature.get_changes([ArgumentAdder(0, 'p1')])) + signature = change_signature.ChangeSignature( + self.project, self.mod, self.mod.read().index('a_func') + 1) + self.project.do(signature.get_changes( + [change_signature.ArgumentAdder(0, 'p1')])) self.assertEquals('def a_func(p1):\n pass\n', self.mod.read()) def test_adding_arguments_for_normal_args_with_defaults(self): self.mod.write('def a_func():\n pass\na_func()\n') - signature = ChangeSignature(self.project, self.mod, - self.mod.read().index('a_func') + 1) - adder = ArgumentAdder(0, 'p1', 'None') + signature = change_signature.ChangeSignature( + self.project, self.mod, self.mod.read().index('a_func') + 1) + adder = change_signature.ArgumentAdder(0, 'p1', 'None') self.project.do(signature.get_changes([adder])) self.assertEquals('def a_func(p1=None):\n pass\na_func()\n', self.mod.read()) def test_adding_arguments_for_normal_args_changing_calls(self): self.mod.write('def a_func():\n pass\na_func()\n') - signature = ChangeSignature(self.project, self.mod, - self.mod.read().index('a_func') + 1) - adder = ArgumentAdder(0, 'p1', 'None', '1') + signature = change_signature.ChangeSignature( + self.project, self.mod, self.mod.read().index('a_func') + 1) + adder = change_signature.ArgumentAdder(0, 'p1', 'None', '1') self.project.do(signature.get_changes([adder])) self.assertEquals('def a_func(p1=None):\n pass\na_func(1)\n', self.mod.read()) - def test_adding_arguments_for_normal_args_changing_calls_with_keywords(self): + def test_adding_arguments_for_norm_args_chang_calls_with_kwords(self): self.mod.write('def a_func(p1=0):\n pass\na_func()\n') - signature = ChangeSignature(self.project, self.mod, - self.mod.read().index('a_func') + 1) - adder = ArgumentAdder(1, 'p2', '0', '1') + signature = change_signature.ChangeSignature( + self.project, self.mod, self.mod.read().index('a_func') + 1) + adder = change_signature.ArgumentAdder(1, 'p2', '0', '1') self.project.do(signature.get_changes([adder])) self.assertEquals('def a_func(p1=0, p2=0):\n pass\na_func(p2=1)\n', self.mod.read()) - def test_adding_arguments_for_normal_args_changing_calls_with_no_value(self): + def test_adding_arguments_for_norm_args_chang_calls_with_no_value(self): self.mod.write('def a_func(p2=0):\n pass\na_func(1)\n') - signature = ChangeSignature(self.project, self.mod, - self.mod.read().index('a_func') + 1) - adder = ArgumentAdder(0, 'p1', '0', None) + signature = change_signature.ChangeSignature( + self.project, self.mod, self.mod.read().index('a_func') + 1) + adder = change_signature.ArgumentAdder(0, 'p1', '0', None) self.project.do(signature.get_changes([adder])) self.assertEquals('def a_func(p1=0, p2=0):\n pass\na_func(p2=1)\n', self.mod.read()) @@ -231,64 +251,72 @@ def test_adding_arguments_for_normal_args_changing_calls_with_no_value(self): def test_adding_duplicate_parameter_and_raising_exceptions(self): self.mod.write('def a_func(p1):\n pass\n') with self.assertRaises(rope.base.exceptions.RefactoringError): - signature = ChangeSignature(self.project, self.mod, - self.mod.read().index('a_func') + 1) - self.project.do(signature.get_changes([ArgumentAdder(1, 'p1')])) + signature = change_signature.ChangeSignature( + self.project, self.mod, self.mod.read().index('a_func') + 1) + self.project.do(signature.get_changes( + [change_signature.ArgumentAdder(1, 'p1')])) def test_inlining_default_arguments(self): self.mod.write('def a_func(p1=0):\n pass\na_func()\n') - signature = ChangeSignature(self.project, self.mod, - self.mod.read().index('a_func') + 1) - self.project.do(signature.get_changes([ArgumentDefaultInliner(0)])) + signature = change_signature.ChangeSignature( + self.project, self.mod, self.mod.read().index('a_func') + 1) + self.project.do(signature.get_changes( + [change_signature.ArgumentDefaultInliner(0)])) self.assertEquals('def a_func(p1=0):\n pass\n' 'a_func(0)\n', self.mod.read()) def test_inlining_default_arguments2(self): self.mod.write('def a_func(p1=0):\n pass\na_func(1)\n') - signature = ChangeSignature(self.project, self.mod, - self.mod.read().index('a_func') + 1) - self.project.do(signature.get_changes([ArgumentDefaultInliner(0)])) + signature = change_signature.ChangeSignature( + self.project, self.mod, self.mod.read().index('a_func') + 1) + self.project.do(signature.get_changes( + [change_signature.ArgumentDefaultInliner(0)])) self.assertEquals('def a_func(p1=0):\n pass\n' 'a_func(1)\n', self.mod.read()) def test_preserving_args_and_keywords_order(self): self.mod.write('def a_func(*args, **kwds):\n pass\n' 'a_func(3, 1, 2, a=1, c=3, b=2)\n') - signature = ChangeSignature(self.project, self.mod, - self.mod.read().index('a_func') + 1) - self.project.do(signature.get_changes([ArgumentNormalizer()])) + signature = change_signature.ChangeSignature( + self.project, self.mod, self.mod.read().index('a_func') + 1) + self.project.do(signature.get_changes( + [change_signature.ArgumentNormalizer()])) self.assertEquals('def a_func(*args, **kwds):\n pass\n' 'a_func(3, 1, 2, a=1, c=3, b=2)\n', self.mod.read()) def test_change_order_for_only_one_parameter(self): self.mod.write('def a_func(p1):\n pass\na_func(1)\n') - signature = ChangeSignature(self.project, self.mod, - self.mod.read().index('a_func') + 1) - self.project.do(signature.get_changes([ArgumentReorderer([0])])) + signature = change_signature.ChangeSignature( + self.project, self.mod, self.mod.read().index('a_func') + 1) + self.project.do(signature.get_changes( + [change_signature.ArgumentReorderer([0])])) self.assertEquals('def a_func(p1):\n pass\na_func(1)\n', self.mod.read()) def test_change_order_for_two_parameter(self): self.mod.write('def a_func(p1, p2):\n pass\na_func(1, 2)\n') - signature = ChangeSignature(self.project, self.mod, - self.mod.read().index('a_func') + 1) - self.project.do(signature.get_changes([ArgumentReorderer([1, 0])])) + signature = change_signature.ChangeSignature( + self.project, self.mod, self.mod.read().index('a_func') + 1) + self.project.do(signature.get_changes( + [change_signature.ArgumentReorderer([1, 0])])) self.assertEquals('def a_func(p2, p1):\n pass\na_func(2, 1)\n', self.mod.read()) def test_reordering_multi_line_function_headers(self): self.mod.write('def a_func(p1,\n p2):\n pass\na_func(1, 2)\n') - signature = ChangeSignature(self.project, self.mod, - self.mod.read().index('a_func') + 1) - self.project.do(signature.get_changes([ArgumentReorderer([1, 0])])) + signature = change_signature.ChangeSignature( + self.project, self.mod, self.mod.read().index('a_func') + 1) + self.project.do(signature.get_changes( + [change_signature.ArgumentReorderer([1, 0])])) self.assertEquals('def a_func(p2, p1):\n pass\na_func(2, 1)\n', self.mod.read()) def test_changing_order_with_static_params(self): self.mod.write('def a_func(p1, p2=0, p3=0):\n pass\na_func(1, 2)\n') - signature = ChangeSignature(self.project, self.mod, - self.mod.read().index('a_func') + 1) - self.project.do(signature.get_changes([ArgumentReorderer([0, 2, 1])])) + signature = change_signature.ChangeSignature( + self.project, self.mod, self.mod.read().index('a_func') + 1) + self.project.do(signature.get_changes( + [change_signature.ArgumentReorderer([0, 2, 1])])) self.assertEquals('def a_func(p1, p3=0, p2=0):\n pass\n' 'a_func(1, p2=2)\n', self.mod.read()) @@ -297,8 +325,8 @@ def test_doing_multiple_changes(self): self.mod.write('def a_func(p1):\n pass\na_func(1)\n') changers.append(change_signature.ArgumentRemover(0)) changers.append(change_signature.ArgumentAdder(0, 'p2', None, None)) - signature = ChangeSignature(self.project, self.mod, - self.mod.read().index('a_func') + 1) + signature = change_signature.ChangeSignature( + self.project, self.mod, self.mod.read().index('a_func') + 1) signature.get_changes(changers).do() self.assertEquals('def a_func(p2):\n pass\na_func()\n', self.mod.read()) @@ -309,8 +337,8 @@ def test_doing_multiple_changes2(self): changers.append(change_signature.ArgumentAdder(2, 'p3', None, '3')) changers.append(change_signature.ArgumentReorderer([1, 0, 2])) changers.append(change_signature.ArgumentRemover(1)) - signature = ChangeSignature(self.project, self.mod, - self.mod.read().index('a_func') + 1) + signature = change_signature.ChangeSignature( + self.project, self.mod, self.mod.read().index('a_func') + 1) signature.get_changes(changers).do() self.assertEquals('def a_func(p2, p3):\n pass\na_func(2, 3)\n', self.mod.read()) @@ -319,10 +347,10 @@ def test_changing_signature_in_subclasses(self): self.mod.write( 'class A(object):\n def a_method(self):\n pass\n' 'class B(A):\n def a_method(self):\n pass\n') - signature = ChangeSignature(self.project, self.mod, - self.mod.read().index('a_method') + 1) + signature = change_signature.ChangeSignature( + self.project, self.mod, self.mod.read().index('a_method') + 1) signature.get_changes([change_signature.ArgumentAdder(1, 'p1')], - in_hierarchy=True).do() + in_hierarchy=True).do() self.assertEquals( 'class A(object):\n def a_method(self, p1):\n pass\n' 'class B(A):\n def a_method(self, p1):\n pass\n', @@ -332,9 +360,10 @@ def test_differentiating_class_accesses_from_instance_accesses(self): self.mod.write( 'class A(object):\n def a_func(self, param):\n pass\n' 'a_var = A()\nA.a_func(a_var, param=1)') - signature = ChangeSignature(self.project, self.mod, - self.mod.read().index('a_func') + 1) - self.project.do(signature.get_changes([ArgumentRemover(1)])) + signature = change_signature.ChangeSignature( + self.project, self.mod, self.mod.read().index('a_func') + 1) + self.project.do(signature.get_changes( + [change_signature.ArgumentRemover(1)])) self.assertEquals( 'class A(object):\n def a_func(self):\n pass\n' 'a_var = A()\nA.a_func(a_var)', self.mod.read()) @@ -343,8 +372,8 @@ def test_changing_signature_for_constructors(self): self.mod.write( 'class C(object):\n def __init__(self, p):\n pass\n' 'c = C(1)\n') - signature = ChangeSignature(self.project, self.mod, - self.mod.read().index('C') + 1) + signature = change_signature.ChangeSignature( + self.project, self.mod, self.mod.read().index('C') + 1) signature.get_changes([change_signature.ArgumentRemover(1)]).do() self.assertEquals( 'class C(object):\n def __init__(self):\n pass\n' @@ -355,8 +384,8 @@ def test_changing_signature_for_constructors2(self): self.mod.write( 'class C(object):\n def __init__(self, p):\n pass\n' 'c = C(1)\n') - signature = ChangeSignature(self.project, self.mod, - self.mod.read().index('__init__') + 1) + signature = change_signature.ChangeSignature( + self.project, self.mod, self.mod.read().index('__init__') + 1) signature.get_changes([change_signature.ArgumentRemover(1)]).do() self.assertEquals( 'class C(object):\n def __init__(self):\n pass\n' @@ -368,8 +397,8 @@ def test_changing_signature_for_constructors_when_using_super(self): 'class A(object):\n def __init__(self, p):\n pass\n' 'class B(A):\n ' 'def __init__(self, p):\n super(B, self).__init__(p)\n') - signature = ChangeSignature(self.project, self.mod, - self.mod.read().index('__init__') + 1) + signature = change_signature.ChangeSignature( + self.project, self.mod, self.mod.read().index('__init__') + 1) signature.get_changes([change_signature.ArgumentRemover(1)]).do() self.assertEquals( 'class A(object):\n def __init__(self):\n pass\n' @@ -379,8 +408,8 @@ def test_changing_signature_for_constructors_when_using_super(self): def test_redordering_arguments_reported_by_mft(self): self.mod.write('def f(a, b, c):\n pass\nf(1, 2, 3)\n') - signature = ChangeSignature(self.project, self.mod, - self.mod.read().rindex('f')) + signature = change_signature.ChangeSignature( + self.project, self.mod, self.mod.read().rindex('f')) signature.get_changes( [change_signature.ArgumentReorderer([1, 2, 0])]).do() self.assertEquals('def f(b, c, a):\n pass\nf(2, 3, 1)\n', @@ -390,8 +419,8 @@ def test_resources_parameter(self): mod1 = testutils.create_module(self.project, 'mod1') mod1.write('def a_func(param):\n pass\n') self.mod.write('import mod1\nmod1.a_func(1)\n') - signature = ChangeSignature(self.project, mod1, - mod1.read().index('a_func') + 1) + signature = change_signature.ChangeSignature( + self.project, mod1, mod1.read().index('a_func') + 1) signature.get_changes([change_signature.ArgumentRemover(0)], resources=[mod1]).do() self.assertEquals('import mod1\nmod1.a_func(1)\n', self.mod.read()) @@ -402,8 +431,8 @@ def test_reordering_and_automatic_defaults(self): ' pass\n' \ 'f(1, 2)\n' self.mod.write(code) - signature = ChangeSignature(self.project, self.mod, - code.index('f(')) + signature = change_signature.ChangeSignature( + self.project, self.mod, code.index('f(')) reorder = change_signature.ArgumentReorderer([1, 0], autodef='1') signature.get_changes([reorder]).do() expected = 'def f(p2=2, p1=1):\n' \ diff --git a/ropetest/refactor/extracttest.py b/ropetest/refactor/extracttest.py index 323d299e9..167f7984d 100644 --- a/ropetest/refactor/extracttest.py +++ b/ropetest/refactor/extracttest.py @@ -5,7 +5,6 @@ import rope.base.codeanalyze import rope.base.exceptions -import ropetest.testutils as testutils from rope.refactor import extract from ropetest import testutils @@ -32,7 +31,7 @@ def do_extract_method(self, source_code, start, end, extracted, **kwds): def do_extract_variable(self, source_code, start, end, extracted, **kwds): testmod = testutils.create_module(self.project, 'testmod') testmod.write(source_code) - extractor = extract.ExtractVariable( self.project, testmod, start, end) + extractor = extract.ExtractVariable(self.project, testmod, start, end) self.project.do(extractor.get_changes(extracted, **kwds)) return testmod.read() @@ -57,7 +56,8 @@ def test_extract_function_at_the_end_of_file(self): self.assertEquals(expected, refactored) def test_extract_function_after_scope(self): - code = "def a_func():\n print('one')\n print('two')\n\nprint('hey')\n" + code = "def a_func():\n print('one')\n print('two')" \ + "\n\nprint('hey')\n" start, end = self._convert_line_range_to_offset(code, 2, 2) refactored = self.do_extract_method(code, start, end, 'extracted') expected = "def a_func():\n extracted()\n print('two')\n\n" \ @@ -95,7 +95,8 @@ def test_simple_extract_function_with_return_value(self): code = 'def a_func():\n a_var = 10\n print(a_var)\n' start, end = self._convert_line_range_to_offset(code, 2, 2) refactored = self.do_extract_method(code, start, end, 'new_func') - expected = 'def a_func():\n a_var = new_func()\n print(a_var)\n\n' \ + expected = 'def a_func():\n a_var = new_func()' \ + '\n print(a_var)\n\n' \ 'def new_func():\n a_var = 10\n return a_var\n' self.assertEquals(expected, refactored) @@ -159,7 +160,7 @@ def test_extract_method_with_no_self_as_argument(self): ' print(1)\n' start, end = self._convert_line_range_to_offset(code, 3, 3) with self.assertRaises(rope.base.exceptions.RefactoringError): - refactored = self.do_extract_method(code, start, end, 'new_func') + self.do_extract_method(code, start, end, 'new_func') def test_extract_method_with_multiple_methods(self): code = 'class AClass(object):\n' \ @@ -213,7 +214,8 @@ def test_extract_function_while_inner_function_reads(self): start, end = self._convert_line_range_to_offset(code, 3, 4) refactored = self.do_extract_method(code, start, end, 'new_func') expected = 'def a_func():\n a_var = 10\n' \ - ' inner_func = new_func(a_var)\n return inner_func\n\n' \ + ' inner_func = new_func(a_var)' \ + '\n return inner_func\n\n' \ 'def new_func(a_var):\n' \ ' def inner_func():\n print(a_var)\n' \ ' return inner_func\n' @@ -232,7 +234,8 @@ def test_extract_method_bad_range2(self): self.do_extract_method(code, start, end, 'new_func') def test_extract_method_containing_return(self): - code = 'def a_func(arg):\n if arg:\n return arg * 2\n return 1' + code = 'def a_func(arg):\n if arg:\n return arg * 2' \ + '\n return 1' start, end = self._convert_line_range_to_offset(code, 2, 4) with self.assertRaises(rope.base.exceptions.RefactoringError): self.do_extract_method(code, start, end, 'new_func') @@ -279,7 +282,8 @@ def test_extract_function_and_indented_blocks(self): ' if True:\n print(arg)\n' start, end = self._convert_line_range_to_offset(code, 3, 4) refactored = self.do_extract_method(code, start, end, 'new_func') - expected = 'def a_func(arg):\n if True:\n new_func(arg)\n\n' \ + expected = 'def a_func(arg):\n ' \ + 'if True:\n new_func(arg)\n\n' \ 'def new_func(arg):\n if True:\n print(arg)\n' self.assertEquals(expected, refactored) @@ -296,7 +300,8 @@ def test_single_line_extract_function(self): start = code.index('10') end = code.index('20') + 2 refactored = self.do_extract_method(code, start, end, 'new_func') - expected = "\ndef new_func():\n return 10 + 20\n\na_var = new_func()\n" + expected = "\ndef new_func():\n " \ + "return 10 + 20\n\na_var = new_func()\n" self.assertEquals(expected, refactored) def test_single_line_extract_function2(self): @@ -313,7 +318,8 @@ def test_single_line_extract_method_and_logical_lines(self): start = code.index('10') end = code.index('20') + 2 refactored = self.do_extract_method(code, start, end, 'new_func') - expected = '\ndef new_func():\n return 10 + 20\n\na_var = new_func()\n' + expected = '\ndef new_func():\n ' \ + 'return 10 + 20\n\na_var = new_func()\n' self.assertEquals(expected, refactored) def test_single_line_extract_method_and_logical_lines2(self): @@ -342,7 +348,8 @@ def test_single_line_extract_function_if_condition(self): start = code.index('True') end = code.index('True') + 4 refactored = self.do_extract_method(code, start, end, 'new_func') - expected = "\ndef new_func():\n return True\n\nif new_func():\n pass\n" + expected = "\ndef new_func():\n return True\n\nif new_func():" \ + "\n pass\n" self.assertEquals(expected, refactored) def test_unneeded_params(self): @@ -373,7 +380,7 @@ def test_breaks_and_continues_outside_loops(self): start = code.index('a = i') end = len(code) - 1 with self.assertRaises(rope.base.exceptions.RefactoringError): - refactored = self.do_extract_method(code, start, end, 'new_func') + self.do_extract_method(code, start, end, 'new_func') def test_variable_writes_followed_by_variable_reads_after_extraction(self): code = 'def a_func():\n a = 1\n a = 2\n b = a\n' @@ -384,7 +391,7 @@ def test_variable_writes_followed_by_variable_reads_after_extraction(self): 'def new_func():\n a = 1\n' self.assertEquals(expected, refactored) - def test_variable_writes_followed_by_variable_reads_inside_extraction(self): + def test_var_writes_followed_by_var_reads_inside_extraction(self): code = 'def a_func():\n a = 1\n a = 2\n b = a\n' start = code.index('a = 2') end = len(code) - 1 @@ -463,7 +470,8 @@ def test_extract_variable_starting_from_the_start_of_the_line(self): start = code.rindex('a_dict') end = code.index('count') - 1 refactored = self.do_extract_variable(code, start, end, 'values') - expected = 'a_dict = {1: 1}\nvalues = a_dict.values()\nvalues.count(1)\n' + expected = 'a_dict = {1: 1}\n' \ + 'values = a_dict.values()\nvalues.count(1)\n' self.assertEquals(expected, refactored) def test_extract_variable_on_the_last_line_of_a_function(self): @@ -471,7 +479,8 @@ def test_extract_variable_on_the_last_line_of_a_function(self): start = code.rindex('a_var') end = code.index('.keys') refactored = self.do_extract_variable(code, start, end, 'new_var') - expected = 'def f():\n a_var = {}\n new_var = a_var\n new_var.keys()\n' + expected = 'def f():\n a_var = {}\n ' \ + 'new_var = a_var\n new_var.keys()\n' self.assertEquals(expected, refactored) def test_extract_variable_on_the_indented_function_statement(self): @@ -497,28 +506,28 @@ def test_raising_exception_when_on_incomplete_variables(self): start = code.index('10') + 1 end = code.index('20') + 2 with self.assertRaises(rope.base.exceptions.RefactoringError): - refactored = self.do_extract_method(code, start, end, 'new_func') + self.do_extract_method(code, start, end, 'new_func') def test_raising_exception_when_on_incomplete_variables_on_end(self): code = 'a_var = 10 + 20\n' start = code.index('10') end = code.index('20') + 1 with self.assertRaises(rope.base.exceptions.RefactoringError): - refactored = self.do_extract_method(code, start, end, 'new_func') + self.do_extract_method(code, start, end, 'new_func') def test_raising_exception_on_bad_parens(self): code = 'a_var = (10 + 20) + 30\n' start = code.index('20') end = code.index('30') + 2 with self.assertRaises(rope.base.exceptions.RefactoringError): - refactored = self.do_extract_method(code, start, end, 'new_func') + self.do_extract_method(code, start, end, 'new_func') def test_raising_exception_on_bad_operators(self): code = 'a_var = 10 + 20 + 30\n' start = code.index('10') end = code.rindex('+') + 1 with self.assertRaises(rope.base.exceptions.RefactoringError): - refactored = self.do_extract_method(code, start, end, 'new_func') + self.do_extract_method(code, start, end, 'new_func') # FIXME: Extract method should be more intelligent about bad ranges def xxx_test_raising_exception_on_function_parens(self): @@ -526,7 +535,7 @@ def xxx_test_raising_exception_on_function_parens(self): start = code.index('(') end = code.rindex(')') + 1 with self.assertRaises(rope.base.exceptions.RefactoringError): - refactored = self.do_extract_method(code, start, end, 'new_func') + self.do_extract_method(code, start, end, 'new_func') def test_extract_method_and_extra_blank_lines(self): code = '\nprint(1)\n' @@ -600,27 +609,30 @@ def test_extract_method_and_similar_statements2(self): ' def func1(self, p1):\n a = p1 + 2\n' \ ' def func2(self, p2):\n a = p2 + 2\n' start = code.rindex('p1') - end = code.index('2\n') + 1 + end = code.index('2\n') + 1 refactored = self.do_extract_method(code, start, end, 'new_func', similar=True) expected = 'class AClass(object):\n\n' \ - ' def func1(self, p1):\n a = self.new_func(p1)\n\n' \ + ' def func1(self, p1):\n ' \ + 'a = self.new_func(p1)\n\n' \ ' def new_func(self, p1):\n return p1 + 2\n' \ ' def func2(self, p2):\n a = self.new_func(p2)\n' self.assertEquals(expected, refactored) - def test_extract_method_and_similar_statements_where_return_is_different(self): + def test_extract_method_and_similar_sttemnts_return_is_different(self): code = 'class AClass(object):\n\n' \ ' def func1(self, p1):\n a = p1 + 2\n' \ ' def func2(self, p2):\n self.attr = p2 + 2\n' start = code.rindex('p1') - end = code.index('2\n') + 1 + end = code.index('2\n') + 1 refactored = self.do_extract_method(code, start, end, 'new_func', similar=True) expected = 'class AClass(object):\n\n' \ - ' def func1(self, p1):\n a = self.new_func(p1)\n\n' \ + ' def func1(self, p1):' \ + '\n a = self.new_func(p1)\n\n' \ ' def new_func(self, p1):\n return p1 + 2\n' \ - ' def func2(self, p2):\n self.attr = self.new_func(p2)\n' + ' def func2(self, p2):\n' \ + ' self.attr = self.new_func(p2)\n' self.assertEquals(expected, refactored) def test_definition_should_appear_where_it_is_visible(self): @@ -734,7 +746,7 @@ def test_global_extract_method(self): 'def new_func():\n print(1)\n' self.assertEquals(expected, refactored) - def test_extract_method_with_multiple_methods(self): + def test_extract_method_with_multiple_methods(self): # noqa code = 'class AClass(object):\n' \ ' def a_func(self):\n' \ ' print(1)\n\n' \ @@ -771,7 +783,7 @@ def test_extracting_pieces_with_distinct_temp_names(self): expected = '\ndef f():\n a = 1\n print a\n\nf()\nf()\n' self.assertEquals(expected, refactored) - def test_extracting_methods_in_global_functions_should_be_global(self): + def test_extract_methods_in_glob_funcs_should_be_glob(self): code = 'def f():\n a = 1\ndef g():\n b = 1\n' start = code.rindex('1') refactored = self.do_extract_method(code, start, start + 1, 'one', @@ -780,7 +792,7 @@ def test_extracting_methods_in_global_functions_should_be_global(self): 'def one():\n return 1\n' self.assertEquals(expected, refactored) - def test_extracting_methods_in_global_functions_should_be_global(self): + def test_extract_methods_in_glob_funcs_should_be_glob_2(self): code = 'if 1:\n var = 2\n' start = code.rindex('2') refactored = self.do_extract_method(code, start, start + 1, 'two', diff --git a/ropetest/refactor/importutilstest.py b/ropetest/refactor/importutilstest.py index 95f85bb2a..05a0e29dd 100644 --- a/ropetest/refactor/importutilstest.py +++ b/ropetest/refactor/importutilstest.py @@ -21,8 +21,8 @@ def setUp(self): p1 = testutils.create_package(self.project, 'p1') p2 = testutils.create_package(self.project, 'p2', p1) p3 = testutils.create_package(self.project, 'p3', p2) - m1 = testutils.create_module(self.project, 'm1', p3) - l = testutils.create_module(self.project, 'l', p3) + m1 = testutils.create_module(self.project, 'm1', p3) # noqa + l = testutils.create_module(self.project, 'l', p3) # noqa def tearDown(self): testutils.remove_project(self.project) @@ -31,18 +31,20 @@ def tearDown(self): def test_get_import_for_module(self): mod = self.pycore.find_module('mod') import_statement = self.import_tools.get_import(mod) - self.assertEquals('import mod', import_statement.get_import_statement()) + self.assertEquals('import mod', + import_statement.get_import_statement()) def test_get_import_for_module_in_nested_modules(self): mod = self.pycore.find_module('pkg1.mod1') import_statement = self.import_tools.get_import(mod) - self.assertEquals('import pkg1.mod1', import_statement.get_import_statement()) + self.assertEquals('import pkg1.mod1', + import_statement.get_import_statement()) def test_get_import_for_module_in_init_dot_py(self): init_dot_py = self.pkg1.get_child('__init__.py') import_statement = self.import_tools.get_import(init_dot_py) - self.assertEquals('import pkg1', import_statement.get_import_statement()) - + self.assertEquals('import pkg1', + import_statement.get_import_statement()) def test_get_from_import_for_module(self): mod = self.pycore.find_module('mod') @@ -59,11 +61,10 @@ def test_get_from_import_for_module_in_nested_modules(self): def test_get_from_import_for_module_in_init_dot_py(self): init_dot_py = self.pkg1.get_child('__init__.py') import_statement = self.import_tools.\ - get_from_import(init_dot_py, 'a_func') + get_from_import(init_dot_py, 'a_func') self.assertEquals('from pkg1 import a_func', import_statement.get_import_statement()) - def test_get_import_statements(self): self.mod.write('import pkg1\n') pymod = self.pycore.get_module('mod') @@ -179,7 +180,8 @@ def test_simple_getting_used_imports2(self): self.assertEquals('import pkg', imports[0].get_import_statement()) def test_getting_used_imports_for_nested_scopes(self): - self.mod.write('import pkg1\nprint(pkg1)\ndef a_func():\n pass\nprint(pkg1)\n') + self.mod.write('import pkg1\nprint(pkg1)\n' + 'def a_func():\n pass\nprint(pkg1)\n') pymod = self.pycore.get_module('mod') module_with_imports = self.import_tools.module_imports(pymod) imports = module_with_imports.get_used_imports( @@ -187,13 +189,15 @@ def test_getting_used_imports_for_nested_scopes(self): self.assertEquals(0, len(imports)) def test_getting_used_imports_for_nested_scopes2(self): - self.mod.write('from pkg1 import mod1\ndef a_func():\n print(mod1)\n') + self.mod.write('from pkg1 import mod1\ndef a_func():' + '\n print(mod1)\n') pymod = self.pycore.get_module('mod') module_with_imports = self.import_tools.module_imports(pymod) imports = module_with_imports.get_used_imports( pymod['a_func'].get_object()) self.assertEquals(1, len(imports)) - self.assertEquals('from pkg1 import mod1', imports[0].get_import_statement()) + self.assertEquals('from pkg1 import mod1', + imports[0].get_import_statement()) def test_empty_removing_unused_imports(self): self.mod.write('import pkg1\nprint(pkg1)\n') @@ -211,8 +215,10 @@ def test_simple_removing_unused_imports(self): self.assertEquals('', module_with_imports.get_changed_source()) def test_simple_removing_unused_imports_for_froms(self): - self.mod1.write('def a_func():\n pass\ndef another_func():\n pass\n') - self.mod.write('from pkg1.mod1 import a_func, another_func\n\na_func()\n') + self.mod1.write('def a_func():\n pass' + '\ndef another_func():\n pass\n') + self.mod.write('from pkg1.mod1 import a_func, ' + 'another_func\n\na_func()\n') pymod = self.pycore.get_module('mod') module_with_imports = self.import_tools.module_imports(pymod) module_with_imports.remove_unused_imports() @@ -271,7 +277,8 @@ def test_adding_imports(self): module_with_imports.get_changed_source()) def test_adding_from_imports(self): - self.mod1.write('def a_func():\n pass\ndef another_func():\n pass\n') + self.mod1.write('def a_func():\n pass\n' + 'def another_func():\n pass\n') self.mod.write('from pkg1.mod1 import a_func\n') pymod = self.pycore.get_module('mod') module_with_imports = self.import_tools.module_imports(pymod) @@ -282,7 +289,8 @@ def test_adding_from_imports(self): module_with_imports.get_changed_source()) def test_adding_to_star_imports(self): - self.mod1.write('def a_func():\n pass\ndef another_func():\n pass\n') + self.mod1.write('def a_func():\n pass' + '\ndef another_func():\n pass\n') self.mod.write('from pkg1.mod1 import *\n') pymod = self.pycore.get_module('mod') module_with_imports = self.import_tools.module_imports(pymod) @@ -293,12 +301,12 @@ def test_adding_to_star_imports(self): module_with_imports.get_changed_source()) def test_adding_star_imports(self): - self.mod1.write('def a_func():\n pass\ndef another_func():\n pass\n') + self.mod1.write('def a_func():\n pass\n' + 'def another_func():\n pass\n') self.mod.write('from pkg1.mod1 import a_func\n') pymod = self.pycore.get_module('mod') module_with_imports = self.import_tools.module_imports(pymod) - new_import = self.import_tools.get_from_import(self.mod1, - '*') + new_import = self.import_tools.get_from_import(self.mod1, '*') module_with_imports.add_import(new_import) self.assertEquals('from pkg1.mod1 import *\n', module_with_imports.get_changed_source()) @@ -313,7 +321,8 @@ def test_adding_imports_and_preserving_spaces_after_imports(self): module_with_imports.get_changed_source()) def test_not_changing_the_format_of_unchanged_imports(self): - self.mod1.write('def a_func():\n pass\ndef another_func():\n pass\n') + self.mod1.write('def a_func():\n pass\n' + 'def another_func():\n pass\n') self.mod.write('from pkg1.mod1 import (a_func,\n another_func)\n') pymod = self.pycore.get_module('mod') module_with_imports = self.import_tools.module_imports(pymod) @@ -322,7 +331,8 @@ def test_not_changing_the_format_of_unchanged_imports(self): module_with_imports.get_changed_source()) def test_not_changing_the_format_of_unchanged_imports2(self): - self.mod1.write('def a_func():\n pass\ndef another_func():\n pass\n') + self.mod1.write('def a_func():\n pass\n' + 'def another_func():\n pass\n') self.mod.write('from pkg1.mod1 import (a_func)\na_func()\n') pymod = self.pycore.get_module('mod') module_with_imports = self.import_tools.module_imports(pymod) @@ -352,7 +362,8 @@ def test_removing_unused_imports_and_reoccuring_names2(self): module_with_imports.get_changed_source()) def test_removing_unused_imports_and_common_packages(self): - self.mod.write('import pkg1.mod1\nimport pkg1\nprint(pkg1, pkg1.mod1)\n') + self.mod.write('import pkg1.mod1\nimport pkg1' + '\nprint(pkg1, pkg1.mod1)\n') pymod = self.pycore.get_module('mod') module_with_imports = self.import_tools.module_imports(pymod) module_with_imports.remove_unused_imports() @@ -360,7 +371,8 @@ def test_removing_unused_imports_and_common_packages(self): module_with_imports.get_changed_source()) def test_removing_unused_imports_and_common_packages_reversed(self): - self.mod.write('import pkg1\nimport pkg1.mod1\nprint(pkg1, pkg1.mod1)\n') + self.mod.write('import pkg1\nimport pkg1.mod1' + '\nprint(pkg1, pkg1.mod1)\n') pymod = self.pycore.get_module('mod') module_with_imports = self.import_tools.module_imports(pymod) module_with_imports.remove_duplicates() @@ -433,7 +445,8 @@ def test_removing_unused_imports_function_parameters(self): module_with_imports.get_changed_source()) def test_trivial_expanding_star_imports(self): - self.mod1.write('def a_func():\n pass\ndef another_func():\n pass\n') + self.mod1.write('def a_func():\n pass\n' + 'def another_func():\n pass\n') self.mod.write('from pkg1.mod1 import *\n') pymod = self.pycore.get_module('mod') module_with_imports = self.import_tools.module_imports(pymod) @@ -441,7 +454,8 @@ def test_trivial_expanding_star_imports(self): self.assertEquals('', module_with_imports.get_changed_source()) def test_expanding_star_imports(self): - self.mod1.write('def a_func():\n pass\ndef another_func():\n pass\n') + self.mod1.write('def a_func():\n pass\n' + 'def another_func():\n pass\n') self.mod.write('from pkg1.mod1 import *\na_func()\n') pymod = self.pycore.get_module('mod') module_with_imports = self.import_tools.module_imports(pymod) @@ -493,7 +507,8 @@ def test_transforming_froms_to_normal_changing_occurances(self): changed_module) def test_transforming_froms_to_normal_for_multi_imports(self): - self.mod1.write('def a_func():\n pass\ndef another_func():\n pass\n') + self.mod1.write('def a_func():\n pass\n' + 'def another_func():\n pass\n') self.mod.write('from pkg1.mod1 import *\na_func()\nanother_func()\n') pymod = self.pycore.get_module('mod') changed_module = self.import_tools.froms_to_imports(pymod) @@ -501,9 +516,10 @@ def test_transforming_froms_to_normal_for_multi_imports(self): 'import pkg1.mod1\npkg1.mod1.a_func()\npkg1.mod1.another_func()\n', changed_module) - def test_transforming_froms_to_normal_for_multi_imports_inside_parens(self): - self.mod1.write('def a_func():\n pass\ndef another_func():\n pass\n') - self.mod.write('from pkg1.mod1 import (a_func, \n another_func)' \ + def test_transform_froms_to_norm_for_multi_imports_inside_parens(self): + self.mod1.write('def a_func():\n pass\n' + 'def another_func():\n pass\n') + self.mod.write('from pkg1.mod1 import (a_func, \n another_func)' '\na_func()\nanother_func()\n') pymod = self.pycore.get_module('mod') changed_module = self.import_tools.froms_to_imports(pymod) @@ -516,16 +532,18 @@ def test_transforming_froms_to_normal_from_stars(self): self.mod.write('from pkg1.mod1 import *\na_func()\n') pymod = self.pycore.get_module('mod') changed_module = self.import_tools.froms_to_imports(pymod) - self.assertEquals('import pkg1.mod1\npkg1.mod1.a_func()\n', changed_module) + self.assertEquals('import pkg1.mod1\npkg1.mod1.a_func()\n', + changed_module) def test_transforming_froms_to_normal_from_stars2(self): self.mod1.write('a_var = 10') - self.mod.write('import pkg1.mod1\nfrom pkg1.mod1 import a_var\n' \ + self.mod.write('import pkg1.mod1\nfrom pkg1.mod1 import a_var\n' 'def a_func():\n print(pkg1.mod1, a_var)\n') pymod = self.pycore.get_module('mod') changed_module = self.import_tools.froms_to_imports(pymod) - self.assertEquals('import pkg1.mod1\n' \ - 'def a_func():\n print(pkg1.mod1, pkg1.mod1.a_var)\n', + self.assertEquals('import pkg1.mod1\n' + 'def a_func():\n ' + 'print(pkg1.mod1, pkg1.mod1.a_var)\n', changed_module) def test_transforming_froms_to_normal_from_with_alias(self): @@ -551,7 +569,7 @@ def test_transforming_froms_to_normal_for_os_path(self): changed_module = self.import_tools.froms_to_imports(pymod) self.assertEquals('import os\nos.path.exists(\'.\')\n', changed_module) - def test_transform_relatives_imports_to_absolute_imports_doing_nothing(self): + def test_transform_relatives_imports_to_abs_imports_doing_nothing(self): self.mod2.write('from pkg1 import mod1\nimport mod1\n') pymod = self.pycore.resource_to_pyobject(self.mod2) self.assertEquals('from pkg1 import mod1\nimport mod1\n', @@ -571,7 +589,7 @@ def test_transform_relatives_imports_to_absolute_imports_for_froms(self): self.import_tools.relatives_to_absolutes(pymod)) @testutils.run_only_for_25 - def test_transform_relatives_imports_to_absolute_imports_for_new_relatives(self): + def test_transform_rel_imports_to_abs_imports_for_new_relatives(self): self.mod3.write('def a_func():\n pass\n') self.mod2.write('from .mod3 import a_func\n') pymod = self.pycore.resource_to_pyobject(self.mod2) @@ -786,7 +804,8 @@ def test_sorting_imports_moving_to_top2(self): self.import_tools.sort_imports(pymod)) def test_sorting_imports_moving_to_top_and_module_docs(self): - self.mod.write('"""\ndocs\n"""\ndef f():\n print(mod)\nimport mod\n') + self.mod.write('"""\ndocs\n"""\ndef f():' + '\n print(mod)\nimport mod\n') pymod = self.pycore.get_module('mod') self.assertEquals( '"""\ndocs\n"""\nimport mod\n\n\ndef f():\n print(mod)\n', @@ -828,7 +847,7 @@ def test_trivial_filtered_expand_stars(self): pymod = self.pycore.resource_to_pyobject(self.mod) self.assertEquals( 'from pkg1 import *\nfrom pkg2 import *\n\nprint(var1, var2)\n', - self.import_tools.expand_stars(pymod, lambda stmt: False)) + self.import_tools.expand_stars(pymod, lambda stmt: False)) def _line_filter(self, lineno): def import_filter(import_stmt): @@ -843,7 +862,7 @@ def test_filtered_expand_stars(self): pymod = self.pycore.resource_to_pyobject(self.mod) self.assertEquals( 'from pkg1 import *\nfrom pkg2 import var2\n\nprint(var1, var2)\n', - self.import_tools.expand_stars(pymod, self._line_filter(2))) + self.import_tools.expand_stars(pymod, self._line_filter(2))) def test_filtered_relative_to_absolute(self): self.mod3.write('var = 1') @@ -851,12 +870,12 @@ def test_filtered_relative_to_absolute(self): pymod = self.pycore.resource_to_pyobject(self.mod2) self.assertEquals( 'import mod3\n\nprint(mod3.var)\n', - self.import_tools.relatives_to_absolutes( - pymod, lambda stmt: False)) + self.import_tools.relatives_to_absolutes( + pymod, lambda stmt: False)) self.assertEquals( 'import pkg2.mod3\n\nprint(pkg2.mod3.var)\n', - self.import_tools.relatives_to_absolutes( - pymod, self._line_filter(1))) + self.import_tools.relatives_to_absolutes( + pymod, self._line_filter(1))) def test_filtered_froms_to_normals(self): self.pkg1.get_child('__init__.py').write('var1 = 1\n') @@ -865,11 +884,12 @@ def test_filtered_froms_to_normals(self): 'print(var1, var2)\n') pymod = self.pycore.resource_to_pyobject(self.mod) self.assertEquals( - 'from pkg1 import var1\nfrom pkg2 import var2\n\nprint(var1, var2)\n', - self.import_tools.expand_stars(pymod, lambda stmt: False)) + 'from pkg1 import var1\nfrom pkg2 ' + 'import var2\n\nprint(var1, var2)\n', + self.import_tools.expand_stars(pymod, lambda stmt: False)) self.assertEquals( 'from pkg1 import var1\nimport pkg2\n\nprint(var1, pkg2.var2)\n', - self.import_tools.froms_to_imports(pymod, self._line_filter(2))) + self.import_tools.froms_to_imports(pymod, self._line_filter(2))) def test_filtered_froms_to_normals2(self): self.pkg1.get_child('__init__.py').write('var1 = 1\n') @@ -879,7 +899,7 @@ def test_filtered_froms_to_normals2(self): pymod = self.pycore.resource_to_pyobject(self.mod) self.assertEquals( 'from pkg1 import *\nimport pkg2\n\nprint(var1, pkg2.var2)\n', - self.import_tools.froms_to_imports(pymod, self._line_filter(2))) + self.import_tools.froms_to_imports(pymod, self._line_filter(2))) def test_filtered_handle_long_imports(self): self.mod.write('import p1.p2.p3.m1\nimport pkg1.mod1\n\n\n' @@ -889,8 +909,8 @@ def test_filtered_handle_long_imports(self): 'import p1.p2.p3.m1\nfrom pkg1 import mod1\n\n\n' 'm = p1.p2.p3.m1, mod1\n', self.import_tools.handle_long_imports( - pymod, maxlength=5, - import_filter=self._line_filter(2))) + pymod, maxlength=5, + import_filter=self._line_filter(2))) def test_filtering_and_import_actions_with_more_than_one_phase(self): self.pkg1.get_child('__init__.py').write('var1 = 1\n') @@ -900,7 +920,7 @@ def test_filtering_and_import_actions_with_more_than_one_phase(self): pymod = self.pycore.resource_to_pyobject(self.mod) self.assertEquals( 'from pkg2 import *\n\nprint(var2)\n', - self.import_tools.expand_stars(pymod, self._line_filter(1))) + self.import_tools.expand_stars(pymod, self._line_filter(1))) def test_non_existent_module_and_used_imports(self): self.mod.write( diff --git a/ropetest/refactor/inlinetest.py b/ropetest/refactor/inlinetest.py index e42d1432a..67a68e47e 100644 --- a/ropetest/refactor/inlinetest.py +++ b/ropetest/refactor/inlinetest.py @@ -1,4 +1,3 @@ -from ropetest.testutils import only_for try: import unittest2 as unittest except ImportError: @@ -66,22 +65,22 @@ def test_inlining_at_the_end_of_input(self): def test_on_classes(self): code = 'class AClass(object):\n pass\n' with self.assertRaises(rope.base.exceptions.RefactoringError): - refactored = self._inline(code, code.index('AClass') + 1) + self._inline(code, code.index('AClass') + 1) def test_multiple_assignments(self): code = 'a_var = 10\na_var = 20\n' with self.assertRaises(rope.base.exceptions.RefactoringError): - refactored = self._inline(code, code.index('a_var') + 1) + self._inline(code, code.index('a_var') + 1) def test_tuple_assignments(self): code = 'a_var, another_var = (20, 30)\n' with self.assertRaises(rope.base.exceptions.RefactoringError): - refactored = self._inline(code, code.index('a_var') + 1) + self._inline(code, code.index('a_var') + 1) def test_on_unknown_vars(self): code = 'a_var = another_var\n' with self.assertRaises(rope.base.exceptions.RefactoringError): - refactored = self._inline(code, code.index('another_var') + 1) + self._inline(code, code.index('another_var') + 1) def test_attribute_inlining(self): code = 'class A(object):\n def __init__(self):\n' \ @@ -101,7 +100,6 @@ def test_attribute_inlining2(self): 'a = A()\nrange(3)' self.assertEquals(expected, refactored) - def test_a_function_with_no_occurance(self): self.mod.write('def a_func():\n pass\n') self._inline2(self.mod, self.mod.read().index('a_func') + 1) @@ -140,29 +138,35 @@ def test_replacing_calls_with_function_definition_in_defining_module(self): self._inline2(self.mod, self.mod.read().index('a_func') + 1) self.assertEquals('print(1)\n', self.mod.read()) - def test_replacing_calls_with_function_definition_in_defining_module2(self): - self.mod.write('def a_func():\n for i in range(10):\n print(1)\na_func()\n') + def test_replac_calls_with_function_definition_in_defining_module2(self): + self.mod.write('def a_func():\n ' + 'for i in range(10):\n print(1)\na_func()\n') self._inline2(self.mod, self.mod.read().index('a_func') + 1) - self.assertEquals('for i in range(10):\n print(1)\n', self.mod.read()) + self.assertEquals('for i in range(10):\n print(1)\n', + self.mod.read()) def test_replacing_calls_with_method_definition_in_defining_modules(self): self.mod.write('class A(object):\n var = 10\n' ' def a_func(self):\n print(1)\nA().a_func()') self._inline2(self.mod, self.mod.read().index('a_func') + 1) - self.assertEquals('class A(object):\n var = 10\nprint(1)\n', self.mod.read()) + self.assertEquals('class A(object):\n var = 10\nprint(1)\n', + self.mod.read()) def test_parameters_with_the_same_name_as_passed(self): - self.mod.write('def a_func(var):\n print(var)\nvar = 1\na_func(var)\n') + self.mod.write('def a_func(var):\n ' + 'print(var)\nvar = 1\na_func(var)\n') self._inline2(self.mod, self.mod.read().index('a_func') + 1) self.assertEquals('var = 1\nprint(var)\n', self.mod.read()) def test_parameters_with_the_same_name_as_passed2(self): - self.mod.write('def a_func(var):\n print(var)\nvar = 1\na_func(var=var)\n') + self.mod.write('def a_func(var):\n ' + 'print(var)\nvar = 1\na_func(var=var)\n') self._inline2(self.mod, self.mod.read().index('a_func') + 1) self.assertEquals('var = 1\nprint(var)\n', self.mod.read()) def test_simple_parameters_renaming(self): - self.mod.write('def a_func(param):\n print(param)\nvar = 1\na_func(var)\n') + self.mod.write('def a_func(param):\n ' + 'print(param)\nvar = 1\na_func(var)\n') self._inline2(self.mod, self.mod.read().index('a_func') + 1) self.assertEquals('var = 1\nprint(var)\n', self.mod.read()) @@ -170,7 +174,8 @@ def test_simple_parameters_renaming_for_multiple_params(self): self.mod.write('def a_func(param1, param2):\n p = param1 + param2\n' 'var1 = 1\nvar2 = 1\na_func(var1, var2)\n') self._inline2(self.mod, self.mod.read().index('a_func') + 1) - self.assertEquals('var1 = 1\nvar2 = 1\np = var1 + var2\n', self.mod.read()) + self.assertEquals('var1 = 1\nvar2 = 1\np = var1 + var2\n', + self.mod.read()) def test_parameters_renaming_for_passed_constants(self): self.mod.write('def a_func(param):\n print(param)\na_func(1)\n') @@ -178,21 +183,26 @@ def test_parameters_renaming_for_passed_constants(self): self.assertEquals('print(1)\n', self.mod.read()) def test_parameters_renaming_for_passed_statements(self): - self.mod.write('def a_func(param):\n print(param)\na_func((1 + 2) / 3)\n') + self.mod.write('def a_func(param):\n ' + 'print(param)\na_func((1 + 2) / 3)\n') self._inline2(self.mod, self.mod.read().index('a_func') + 1) self.assertEquals('print((1 + 2) / 3)\n', self.mod.read()) - def test_simple_parameters_renaming_for_multiple_params_using_keywords(self): - self.mod.write('def a_func(param1, param2):\n p = param1 + param2\n' - 'var1 = 1\nvar2 = 1\na_func(param2=var1, param1=var2)\n') + def test_simple_parameters_renam_for_multiple_params_using_keywords(self): + self.mod.write('def a_func(param1, param2):\n ' + 'p = param1 + param2\n' + 'var1 = 1\nvar2 = 1\n' + 'a_func(param2=var1, param1=var2)\n') self._inline2(self.mod, self.mod.read().index('a_func') + 1) - self.assertEquals('var1 = 1\nvar2 = 1\np = var2 + var1\n', self.mod.read()) + self.assertEquals('var1 = 1\nvar2 = 1\np = var2 + var1\n', + self.mod.read()) - def test_simple_parameters_renaming_for_multiple_params_using_mixed_keywords(self): + def test_simple_params_renam_for_multi_params_using_mixed_keywords(self): self.mod.write('def a_func(param1, param2):\n p = param1 + param2\n' 'var1 = 1\nvar2 = 1\na_func(var2, param2=var1)\n') self._inline2(self.mod, self.mod.read().index('a_func') + 1) - self.assertEquals('var1 = 1\nvar2 = 1\np = var2 + var1\n', self.mod.read()) + self.assertEquals('var1 = 1\nvar2 = 1\np = var2 + var1\n', + self.mod.read()) def test_simple_putting_in_default_arguments(self): self.mod.write('def a_func(param=None):\n print(param)\n' @@ -201,13 +211,15 @@ def test_simple_putting_in_default_arguments(self): self.assertEquals('print(None)\n', self.mod.read()) def test_overriding_default_arguments(self): - self.mod.write('def a_func(param1=1, param2=2):\n print(param1, param2)\n' + self.mod.write('def a_func(param1=1, param2=2):' + '\n print(param1, param2)\n' 'a_func(param2=3)\n') self._inline2(self.mod, self.mod.read().index('a_func') + 1) self.assertEquals('print(1, 3)\n', self.mod.read()) def test_badly_formatted_text(self): - self.mod.write('def a_func ( param1 = 1 ,param2 = 2 ) :\n print(param1, param2)\n' + self.mod.write('def a_func ( param1 = 1 ,param2 = 2 ) :' + '\n print(param1, param2)\n' 'a_func ( param2 \n = 3 ) \n') self._inline2(self.mod, self.mod.read().index('a_func') + 1) self.assertEquals('print(1, 3)\n', self.mod.read()) @@ -270,8 +282,8 @@ def test_inlining_staticmethods(self): self.mod.write(a_class) self._inline2(self.mod, self.mod.read().index('a_func') + 1) expected = 'class A(object):\n' \ - ' pass\n' \ - 'print(1)\n' + ' pass\n' \ + 'print(1)\n' self.assertEquals(expected, self.mod.read()) def test_static_methods2(self): @@ -286,10 +298,10 @@ def test_static_methods2(self): self.mod.write(a_class) self._inline2(self.mod, self.mod.read().index('a_func') + 1) expected = 'class A(object):\n' \ - ' var = 10\n' \ - 'an_a = A()\n' \ - 'print(1)\n' \ - 'print(2)\n' + ' var = 10\n' \ + 'an_a = A()\n' \ + 'print(1)\n' \ + 'print(2)\n' self.assertEquals(expected, self.mod.read()) def test_inlining_classmethods(self): @@ -330,7 +342,8 @@ def test_simple_return_values_and_inlining_lonely_functions(self): self.assertEquals('1\n', self.mod.read()) def test_empty_returns_and_inlining_lonely_functions(self): - self.mod.write('def a_func():\n if True:\n return\na_func()\n') + self.mod.write('def a_func():\n ' + 'if True:\n return\na_func()\n') self._inline2(self.mod, self.mod.read().index('a_func') + 1) self.assertEquals('if True:\n pass\n', self.mod.read()) @@ -343,7 +356,8 @@ def test_multiple_returns(self): def test_multiple_returns_and_not_using_the_value(self): self.mod.write('def less_than_five(var):\n if var < 5:\n' - ' return True\n return False\nless_than_five(2)\n') + ' return True\n ' + 'return False\nless_than_five(2)\n') self._inline2(self.mod, self.mod.read().index('less') + 1) self.assertEquals('if 2 < 5:\n True\nFalse\n', self.mod.read()) @@ -384,13 +398,15 @@ def test_recursive_functions(self): def xxx_test_inlining_function_default_parameters(self): self.mod.write('def a_func(p1=1):\n pass\na_func()\n') self._inline2(self.mod, self.mod.read().index('p1') + 1) - self.assertEquals('def a_func(p1=1):\n pass\na_func()\n', self.mod.read()) + self.assertEquals('def a_func(p1=1):\n pass\na_func()\n', + self.mod.read()) def test_simple_inlining_after_extra_indented_lines(self): self.mod.write('def a_func():\n for i in range(10):\n pass\n' 'if True:\n pass\na_func()\n') self._inline2(self.mod, self.mod.read().index('a_func') + 1) - self.assertEquals('if True:\n pass\nfor i in range(10):\n pass\n', + self.assertEquals('if True:\n pass\nfor i in range(10):' + '\n pass\n', self.mod.read()) def test_inlining_a_function_with_pydoc(self): @@ -407,7 +423,8 @@ def test_inlining_methods(self): "a = A()\nname = a.name\n", self.mod.read()) def test_simple_returns_with_backslashes(self): - self.mod.write('def a_func():\n return 1\\\n + 2\na = a_func()\n') + self.mod.write('def a_func():\n return 1' + '\\\n + 2\na = a_func()\n') self._inline2(self.mod, self.mod.read().index('a_func') + 1) self.assertEquals('a = 1 + 2\n', self.mod.read()) diff --git a/ropetest/refactor/movetest.py b/ropetest/refactor/movetest.py index 42e2b89e2..8e98815de 100644 --- a/ropetest/refactor/movetest.py +++ b/ropetest/refactor/movetest.py @@ -27,13 +27,13 @@ def tearDown(self): def _move(self, resource, offset, dest_resource): changes = move.create_move(self.project, resource, offset).\ - get_changes(dest_resource) + get_changes(dest_resource) self.project.do(changes) def test_simple_moving(self): self.mod1.write('class AClass(object):\n pass\n') self._move(self.mod1, self.mod1.read().index('AClass') + 1, - self.mod2) + self.mod2) self.assertEquals('', self.mod1.read()) self.assertEquals('class AClass(object):\n pass\n', self.mod2.read()) @@ -66,7 +66,8 @@ def test_changing_destination_module(self): self.mod2.write('from mod1 import AClass\na_var = AClass()\n') self._move(self.mod1, self.mod1.read().index('AClass') + 1, self.mod2) - self.assertEquals('class AClass(object):\n pass\na_var = AClass()\n', + self.assertEquals('class AClass(object):\n ' + 'pass\na_var = AClass()\n', self.mod2.read()) def test_folder_destination(self): @@ -76,12 +77,13 @@ def test_folder_destination(self): self._move(self.mod1, self.mod1.read().index('AClass') + 1, folder) def test_raising_exception_for_moving_non_global_elements(self): - self.mod1.write('def a_func():\n class AClass(object):\n pass\n') + self.mod1.write( + 'def a_func():\n class AClass(object):\n pass\n') with self.assertRaises(exceptions.RefactoringError): self._move(self.mod1, self.mod1.read().index('AClass') + 1, self.mod2) - def test_raising_exception_for_moving_global_elements_to_the_same_module(self): + def test_raising_exception_for_mov_glob_elemnts_to_the_same_module(self): self.mod1.write('def a_func():\n pass\n') with self.assertRaises(exceptions.RefactoringError): self._move(self.mod1, self.mod1.read().index('a_func'), self.mod1) @@ -260,7 +262,8 @@ def test_moving_module_refactoring_and_nonexistent_destinations(self): def test_moving_methods_choosing_the_correct_class(self): code = 'class A(object):\n def a_method(self):\n pass\n' self.mod1.write(code) - mover = move.create_move(self.project, self.mod1, code.index('a_method')) + mover = move.create_move(self.project, self.mod1, + code.index('a_method')) self.assertTrue(isinstance(mover, move.MoveMethod)) def test_moving_methods_getting_new_method_for_empty_methods(self): @@ -294,7 +297,8 @@ def test_moving_methods_getting_new_method_using_main_object(self): self.mod1.write(code) mover = move.create_move(self.project, self.mod1, code.index('a_method')) - self.assertEquals('def new_method(self, host):\n return host.attr\n', + self.assertEquals('def new_method(self, host):' + '\n return host.attr\n', mover.get_new_method('new_method')) def test_moving_methods_getting_new_method_renaming_main_object(self): @@ -303,7 +307,8 @@ def test_moving_methods_getting_new_method_renaming_main_object(self): self.mod1.write(code) mover = move.create_move(self.project, self.mod1, code.index('a_method')) - self.assertEquals('def new_method(self, host):\n return host.attr\n', + self.assertEquals('def new_method(self, host):' + '\n return host.attr\n', mover.get_new_method('new_method')) def test_moving_methods_gettin_new_method_with_keyword_arguments(self): @@ -503,7 +508,7 @@ def test_moving_a_global_when_it_is_used_after_a_multiline_str(self): def test_raising_an_exception_when_moving_non_package_folders(self): dir = self.project.root.create_folder('dir') with self.assertRaises(exceptions.RefactoringError): - mover = move.create_move(self.project, dir) + move.create_move(self.project, dir) def test_moving_to_a_module_with_encoding_cookie(self): code1 = '# -*- coding: utf-8 -*-' diff --git a/ropetest/refactor/multiprojecttest.py b/ropetest/refactor/multiprojecttest.py index 723f5f4ba..1801f3281 100644 --- a/ropetest/refactor/multiprojecttest.py +++ b/ropetest/refactor/multiprojecttest.py @@ -1,7 +1,5 @@ import unittest -import rope.base.codeanalyze -import rope.refactor.occurrences from rope.refactor import multiproject, rename, move from ropetest import testutils diff --git a/ropetest/refactor/patchedasttest.py b/ropetest/refactor/patchedasttest.py index 4a6a4bcae..5eed47e05 100644 --- a/ropetest/refactor/patchedasttest.py +++ b/ropetest/refactor/patchedasttest.py @@ -15,241 +15,241 @@ def tearDown(self): def test_integer_literals_and_region(self): source = 'a = 10\n' - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) start = source.index('10') checker.check_region('Num', start, start + 2) def test_integer_literals_and_sorted_children(self): source = 'a = 10\n' - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) - start = source.index('10') + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) + #start = source.index('10') checker.check_children('Num', ['10']) def test_ass_name_node(self): source = 'a = 10\n' - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) start = source.index('a') checker.check_region('Name', start, start + 1) checker.check_children('Name', ['a']) def test_assign_node(self): source = 'a = 10\n' - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) - start = source.index('a') + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) + start = source.index('a') # noqa checker.check_region('Assign', 0, len(source) - 1) checker.check_children( 'Assign', ['Name', ' ', '=', ' ', 'Num']) def test_add_node(self): source = '1 + 2\n' - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) checker.check_region('BinOp', 0, len(source) - 1) checker.check_children( 'BinOp', ['Num', ' ', '+', ' ', 'Num']) def test_lshift_node(self): source = '1 << 2\n' - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) checker.check_region('BinOp', 0, len(source) - 1) checker.check_children( 'BinOp', ['Num', ' ', '<<', ' ', 'Num']) def test_and_node(self): source = 'True and True\n' - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) checker.check_region('BoolOp', 0, len(source) - 1) checker.check_children( 'BoolOp', ['Name', ' ', 'and', ' ', 'Name']) def test_basic_closing_parens(self): source = '1 + (2)\n' - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) checker.check_region('BinOp', 0, len(source) - 1) checker.check_children( 'BinOp', ['Num', ' ', '+', ' (', 'Num', ')']) def test_basic_opening_parens(self): source = '(1) + 2\n' - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) checker.check_region('BinOp', 0, len(source) - 1) checker.check_children( 'BinOp', ['(', 'Num', ') ', '+', ' ', 'Num']) def test_basic_opening_biway(self): source = '(1) + (2)\n' - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) checker.check_region('BinOp', 0, len(source) - 1) checker.check_children( 'BinOp', ['(', 'Num', ') ', '+', ' (', 'Num', ')']) def test_basic_opening_double(self): source = '1 + ((2))\n' - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) checker.check_region('BinOp', 0, len(source) - 1) checker.check_children( 'BinOp', ['Num', ' ', '+', ' ((', 'Num', '))']) def test_handling_comments(self): source = '(1 + #(\n2)\n' - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) checker.check_children( 'BinOp', ['Num', ' ', '+', ' #(\n', 'Num']) def test_handling_parens_with_spaces(self): source = '1 + (2\n )\n' - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) checker.check_children( 'BinOp', ['Num', ' ', '+', ' (', 'Num', '\n )']) def test_handling_strings(self): source = '1 + "("\n' - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) checker.check_children( 'BinOp', ['Num', ' ', '+', ' ', 'Str']) def test_handling_implicit_string_concatenation(self): source = "a = '1''2'" - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) checker.check_children( - 'Assign', ['Name' , ' ', '=', ' ', 'Str']) + 'Assign', ['Name', ' ', '=', ' ', 'Str']) checker.check_children('Str', ["'1''2'"]) def test_handling_implicit_string_concatenation_line_breaks(self): source = "a = '1' \\\n'2'" - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) checker.check_children( - 'Assign', ['Name' , ' ', '=', ' ', 'Str']) + 'Assign', ['Name', ' ', '=', ' ', 'Str']) checker.check_children('Str', ["'1' \\\n'2'"]) def test_handling_explicit_string_concatenation_line_breaks(self): source = "a = ('1' \n'2')" - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) checker.check_children( - 'Assign', ['Name' , ' ', '=', ' (', 'Str', ')']) + 'Assign', ['Name', ' ', '=', ' (', 'Str', ')']) checker.check_children('Str', ["'1' \n'2'"]) def test_not_concatenating_strings_on_separate_lines(self): source = "'1'\n'2'\n" - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) checker.check_children('Module', ['', 'Expr', '\n', 'Expr', '\n']) def test_long_integer_literals(self): source = "0x1L + a" - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) checker.check_children( - 'BinOp', ['Num' , ' ', '+', ' ', 'Name']) + 'BinOp', ['Num', ' ', '+', ' ', 'Name']) checker.check_children('Num', ['0x1L']) def test_complex_number_literals(self): source = "1.0e2j + a" - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) checker.check_children( - 'BinOp', ['Num' , ' ', '+', ' ', 'Name']) + 'BinOp', ['Num', ' ', '+', ' ', 'Name']) checker.check_children('Num', ['1.0e2j']) def test_ass_attr_node(self): source = 'a.b = 1\n' - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) checker.check_region('Attribute', 0, source.index('=') - 1) checker.check_children('Attribute', ['Name', '', '.', '', 'b']) def test_ass_list_node(self): source = '[a, b] = 1, 2\n' - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) checker.check_region('List', 0, source.index(']') + 1) checker.check_children('List', ['[', '', 'Name', '', ',', ' ', 'Name', '', ']']) def test_ass_tuple(self): source = 'a, b = range(2)\n' - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) checker.check_region('Tuple', 0, source.index('=') - 1) checker.check_children( 'Tuple', ['Name', '', ',', ' ', 'Name']) def test_ass_tuple2(self): source = '(a, b) = range(2)\n' - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) checker.check_region('Tuple', 0, source.index('=') - 1) checker.check_children( 'Tuple', ['(', '', 'Name', '', ',', ' ', 'Name', '', ')']) def test_assert(self): source = 'assert True\n' - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) checker.check_region('Assert', 0, len(source) - 1) checker.check_children( 'Assert', ['assert', ' ', 'Name']) def test_assert2(self): source = 'assert True, "error"\n' - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) checker.check_region('Assert', 0, len(source) - 1) checker.check_children( 'Assert', ['assert', ' ', 'Name', '', ',', ' ', 'Str']) def test_aug_assign_node(self): source = 'a += 1\n' - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) - start = source.index('a') + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) + start = source.index('a') # noqa checker.check_region('AugAssign', 0, len(source) - 1) checker.check_children( 'AugAssign', ['Name', ' ', '+', '', '=', ' ', 'Num']) def test_back_quotenode(self): source = '`1`\n' - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) checker.check_region('Repr', 0, len(source) - 1) checker.check_children( 'Repr', ['`', '', 'Num', '', '`']) def test_bitand(self): source = '1 & 2\n' - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) checker.check_region('BinOp', 0, len(source) - 1) checker.check_children( 'BinOp', ['Num', ' ', '&', ' ', 'Num']) def test_bitor(self): source = '1 | 2\n' - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) checker.check_children( 'BinOp', ['Num', ' ', '|', ' ', 'Num']) def test_call_func(self): source = 'f(1, 2)\n' - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) checker.check_region('Call', 0, len(source) - 1) checker.check_children( 'Call', ['Name', '', '(', '', 'Num', '', ',', @@ -257,39 +257,39 @@ def test_call_func(self): def test_call_func_and_keywords(self): source = 'f(1, p=2)\n' - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) checker.check_children( 'Call', ['Name', '', '(', '', 'Num', '', ',', ' ', 'keyword', '', ')']) def test_call_func_and_start_args(self): source = 'f(1, *args)\n' - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) checker.check_children( 'Call', ['Name', '', '(', '', 'Num', '', ',', ' ', '*', '', 'Name', '', ')']) def test_call_func_and_only_dstart_args(self): source = 'f(**kwds)\n' - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) checker.check_children( 'Call', ['Name', '', '(', '', '**', '', 'Name', '', ')']) def test_call_func_and_both_varargs_and_kwargs(self): source = 'f(*args, **kwds)\n' - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) checker.check_children( 'Call', ['Name', '', '(', '', '*', '', 'Name', '', ',', ' ', '**', '', 'Name', '', ')']) def test_class_node(self): source = 'class A(object):\n """class docs"""\n pass\n' - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) checker.check_region('Class', 0, len(source) - 1) checker.check_children( 'Class', ['class', ' ', 'A', '', '(', '', 'Name', '', ')', @@ -297,24 +297,24 @@ def test_class_node(self): def test_class_with_no_bases(self): source = 'class A:\n pass\n' - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) checker.check_region('Class', 0, len(source) - 1) checker.check_children( 'Class', ['class', ' ', 'A', '', ':', '\n ', 'Pass']) def test_simple_compare(self): source = '1 < 2\n' - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) checker.check_region('Compare', 0, len(source) - 1) checker.check_children( 'Compare', ['Num', ' ', '<', ' ', 'Num']) def test_multiple_compare(self): source = '1 < 2 <= 3\n' - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) checker.check_region('Compare', 0, len(source) - 1) checker.check_children( 'Compare', ['Num', ' ', '<', ' ', 'Num', ' ', @@ -322,8 +322,8 @@ def test_multiple_compare(self): def test_decorators_node(self): source = '@d\ndef f():\n pass\n' - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) checker.check_region('FunctionDef', 0, len(source) - 1) checker.check_children( 'FunctionDef', @@ -333,8 +333,8 @@ def test_decorators_node(self): @testutils.only_for('2.6') def test_decorators_for_classes(self): source = '@d\nclass C(object):\n pass\n' - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) checker.check_region('ClassDef', 0, len(source) - 1) checker.check_children( 'ClassDef', @@ -343,46 +343,48 @@ def test_decorators_for_classes(self): def test_both_varargs_and_kwargs(self): source = 'def f(*args, **kwds):\n pass\n' - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) checker.check_children( - 'arguments', ['*', '', 'args' , '', ',' , ' ', '**', '', 'kwds']) + 'arguments', ['*', '', 'args', '', ',', ' ', '**', '', 'kwds']) def test_function_node(self): source = 'def f():\n pass\n' - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) checker.check_region('Function', 0, len(source) - 1) - checker.check_children('Function', ['def', ' ', 'f', '', '(', '', 'arguments', '', + checker.check_children('Function', + ['def', ' ', 'f', '', '(', '', 'arguments', '', ')', '', ':', '\n ', 'Pass']) def test_function_node2(self): source = 'def f(p1, **p2):\n """docs"""\n pass\n' - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) checker.check_region('Function', 0, len(source) - 1) checker.check_children( 'Function', ['def', ' ', 'f', '', '(', '', 'arguments', - '', ')' , '', ':', '\n ', 'Expr', '\n ', 'Pass']) + '', ')', '', ':', '\n ', 'Expr', '\n ', + 'Pass']) checker.check_children( 'arguments', ['Name', '', ',', ' ', '**', '', 'p2']) def test_function_node_and_tuple_parameters(self): source = 'def f(a, (b, c)):\n pass\n' - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) checker.check_region('Function', 0, len(source) - 1) checker.check_children( 'Function', ['def', ' ', 'f', '', '(', '', 'arguments', - '', ')' , '', ':', '\n ', 'Pass']) + '', ')', '', ':', '\n ', 'Pass']) checker.check_children( 'arguments', ['Name', '', ',', ' ', 'Tuple']) def test_dict_node(self): source = '{1: 2, 3: 4}\n' - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) checker.check_region('Dict', 0, len(source) - 1) checker.check_children( 'Dict', ['{', '', 'Num', '', ':', ' ', 'Num', '', ',', @@ -390,22 +392,22 @@ def test_dict_node(self): def test_div_node(self): source = '1 / 2\n' - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) checker.check_region('BinOp', 0, len(source) - 1) checker.check_children('BinOp', ['Num', ' ', '/', ' ', 'Num']) def test_simple_exec_node(self): source = 'exec ""\n' - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) checker.check_region('Exec', 0, len(source) - 1) checker.check_children('Exec', ['exec', ' ', 'Str']) def test_exec_node(self): source = 'exec "" in locals(), globals()\n' - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) checker.check_region('Exec', 0, len(source) - 1) checker.check_children( 'Exec', ['exec', ' ', 'Str', ' ', 'in', @@ -413,8 +415,8 @@ def test_exec_node(self): def test_for_node(self): source = 'for i in range(1):\n pass\nelse:\n pass\n' - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) checker.check_region('For', 0, len(source) - 1) checker.check_children( 'For', ['for', ' ', 'Name', ' ', 'in', ' ', 'Call', '', @@ -423,8 +425,8 @@ def test_for_node(self): def test_normal_from_node(self): source = 'from x import y\n' - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) checker.check_region('ImportFrom', 0, len(source) - 1) checker.check_children( 'ImportFrom', ['from', ' ', 'x', ' ', 'import', ' ', 'alias']) @@ -433,8 +435,8 @@ def test_normal_from_node(self): @testutils.run_only_for_25 def test_from_node(self): source = 'from ..x import y as z\n' - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) checker.check_region('ImportFrom', 0, len(source) - 1) checker.check_children( 'ImportFrom', ['from', ' ', '..', '', 'x', ' ', @@ -444,8 +446,8 @@ def test_from_node(self): @testutils.run_only_for_25 def test_from_node_relative_import(self): source = 'from . import y as z\n' - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) checker.check_region('ImportFrom', 0, len(source) - 1) checker.check_children( 'ImportFrom', ['from', ' ', '.', '', '', ' ', @@ -454,8 +456,8 @@ def test_from_node_relative_import(self): def test_simple_gen_expr_node(self): source = 'zip(i for i in x)\n' - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) checker.check_region('GeneratorExp', 4, len(source) - 2) checker.check_children( 'GeneratorExp', ['Name', ' ', 'comprehension']) @@ -464,38 +466,39 @@ def test_simple_gen_expr_node(self): def test_gen_expr_node_handling_surrounding_parens(self): source = '(i for i in x)\n' - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) checker.check_region('GeneratorExp', 0, len(source) - 1) checker.check_children( 'GeneratorExp', ['(', '', 'Name', ' ', 'comprehension', '', ')']) def test_gen_expr_node2(self): source = 'zip(i for i in range(1) if i == 1)\n' - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) checker.check_children( 'comprehension', ['for', ' ', 'Name', ' ', 'in', ' ', 'Call', ' ', 'if', ' ', 'Compare']) def test_get_attr_node(self): source = 'a.b\n' - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) checker.check_region('Attribute', 0, len(source) - 1) checker.check_children('Attribute', ['Name', '', '.', '', 'b']) def test_global_node(self): source = 'global a, b\n' - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) checker.check_region('Global', 0, len(source) - 1) - checker.check_children('Global', ['global', ' ', 'a', '', ',', ' ', 'b']) + checker.check_children('Global', ['global', ' ', 'a', '', ',', ' ', + 'b']) def test_if_node(self): source = 'if True:\n pass\nelse:\n pass\n' - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) checker.check_region('If', 0, len(source) - 1) checker.check_children( 'If', ['if', ' ', 'Name', '', ':', '\n ', 'Pass', '\n', @@ -503,8 +506,8 @@ def test_if_node(self): def test_if_node2(self): source = 'if True:\n pass\nelif False:\n pass\n' - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) checker.check_region('If', 0, len(source) - 1) checker.check_children( 'If', ['if', ' ', 'Name', '', ':', '\n ', 'Pass', '\n', @@ -513,8 +516,8 @@ def test_if_node2(self): def test_if_node3(self): source = 'if True:\n pass\nelse:\n' \ ' if True:\n pass\n' - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) checker.check_region('If', 0, len(source) - 1) checker.check_children( 'If', ['if', ' ', 'Name', '', ':', '\n ', 'Pass', '\n', @@ -522,16 +525,16 @@ def test_if_node3(self): def test_import_node(self): source = 'import a, b as c\n' - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) checker.check_region('Import', 0, len(source) - 1) checker.check_children( 'Import', ['import', ' ', 'alias', '', ',', ' ', 'alias']) def test_lambda_node(self): source = 'lambda a, b=1, *z: None\n' - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) checker.check_region('Lambda', 0, len(source) - 1) checker.check_children( 'Lambda', ['lambda', ' ', 'arguments', '', ':', ' ', 'Name']) @@ -541,16 +544,16 @@ def test_lambda_node(self): def test_list_node(self): source = '[1, 2]\n' - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) checker.check_region('List', 0, len(source) - 1) checker.check_children( 'List', ['[', '', 'Num', '', ',', ' ', 'Num', '', ']']) def test_list_comp_node(self): source = '[i for i in range(1) if True]\n' - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) checker.check_region('ListComp', 0, len(source) - 1) checker.check_children( 'ListComp', ['[', '', 'Name', ' ', 'comprehension', '', ']']) @@ -560,8 +563,8 @@ def test_list_comp_node(self): def test_list_comp_node_with_multiple_comprehensions(self): source = '[i for i in range(1) for j in range(1) if True]\n' - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) checker.check_region('ListComp', 0, len(source) - 1) checker.check_children( 'ListComp', ['[', '', 'Name', ' ', 'comprehension', @@ -572,52 +575,52 @@ def test_list_comp_node_with_multiple_comprehensions(self): def test_ext_slice_node(self): source = 'x = xs[0,:]\n' - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) checker.check_region('ExtSlice', 7, len(source) - 2) checker.check_children('ExtSlice', ['Index', '', ',', '', 'Slice']) def test_simple_module_node(self): source = 'pass\n' - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) checker.check_region('Module', 0, len(source)) checker.check_children('Module', ['', 'Pass', '\n']) def test_module_node(self): source = '"""docs"""\npass\n' - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) checker.check_region('Module', 0, len(source)) checker.check_children('Module', ['', 'Expr', '\n', 'Pass', '\n']) checker.check_children('Str', ['"""docs"""']) def test_not_and_or_nodes(self): source = 'not True or False\n' - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) checker.check_children('Expr', ['BoolOp']) checker.check_children('BoolOp', ['UnaryOp', ' ', 'or', ' ', 'Name']) def test_print_node(self): source = 'print >>out, 1,\n' - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) checker.check_region('Print', 0, len(source) - 1) checker.check_children('Print', ['print', ' ', '>>', '', 'Name', '', ',', ' ', 'Num', '', ',']) def test_printnl_node(self): source = 'print 1\n' - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) checker.check_region('Print', 0, len(source) - 1) checker.check_children('Print', ['print', ' ', 'Num']) def test_raise_node(self): source = 'raise x, y, z\n' - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) checker.check_region('Raise', 0, len(source) - 1) checker.check_children( 'Raise', ['raise', ' ', 'Name', '', ',', ' ', 'Name', '', ',', @@ -625,20 +628,20 @@ def test_raise_node(self): def test_return_node(self): source = 'def f():\n return None\n' - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) checker.check_children('Return', ['return', ' ', 'Name']) def test_empty_return_node(self): source = 'def f():\n return\n' - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) checker.check_children('Return', ['return']) def test_simple_slice_node(self): source = 'a[1:2]\n' - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) checker.check_children( 'Subscript', ['Name', '', '[', '', 'Slice', '', ']']) checker.check_children( @@ -646,79 +649,81 @@ def test_simple_slice_node(self): def test_slice_node2(self): source = 'a[:]\n' - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) - checker.check_children('Subscript', ['Name', '', '[', '', 'Slice', '', ']']) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) + checker.check_children('Subscript', ['Name', '', '[', '', 'Slice', + '', ']']) checker.check_children('Slice', [':']) def test_simple_subscript(self): source = 'a[1]\n' - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) checker.check_children( 'Subscript', ['Name', '', '[', '', 'Index', '', ']']) checker.check_children('Index', ['Num']) def test_tuple_node(self): source = '(1, 2)\n' - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) checker.check_children( 'Tuple', ['(', '', 'Num', '', ',', ' ', 'Num', '', ')']) def test_tuple_node2(self): source = '#(\n1, 2\n' - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) checker.check_children('Tuple', ['Num', '', ',', ' ', 'Num']) def test_one_item_tuple_node(self): source = '(1,)\n' - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) checker.check_children('Tuple', ['(', '', 'Num', ',', ')']) def test_empty_tuple_node(self): source = '()\n' - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) checker.check_children('Tuple', ['(', '', ')']) def test_yield_node(self): source = 'def f():\n yield None\n' - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) checker.check_children('Yield', ['yield', ' ', 'Name']) def test_while_node(self): source = 'while True:\n pass\nelse:\n pass\n' - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) checker.check_children( 'While', ['while', ' ', 'Name', '', ':', '\n ', 'Pass', '\n', 'else', '', ':', '\n ', 'Pass']) @testutils.run_only_for_25 def test_with_node(self): - source = 'from __future__ import with_statement\nwith a as b:\n pass\n' - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + source = 'from __future__ import with_statement\nwith a as ' \ + 'b:\n pass\n' + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) checker.check_children( 'With', ['with', ' ', 'Name', ' ', 'as', ' ', 'Name', '', ':', '\n ', 'Pass']) def test_try_finally_node(self): source = 'try:\n pass\nfinally:\n pass\n' - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) checker.check_children( 'TryFinally', ['try', '', ':', '\n ', 'Pass', '\n', 'finally', '', ':', '\n ', 'Pass']) def test_try_except_node(self): source = 'try:\n pass\nexcept Exception, e:\n pass\n' - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) checker.check_children( 'TryExcept', ['try', '', ':', '\n ', 'Pass', '\n', ('excepthandler', 'ExceptHandler')]) @@ -729,8 +734,8 @@ def test_try_except_node(self): def test_try_except_node__with_as_syntax(self): source = 'try:\n pass\nexcept Exception as e:\n pass\n' - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) checker.check_children( 'TryExcept', ['try', '', ':', '\n ', 'Pass', '\n', ('excepthandler', 'ExceptHandler')]) @@ -739,61 +744,60 @@ def test_try_except_node__with_as_syntax(self): ['except', ' ', 'Name', ' ', 'as', ' ', 'Name', '', ':', '\n ', 'Pass']) - @testutils.run_only_for_25 def test_try_except_and_finally_node(self): source = 'try:\n pass\nexcept:\n pass\nfinally:\n pass\n' - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) checker.check_children( 'TryFinally', ['TryExcept', '\n', 'finally', '', ':', '\n ', 'Pass']) def test_ignoring_comments(self): source = '#1\n1\n' - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) start = source.rindex('1') checker.check_region('Num', start, start + 1) def test_simple_sliceobj(self): source = 'a[1::3]\n' - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) checker.check_children( 'Slice', ['Num', '', ':', '', ':', '', 'Num']) def test_ignoring_strings_that_start_with_a_char(self): source = 'r"""("""\n1\n' - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) checker.check_children( 'Module', ['', 'Expr', '\n', 'Expr', '\n']) def test_how_to_handle_old_not_equals(self): source = '1 <> 2\n' - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) checker.check_children( 'Compare', ['Num', ' ', '<>', ' ', 'Num']) def test_semicolon(self): source = '1;\n' - ast = patchedast.get_patched_ast(source, True) + patchedast.get_patched_ast(source, True) @testutils.run_only_for_25 def test_if_exp_node(self): source = '1 if True else 2\n' - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) checker.check_children( 'IfExp', ['Num', ' ', 'if', ' ', 'Name', ' ', 'else', ' ', 'Num']) def test_delete_node(self): source = 'del a, b\n' - ast = patchedast.get_patched_ast(source, True) - checker = _ResultChecker(self, ast) + ast_frag = patchedast.get_patched_ast(source, True) + checker = _ResultChecker(self, ast_frag) checker.check_children( 'Delete', ['del', ' ', 'Name', '', ',', ' ', 'Name']) @@ -814,8 +818,10 @@ def _find_node(self, text): goal = text if not isinstance(text, (tuple, list)): goal = [text] + class Search(object): result = None + def __call__(self, node): for text in goal: if str(node).startswith(text): diff --git a/ropetest/refactor/renametest.py b/ropetest/refactor/renametest.py index 334243068..a8f579cb7 100644 --- a/ropetest/refactor/renametest.py +++ b/ropetest/refactor/renametest.py @@ -29,7 +29,7 @@ def _local_rename(self, source_code, offset, new_name): def _rename(self, resource, offset, new_name, **kwds): changes = Rename(self.project, resource, offset).\ - get_changes(new_name, **kwds) + get_changes(new_name, **kwds) self.project.do(changes) def test_simple_global_variable_renaming(self): @@ -80,9 +80,10 @@ def test_renaming_function_parameters2(self): def test_renaming_occurrences_inside_functions(self): code = 'def a_func(p1):\n a = p1\na_func(1)\n' - refactored = self._local_rename(code, code.index('p1') + 1, 'new_param') + refactored = self._local_rename(code, code.index('p1') + 1, + 'new_param') self.assertEquals( - 'def a_func(new_param):\n a = new_param\na_func(1)\n', + 'def a_func(new_param):\n a = new_param\na_func(1)\n', refactored) def test_renaming_arguments_for_normal_args_changing_calls(self): @@ -93,14 +94,17 @@ def test_renaming_arguments_for_normal_args_changing_calls(self): refactored) def test_renaming_function_parameters_of_class_init(self): - code = 'class A(object):\n def __init__(self, a_param):\n pass\n' \ + code = 'class A(object):\n def __init__(self, a_param):' \ + '\n pass\n' \ 'a_var = A(a_param=1)\n' - refactored = self._local_rename(code, code.index('a_param') + 1, 'new_param') - expected = 'class A(object):\n def __init__(self, new_param):\n pass\n' \ - 'a_var = A(new_param=1)\n' + refactored = self._local_rename(code, code.index('a_param') + 1, + 'new_param') + expected = 'class A(object):\n ' \ + 'def __init__(self, new_param):\n pass\n' \ + 'a_var = A(new_param=1)\n' self.assertEquals(expected, refactored) - def test_renaming_functions_parameters_and_occurances_in_other_modules(self): + def test_renam_functions_parameters_and_occurances_in_other_modules(self): mod1 = testutils.create_module(self.project, 'mod1') mod2 = testutils.create_module(self.project, 'mod2') mod1.write('def a_func(a_param):\n print(a_param)\n') @@ -273,7 +277,8 @@ def test_renaming_methods_in_subclasses(self): in_hierarchy=True) self.assertEquals( 'class A(object):\n def new_method(self):\n pass\n' - 'class B(A):\n def new_method(self):\n pass\n', mod.read()) + 'class B(A):\n def new_method(self):\n pass\n', + mod.read()) def test_renaming_methods_in_sibling_classes(self): mod = testutils.create_module(self.project, 'mod1') @@ -286,7 +291,8 @@ def test_renaming_methods_in_sibling_classes(self): self.assertEquals( 'class A(object):\n def new_method(self):\n pass\n' 'class B(A):\n def new_method(self):\n pass\n' - 'class C(A):\n def new_method(self):\n pass\n', mod.read()) + 'class C(A):\n def new_method(self):\n pass\n', + mod.read()) def test_not_renaming_methods_in_hierarchies(self): mod = testutils.create_module(self.project, 'mod1') @@ -297,7 +303,8 @@ def test_not_renaming_methods_in_hierarchies(self): in_hierarchy=False) self.assertEquals( 'class A(object):\n def a_method(self):\n pass\n' - 'class B(A):\n def new_method(self):\n pass\n', mod.read()) + 'class B(A):\n def new_method(self):\n pass\n', + mod.read()) def test_undoing_refactorings(self): mod1 = testutils.create_module(self.project, 'mod1') @@ -347,21 +354,26 @@ def test_renaming_assigned_parameters(self): ' return arg\nf(arg=1)\n', refactored) def test_renaming_parameters_not_renaming_others(self): - code = 'def a_func(param):\n print(param)\nparam=10\na_func(param)\n' - refactored = self._local_rename(code, code.find('param') + 1, 'new_param') + code = 'def a_func(param):' \ + '\n print(param)\nparam=10\na_func(param)\n' + refactored = self._local_rename(code, code.find('param') + 1, + 'new_param') self.assertEquals('def a_func(new_param):\n print(new_param)\n' 'param=10\na_func(param)\n', refactored) def test_renaming_parameters_not_renaming_others2(self): - code = 'def a_func(param):\n print(param)\nparam=10\na_func(param=param)' - refactored = self._local_rename(code, code.find('param') + 1, 'new_param') + code = 'def a_func(param):\n print(param)\n' \ + 'param=10\na_func(param=param)' + refactored = self._local_rename(code, code.find('param') + 1, + 'new_param') self.assertEquals('def a_func(new_param):\n print(new_param)\n' 'param=10\na_func(new_param=param)', refactored) def test_renaming_parameters_with_multiple_params(self): code = 'def a_func(param1, param2):\n print(param1)\n'\ 'a_func(param1=1, param2=2)\n' - refactored = self._local_rename(code, code.find('param1') + 1, 'new_param') + refactored = self._local_rename(code, code.find('param1') + 1, + 'new_param') self.assertEquals( 'def a_func(new_param, param2):\n print(new_param)\n' 'a_func(new_param=1, param2=2)\n', refactored) @@ -390,7 +402,8 @@ def test_renaming_parameters_spaces_before_call(self): def test_renaming_parameter_like_objects_after_keywords(self): code = 'def a_func(param):\n print(param)\ndict(param=hey)\n' - refactored = self._local_rename(code, code.find('param') + 1, 'new_param') + refactored = self._local_rename(code, code.find('param') + 1, + 'new_param') self.assertEquals('def a_func(new_param):\n print(new_param)\n' 'dict(param=hey)\n', refactored) @@ -432,9 +445,10 @@ def test_renaming_resources_using_rename_module_refactoring(self): mod2.write('import mod1\nmy_var = mod1.a_var\n') renamer = rename.Rename(self.project, mod1) renamer.get_changes('newmod').do() - self.assertEquals('import newmod\nmy_var = newmod.a_var\n', mod2.read()) + self.assertEquals('import newmod\nmy_var = newmod.a_var\n', + mod2.read()) - def test_renaming_resources_using_rename_module_refactoring_for_packages(self): + def test_renam_resources_using_rename_module_refactor_for_packages(self): mod1 = testutils.create_module(self.project, 'mod1') pkg = testutils.create_package(self.project, 'pkg') mod1.write('import pkg\nmy_pkg = pkg') @@ -442,7 +456,7 @@ def test_renaming_resources_using_rename_module_refactoring_for_packages(self): renamer.get_changes('newpkg').do() self.assertEquals('import newpkg\nmy_pkg = newpkg', mod1.read()) - def test_renaming_resources_using_rename_module_refactoring_for_init_dot_py(self): + def test_renam_resources_use_rename_module_refactor_for_init_dot_py(self): mod1 = testutils.create_module(self.project, 'mod1') pkg = testutils.create_package(self.project, 'pkg') mod1.write('import pkg\nmy_pkg = pkg') @@ -454,14 +468,16 @@ def test_renaming_global_variables(self): code = 'a_var = 1\ndef a_func():\n global a_var\n var = a_var\n' refactored = self._local_rename(code, code.index('a_var'), 'new_var') self.assertEquals( - 'new_var = 1\ndef a_func():\n global new_var\n var = new_var\n', + 'new_var = 1\ndef a_func():\n ' + 'global new_var\n var = new_var\n', refactored) def test_renaming_global_variables2(self): code = 'a_var = 1\ndef a_func():\n global a_var\n var = a_var\n' refactored = self._local_rename(code, code.rindex('a_var'), 'new_var') self.assertEquals( - 'new_var = 1\ndef a_func():\n global new_var\n var = new_var\n', + 'new_var = 1\ndef a_func():\n ' + 'global new_var\n var = new_var\n', refactored) def test_renaming_when_unsure(self): @@ -472,7 +488,7 @@ def test_renaming_when_unsure(self): self._rename(mod1, code.index('a_func'), 'new_func', unsure=self._true) self.assertEquals( - 'class C(object):\n def new_func(self):\n pass\n' \ + 'class C(object):\n def new_func(self):\n pass\n' 'def f(arg):\n arg.new_func()\n', mod1.read()) @@ -488,7 +504,7 @@ def confirm(occurrence): mod1.write(code) self._rename(mod1, code.index('a_func'), 'new_func', unsure=confirm) self.assertEquals( - 'class C(object):\n def new_func(self):\n pass\n' \ + 'class C(object):\n def new_func(self):\n pass\n' 'def f(arg):\n arg.a_func()\n', mod1.read()) def test_renaming_when_unsure_not_renaming_knowns(self): @@ -499,8 +515,8 @@ def test_renaming_when_unsure_not_renaming_knowns(self): mod1.write(code) self._rename(mod1, code.index('a_func'), 'new_func', unsure=self._true) self.assertEquals( - 'class C1(object):\n def new_func(self):\n pass\n' \ - 'class C2(object):\n def a_func(self):\n pass\n' \ + 'class C1(object):\n def new_func(self):\n pass\n' + 'class C2(object):\n def a_func(self):\n pass\n' 'c1 = C1()\nc1.new_func()\nc2 = C2()\nc2.a_func()\n', mod1.read()) @@ -535,7 +551,8 @@ def test_renaming_occurrences_in_overwritten_scopes(self): def test_renaming_occurrences_in_overwritten_scopes2(self): code = 'def f():\n a_var = 1\n print(a_var)\n' \ 'def f():\n a_var = 1\n print(a_var)\n' - refactored = self._local_rename(code, code.index('a_var') + 1, 'new_var') + refactored = self._local_rename(code, code.index('a_var') + 1, + 'new_var') self.assertEquals(code.replace('a_var', 'new_var', 2), refactored) def test_dos_line_ending_and_renaming(self): @@ -548,7 +565,7 @@ def test_dos_line_ending_and_renaming(self): def test_multi_byte_strs_and_renaming(self): s = u'{LATIN SMALL LETTER I WITH DIAERESIS}' * 4 code = u'# -*- coding: utf-8 -*-\n# ' + s + \ - '\na = 1\nprint(2 + a + 2)\n' + '\na = 1\nprint(2 + a + 2)\n' refactored = self._local_rename(code, code.rindex('a'), 'b') self.assertEquals(u'# -*- coding: utf-8 -*-\n# ' + s + '\nb = 1\nprint(2 + b + 2)\n', refactored) @@ -645,7 +662,7 @@ def tearDown(self): def _rename(self, resource, offset, new_name, **kwds): changes = Rename(self.project, resource, offset).\ - get_changes(new_name, **kwds) + get_changes(new_name, **kwds) self.project.do(changes) def test_performing_rename_on_parameters(self): diff --git a/ropetest/refactor/restructuretest.py b/ropetest/refactor/restructuretest.py index 27c1fb0e1..b721e3085 100644 --- a/ropetest/refactor/restructuretest.py +++ b/ropetest/refactor/restructuretest.py @@ -170,7 +170,7 @@ def test_unsure_argument_of_default_wildcard(self): self.mod.write('def f(p):\n return p * 2\nx = "" * 2\ni = 1 * 2\n') refactoring = restructure.Restructure( self.project, '${s} * 2', 'dup(${s})', - args={'s': {'type': '__builtins__.str','unsure': True}}) + args={'s': {'type': '__builtins__.str', 'unsure': True}}) self.project.do(refactoring.get_changes()) self.assertEquals('def f(p):\n return dup(p)\nx = dup("")\n' 'i = 1 * 2\n', self.mod.read()) diff --git a/ropetest/refactor/similarfindertest.py b/ropetest/refactor/similarfindertest.py index 13aab6a02..88dc31bb1 100644 --- a/ropetest/refactor/similarfindertest.py +++ b/ropetest/refactor/similarfindertest.py @@ -60,9 +60,9 @@ def test_multiple_matches(self): result = list(finder.get_match_regions('1')) self.assertEquals(2, len(result)) start1 = source.index('1') - self.assertEquals((start1, start1 + 1) , result[0]) + self.assertEquals((start1, start1 + 1), result[0]) start2 = source.rindex('1') - self.assertEquals((start2, start2 + 1) , result[1]) + self.assertEquals((start2, start2 + 1), result[1]) def test_multiple_matches2(self): source = 'a = 1\nb = 2\n\na = 1\nb = 2\n' @@ -242,7 +242,6 @@ def test_checking_equality_of_imported_pynames(self): mod2 = testutils.create_module(self.project, 'mod2') mod2.write('class A(object):\n pass\n') self.mod1.write('from mod2 import A\nan_a = A()\n') - pymod2 = self.pycore.resource_to_pyobject(mod2) pymod1 = self.pycore.resource_to_pyobject(self.mod1) finder = similarfinder.SimilarFinder(pymod1) result = list(finder.get_matches('${a_class}()', diff --git a/ropetest/refactor/usefunctiontest.py b/ropetest/refactor/usefunctiontest.py index b73e52764..a6eada009 100644 --- a/ropetest/refactor/usefunctiontest.py +++ b/ropetest/refactor/usefunctiontest.py @@ -82,7 +82,7 @@ def test_when_performing_on_non_functions(self): code = 'var = 1\n' self.mod1.write(code) with self.assertRaises(exceptions.RefactoringError): - user = UseFunction(self.project, self.mod1, code.rindex('var')) + UseFunction(self.project, self.mod1, code.rindex('var')) def test_differing_in_the_inner_temp_names(self): code = 'def f(p):\n a = p + 1\n print(a)\nb = 2 + 1\nprint(b)\n' @@ -106,19 +106,19 @@ def test_exception_when_performing_a_function_with_yield(self): code = 'def func():\n yield 1\n' self.mod1.write(code) with self.assertRaises(exceptions.RefactoringError): - user = UseFunction(self.project, self.mod1, code.index('func')) + UseFunction(self.project, self.mod1, code.index('func')) def test_exception_when_performing_a_function_two_returns(self): code = 'def func():\n return 1\n return 2\n' self.mod1.write(code) with self.assertRaises(exceptions.RefactoringError): - user = UseFunction(self.project, self.mod1, code.index('func')) + UseFunction(self.project, self.mod1, code.index('func')) def test_exception_when_returns_is_not_the_last_statement(self): code = 'def func():\n return 2\n a = 1\n' self.mod1.write(code) with self.assertRaises(exceptions.RefactoringError): - user = UseFunction(self.project, self.mod1, code.index('func')) + UseFunction(self.project, self.mod1, code.index('func')) if __name__ == '__main__': diff --git a/ropetest/runmodtest.py b/ropetest/runmodtest.py index 47022fd47..a425488e2 100644 --- a/ropetest/runmodtest.py +++ b/ropetest/runmodtest.py @@ -16,14 +16,15 @@ def tearDown(self): testutils.remove_project(self.project) super(PythonFileRunnerTest, self).tearDown() - def make_sample_python_file(self, file_path, get_text_function_source=None): + def make_sample_python_file(self, file_path, + get_text_function_source=None): self.project.root.create_file(file_path) file = self.project.get_resource(file_path) if not get_text_function_source: get_text_function_source = "def get_text():\n return 'run'\n\n" file_content = get_text_function_source + \ - "output = open('output.txt', 'w')\n" \ - "output.write(get_text())\noutput.close()\n" + "output = open('output.txt', 'w')\n" \ + "output.write(get_text())\noutput.close()\n" file.write(file_content) def get_output_file_content(self, file_path): @@ -47,27 +48,33 @@ def test_making_runner(self): def test_passing_arguments(self): file_path = 'sample.py' - function_source = 'import sys\ndef get_text():\n return str(sys.argv[1:])\n' + function_source = 'import sys\ndef get_text():' \ + '\n return str(sys.argv[1:])\n' self.make_sample_python_file(file_path, function_source) file_resource = self.project.get_resource(file_path) runner = self.pycore.run_module(file_resource, args=['hello', 'world']) runner.wait_process() - self.assertTrue(self.get_output_file_content(file_path).endswith("['hello', 'world']")) + self.assertTrue(self.get_output_file_content( + file_path).endswith("['hello', 'world']")) def test_passing_arguments_with_spaces(self): file_path = 'sample.py' - function_source = 'import sys\ndef get_text():\n return str(sys.argv[1:])\n' + function_source = 'import sys\ndef get_text():' \ + '\n return str(sys.argv[1:])\n' self.make_sample_python_file(file_path, function_source) file_resource = self.project.get_resource(file_path) runner = self.pycore.run_module(file_resource, args=['hello world']) runner.wait_process() - self.assertTrue(self.get_output_file_content(file_path).endswith("['hello world']")) + self.assertTrue(self.get_output_file_content( + file_path).endswith("['hello world']")) def test_killing_runner(self): file_path = 'sample.py' self.make_sample_python_file(file_path, - "def get_text():" + - "\n import time\n time.sleep(1)\n return 'run'\n") + 'def get_text():' + '\n import time' + '\n time.sleep(1)' + "\n return 'run'\n") file_resource = self.project.get_resource(file_path) runner = self.pycore.run_module(file_resource) runner.kill_process() @@ -86,7 +93,8 @@ def test_setting_process_input(self): file_path = 'sample.py' self.make_sample_python_file(file_path, "def get_text():" + - "\n import sys\n return sys.stdin.readline()\n") + "\n import sys" + "\n return sys.stdin.readline()\n") temp_file_name = 'processtest.tmp' try: temp_file = open(temp_file_name, 'w') @@ -97,7 +105,8 @@ def test_setting_process_input(self): runner = self.pycore.run_module(file_resource, stdin=stdin) runner.wait_process() stdin.close() - self.assertEquals('input text\n', self.get_output_file_content(file_path)) + self.assertEquals('input text\n', + self.get_output_file_content(file_path)) finally: os.remove(temp_file_name) @@ -105,7 +114,8 @@ def test_setting_process_output(self): file_path = 'sample.py' self.make_sample_python_file(file_path, "def get_text():" + - "\n print 'output text'\n return 'run'\n") + "\n print 'output text'" + "\n return 'run'\n") temp_file_name = 'processtest.tmp' try: file_resource = self.project.get_resource(file_path) @@ -127,7 +137,8 @@ def test_setting_pythonpath(self): file_path = 'test/test.py' self.make_sample_python_file(file_path, "def get_text():\n" - " import sample\n sample.f()\n return'run'\n") + " import sample" + "\n sample.f()\n return'run'\n") file_resource = self.project.get_resource(file_path) runner = self.pycore.run_module(file_resource) runner.wait_process()