class RopeComplete(object): def __init__(self, project_path, source_code, resource_path, code_point): self.project = Project(project_path) self.project.pycore._init_python_files() self.resource = self.project.get_resource(resource_path) self.source_code = source_code self.code_point = code_point def __del__(self): self.project.close() def get_proposals(self): ret = [] proposals = codeassist.code_assist(self.project, self.source_code, self.code_point, resource=self.resource, maxfixes=10) proposals = codeassist.sorted_proposals(proposals) if V(ROPE_VERSION) <= V('0.9.2'): for proposal in proposals: ret.append(new_completion_item(name=proposal.name, scope=proposal.kind, type=proposal.type)) else: for proposal in proposals: ret.append(new_completion_item(name=proposal.name, scope=proposal.scope, type=proposal.type)) return ret def get_calltip(self): calltip = codeassist.get_doc(self.project, self.source_code, self.code_point, resource=self.resource, maxfixes=10) return calltip
def inline(inline_fns, dirname, filename): project = Project(dirname) resource = project.get_resource(filename) for inline_fn in inline_fns: try: # FIXME: temporarily handling not implemented error changes = create_inline( project, resource, resource.read().index(inline_fn)).get_changes(remove=True) project.do(changes) except Exception as e: pass
class RopeComplete(object): def __init__(self, project_path, source_code, resource_path, code_point): self.project = Project(project_path) self.project.pycore._init_python_files() self.resource = self.project.get_resource(resource_path) self.source_code = source_code self.code_point = code_point def __del__(self): self.project.close() def get_proposals(self): ret = [] proposals = codeassist.code_assist(self.project, self.source_code, self.code_point, resource=self.resource, maxfixes=10) proposals = codeassist.sorted_proposals(proposals) if V(ROPE_VERSION) <= V('0.9.2'): for proposal in proposals: ret.append( new_completion_item(name=proposal.name, scope=proposal.kind, type=proposal.type)) else: for proposal in proposals: ret.append( new_completion_item(name=proposal.name, scope=proposal.scope, type=proposal.type)) return ret def get_calltip(self): calltip = codeassist.get_doc(self.project, self.source_code, self.code_point, resource=self.resource, maxfixes=10) return calltip
def complete(self): if TM_PROJECT_DIRECTORY is None: return '' #from rope.contrib import autoimport project = Project(TM_PROJECT_DIRECTORY) #autoimport = autoimport.AutoImport(project) resource = project.get_resource(TM_FILEPATH.replace(TM_PROJECT_DIRECTORY, '')[1:]) #project.validate(self.project_path) caret_index = self.source.find(TM_CURRENT_LINE) + TM_LINE_INDEX try: proposals = codeassist.code_assist(project, self.source, caret_index, resource) except: ass = PythonCodeAssist(project) proposals = ass.assist(self.source, caret_index, resource) try: if len(proposals) == 0: return '' except: return '' if len(proposals) == 1: selection = proposals[0].name else: proposals = codeassist.sorted_proposals(proposals) #autoimport.generate_cache() #autoimport.generate_modules_cache(modules) #project.pycore.analyze_module(resource) names = [proposal.name for proposal in proposals] #if self.starting.strip() and '.' not in self.expression: # import_assists = self.autoimport.import_assist(self.starting) # names.extend(x[0] + ' : ' + x[1] for x in import_assists) #plist = "{ menuItems=(%s);}" selection = dialog.menu(names) if selection is None: return '' if TM_CURRENT_WORD is None: return selection else: return selection.replace(TM_CURRENT_WORD, '')
def main(): # TODO: Determine if this is necessary. Can we still provide basic completion in a 'standalone' file? if textmate.PROJECT_DIRECTORY is None: textmate.exit_show_tool_tip('No completions.') source = sys.stdin.read() #from rope.contrib import autoimport project = Project(textmate.PROJECT_DIRECTORY) #autoimport = autoimport.AutoImport(project) resource = project.get_resource(textmate.FILEPATH.replace(textmate.PROJECT_DIRECTORY, '')[1:]) #project.validate(self.project_path) caret_index = source.find(textmate.CURRENT_LINE) + textmate.LINE_INDEX current_word = textmate.current_word(r"[a-zA-Z_]*", 'both') proposals = codeassist.code_assist(project, source, caret_index, resource) try: if len(proposals) == 0: raise 'no proposals found' except: textmate.exit_show_tool_tip("No completions.") if len(proposals) == 1: textmate.exit_insert_text(proposals[0].name.replace(current_word, '', 1)) else: proposals = codeassist.sorted_proposals(proposals) #autoimport.generate_cache() #autoimport.generate_modules_cache(modules) #project.pycore.analyze_module(resource) names = [proposal.name for proposal in proposals] #if self.starting.strip() and '.' not in self.expression: # import_assists = self.autoimport.import_assist(self.starting) # names.extend(x[0] + ' : ' + x[1] for x in import_assists) #plist = "{ menuItems=(%s);}" ui.complete(names, {'initial_filter': current_word, 'extra_chars': "_"})
class PyCoreTest(unittest.TestCase): def setUp(self): super(PyCoreTest, self).setUp() self.project = testutils.sample_project() self.pycore = self.project.pycore def tearDown(self): testutils.remove_project(self.project) super(PyCoreTest, self).tearDown() def test_simple_module(self): testutils.create_module(self.project, 'mod') result = self.pycore.get_module('mod') self.assertEquals(get_base_type('Module'), result.type) self.assertEquals(0, len(result.get_attributes())) def test_nested_modules(self): pkg = testutils.create_package(self.project, 'pkg') mod = testutils.create_module(self.project, 'mod', pkg) package = self.pycore.get_module('pkg') self.assertEquals(get_base_type('Module'), package.get_type()) self.assertEquals(1, len(package.get_attributes())) module = package['mod'].get_object() self.assertEquals(get_base_type('Module'), module.get_type()) def test_package(self): pkg = testutils.create_package(self.project, 'pkg') mod = testutils.create_module(self.project, 'mod', pkg) result = self.pycore.get_module('pkg') self.assertEquals(get_base_type('Module'), result.type) def test_simple_class(self): mod = testutils.create_module(self.project, 'mod') mod.write('class SampleClass(object):\n pass\n') mod_element = self.pycore.get_module('mod') result = mod_element['SampleClass'].get_object() self.assertEquals(get_base_type('Type'), result.get_type()) def test_simple_function(self): mod = testutils.create_module(self.project, 'mod') mod.write('def sample_function():\n pass\n') mod_element = self.pycore.get_module('mod') result = mod_element['sample_function'].get_object() self.assertEquals(get_base_type('Function'), result.get_type()) def test_class_methods(self): mod = testutils.create_module(self.project, 'mod') code = 'class SampleClass(object):\n' \ ' def sample_method(self):\n' \ ' pass\n' mod.write(code) mod_element = self.pycore.get_module('mod') sample_class = mod_element['SampleClass'].get_object() self.assertTrue('sample_method' in sample_class) method = sample_class['sample_method'].get_object() self.assertEquals(get_base_type('Function'), method.get_type()) 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'] 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'] def test_class_attributes_set_in_init(self): mod = testutils.create_module(self.project, 'mod') mod.write('class C(object):\n' ' 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'] def test_class_attributes_set_in_init_overwriting_a_defined(self): mod = testutils.create_module(self.project, 'mod') code = 'class C(object):\n' \ ' def __init__(self):\n' \ ' self.f = 20\n' \ ' def f():\n' \ ' pass\n' mod.write(code) mod_element = self.pycore.get_module('mod') sample_class = mod_element['C'].get_object() f = sample_class['f'].get_object() self.assertTrue(isinstance(f, AbstractFunction)) def test_classes_inside_other_classes(self): mod = testutils.create_module(self.project, 'mod') code = 'class SampleClass(object):\n' \ ' class InnerClass(object):\n' \ ' pass\n\n' mod.write(code) mod_element = self.pycore.get_module('mod') sample_class = mod_element['SampleClass'].get_object() var = sample_class['InnerClass'].get_object() self.assertEquals(get_base_type('Type'), var.get_type()) @testutils.assert_raises(exceptions.ModuleNotFoundError) def test_non_existent_module(self): self.pycore.get_module('doesnotexistmodule') def test_imported_names(self): testutils.create_module(self.project, 'mod1') mod = testutils.create_module(self.project, 'mod2') mod.write('import mod1\n') module = self.pycore.get_module('mod2') imported_sys = module['mod1'].get_object() self.assertEquals(get_base_type('Module'), imported_sys.get_type()) def test_imported_as_names(self): testutils.create_module(self.project, 'mod1') mod = testutils.create_module(self.project, 'mod2') mod.write('import mod1 as my_import\n') module = self.pycore.get_module('mod2') imported_mod = module['my_import'].get_object() 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') 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 ') def test_parameter_info_for_functions(self): code = 'def func(param1, param2=10, *param3, **param4):\n pass' mod = self.pycore.get_string_module(code) sample_function = mod['func'] self.assertEquals(['param1', 'param2', 'param3', 'param4'], sample_function.get_object().get_param_names()) # FIXME: Not found modules def xxx_test_not_found_module_is_module(self): mod = self.pycore.get_string_module('import doesnotexist\n') self.assertEquals(get_base_type('Module'), mod['doesnotexist']. get_object().get_type()) def test_mixing_scopes_and_objects_hierarchy(self): mod = self.pycore.get_string_module('var = 200\n') scope = mod.get_scope() self.assertTrue('var' in scope.get_names()) def test_inheriting_base_class_attributes(self): code = 'class Base(object):\n' \ ' def method(self):\n' \ ' pass\n' \ 'class Derived(Base):\n' \ ' pass\n' mod = self.pycore.get_string_module(code) derived = mod['Derived'].get_object() self.assertTrue('method' in derived) self.assertEquals(get_base_type('Function'), derived['method'].get_object().get_type()) def test_inheriting_multiple_base_class_attributes(self): code = 'class Base1(object):\n def method1(self):\n pass\n' \ 'class Base2(object):\n def method2(self):\n pass\n' \ 'class Derived(Base1, Base2):\n pass\n' mod = self.pycore.get_string_module(code) derived = mod['Derived'].get_object() self.assertTrue('method1' in derived) self.assertTrue('method2' in derived) def test_inheriting_multiple_base_class_attributes_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' mod = self.pycore.get_string_module(code) base1 = mod['Base1'].get_object() derived = mod['Derived'].get_object() self.assertEquals(base1['method'].get_object(), derived['method'].get_object()) def test_inheriting_unknown_base_class(self): code = 'class Derived(NotFound):\n' \ ' def f(self):\n' \ ' pass\n' mod = self.pycore.get_string_module(code) derived = mod['Derived'].get_object() self.assertTrue('f' in derived) def test_module_creation(self): new_module = testutils.create_module(self.project, 'module') self.assertFalse(new_module.is_folder()) self.assertEquals(self.project.get_resource('module.py'), new_module) def test_packaged_module_creation(self): package = self.project.root.create_folder('package') new_module = testutils.create_module(self.project, 'package.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') new_module = testutils.create_module(self.project, 'pkg.mod', src) 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')); def test_nested_package_creation(self): package = 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) 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) def test_find_module(self): src = self.project.root.create_folder('src') samplemod = testutils.create_module(self.project, 'samplemod', src) found_module = self.pycore.find_module('samplemod') self.assertEquals(samplemod, found_module) 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) found_module = self.pycore.find_module('samplepkg.samplemod') self.assertEquals(samplemod, found_module) def test_find_multiple_module(self): src = self.project.root.create_folder('src') samplemod1 = testutils.create_module(self.project, 'samplemod', src) samplemod2 = testutils.create_module(self.project, 'samplemod') test = self.project.root.create_folder('test') samplemod3 = testutils.create_module(self.project, 'samplemod', test) found_module = self.pycore.find_module('samplemod') self.assertTrue(samplemod1 == found_module or samplemod2 == found_module or samplemod3 == found_module) def test_find_module_packages(self): src = self.project.root samplepkg = testutils.create_package(self.project, 'samplepkg', src) found_module = self.pycore.find_module('samplepkg') self.assertEquals(samplepkg, found_module) 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) 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') lost = testutils.create_module(self.project, 'pkg1.src2.lost') self.assertEqual(self.project.pycore.find_module('lost'), None) self.project.close() from rope.base.project import Project self.project = Project(self.project.address, source_folders=['pkg1/src2']) self.assertEqual(self.project.pycore.find_module('lost'), lost) def test_getting_empty_source_folders(self): self.assertEquals([], self.pycore.get_source_folders()) def test_root_source_folder(self): self.project.root.create_file('sample.py') source_folders = self.pycore.get_source_folders() self.assertEquals(1, len(source_folders)) self.assertTrue(self.project.root in source_folders) def test_root_source_folder2(self): self.project.root.create_file('mod1.py') self.project.root.create_file('mod2.py') source_folders = self.pycore.get_source_folders() self.assertEquals(1, len(source_folders)) self.assertTrue(self.project.root in source_folders) def test_src_source_folder(self): src = self.project.root.create_folder('src') src.create_file('sample.py') source_folders = self.pycore.get_source_folders() self.assertEquals(1, len(source_folders)) self.assertTrue(self.project.get_resource('src') in source_folders) def test_packages(self): src = self.project.root.create_folder('src') pkg = src.create_folder('package') pkg.create_file('__init__.py') source_folders = self.pycore.get_source_folders() self.assertEquals(1, len(source_folders)) self.assertTrue(src in source_folders) def test_multi_source_folders(self): src = self.project.root.create_folder('src') package = src.create_folder('package') package.create_file('__init__.py') test = self.project.root.create_folder('test') test.create_file('alltests.py') source_folders = self.pycore.get_source_folders() self.assertEquals(2, len(source_folders)) self.assertTrue(src in source_folders) self.assertTrue(test in source_folders) def test_multi_source_folders2(self): 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) source_folders = self.pycore.get_source_folders() self.assertEquals(2, len(source_folders)) self.assertTrue(self.project.root in source_folders and \ src in source_folders) def test_get_pyname_definition_location(self): mod = self.pycore.get_string_module('a_var = 20\n') a_var = mod['a_var'] self.assertEquals((mod, 1), a_var.get_definition_location()) def test_get_pyname_definition_location_functions(self): mod = self.pycore.get_string_module('def a_func():\n pass\n') a_func = mod['a_func'] self.assertEquals((mod, 1), a_func.get_definition_location()) def test_get_pyname_definition_location_class(self): code = 'class AClass(object):\n pass\n\n' mod = self.pycore.get_string_module(code) a_class = mod['AClass'] self.assertEquals((mod, 1), a_class.get_definition_location()) def test_get_pyname_definition_location_local_variables(self): mod = self.pycore.get_string_module('def a_func():\n a_var = 10\n') a_func_scope = mod.get_scope().get_scopes()[0] a_var = a_func_scope['a_var'] self.assertEquals((mod, 2), a_var.get_definition_location()) def test_get_pyname_definition_location_reassigning(self): mod = self.pycore.get_string_module('a_var = 20\na_var=30\n') a_var = mod['a_var'] self.assertEquals((mod, 1), a_var.get_definition_location()) def test_get_pyname_definition_location_importes(self): module = 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'] self.assertEquals((imported_module, 1), module_pyname.get_definition_location()) def test_get_pyname_definition_location_imports(self): module_resource = testutils.create_module(self.project, 'mod') module_resource.write('\ndef a_func():\n pass\n') 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()) def test_get_pyname_definition_location_parameters(self): code = 'def a_func(param1, param2):\n a_var = param\n' mod = self.pycore.get_string_module(code) a_func_scope = mod.get_scope().get_scopes()[0] param1 = a_func_scope['param1'] self.assertEquals((mod, 1), param1.get_definition_location()) param2 = a_func_scope['param2'] self.assertEquals((mod, 1), param2.get_definition_location()) 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') self.assertEquals(None, string_module.get_resource()) def test_get_pyname_definition_location_class2(self): code = 'class AClass(object):\n' \ ' def __init__(self):\n' \ ' self.an_attr = 10\n' mod = self.pycore.get_string_module(code) a_class = mod['AClass'].get_object() an_attr = a_class['an_attr'] self.assertEquals((mod, 3), an_attr.get_definition_location()) 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()) def test_from_not_found_module_get_definition_location(self): mod = self.pycore.get_string_module('from doesnotexist import Sample\n') sample = mod['Sample'] self.assertEquals((None, None), sample.get_definition_location()) def test_from_package_import_module_get_definition_location(self): pkg = testutils.create_package(self.project, 'pkg') testutils.create_module(self.project, 'mod', pkg) pkg_mod = self.pycore.get_module('pkg.mod') mod = self.pycore.get_string_module('from pkg import mod\n') imported_mod = mod['mod'] self.assertEquals((pkg_mod, 1), 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') 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') 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()) def test_get_definition_location_for_filtered_packages(self): pkg = testutils.create_package(self.project, 'pkg') testutils.create_module(self.project, 'mod', pkg) 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()) def test_out_of_project_modules(self): 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' mod = testutils.create_module(self.project, 'mod') mod.write(contents) self.pycore.get_module('mod') def test_global_keyword(self): contents = 'a_var = 1\ndef a_func():\n global a_var\n' mod = self.pycore.get_string_module(contents) global_var = mod['a_var'] func_scope = mod['a_func'].get_object().get_scope() local_var = func_scope['a_var'] self.assertEquals(global_var, local_var) def test_not_leaking_for_vars_inside_parent_scope(self): mod = testutils.create_module(self.project, 'mod') code = 'class C(object):\n' \ ' def f(self):\n' \ ' for my_var1, my_var2 in []:\n' \ ' pass\n' mod.write(code) pymod = self.pycore.resource_to_pyobject(mod) c_class = pymod['C'].get_object() self.assertFalse('my_var1' in c_class) self.assertFalse('my_var2' in c_class) def test_not_leaking_for_vars_inside_parent_scope2(self): mod = testutils.create_module(self.project, 'mod') code = 'class C(object):\n' \ ' def f(self):\n' \ ' for my_var in []:\n' \ ' pass\n' mod.write(code) pymod = self.pycore.resource_to_pyobject(mod) c_class = pymod['C'].get_object() self.assertFalse('my_var' in c_class) def test_variables_defined_in_excepts(self): mod = testutils.create_module(self.project, 'mod') code = 'try:\n' \ ' myvar1 = 1\n' \ 'except:\n' \ ' myvar2 = 1\n' \ 'finally:\n' \ ' myvar3 = 1\n' mod.write(code) pymod = self.pycore.resource_to_pyobject(mod) self.assertTrue('myvar1' in pymod) self.assertTrue('myvar2' in pymod) self.assertTrue('myvar3' in pymod) def test_not_leaking_tuple_assigned_names_inside_parent_scope(self): mod = testutils.create_module(self.project, 'mod') code = 'class C(object):\n' \ ' def f(self):\n' \ ' var1, var2 = range(2)\n' mod.write(code) pymod = self.pycore.resource_to_pyobject(mod) c_class = pymod['C'].get_object() self.assertFalse('var1' in c_class) @testutils.run_only_for_25 def test_with_statement_variables(self): code = 'import threading\nwith threading.lock() as var: pass\n' if sys.version_info < (2, 6, 0): code = 'from __future__ import with_statement\n' + code pymod = self.pycore.get_string_module(code) self.assertTrue('var' in pymod) @testutils.run_only_for_25 def test_with_statement_variables_and_tuple_assignment(self): code = 'class A(object):\n' \ ' def __enter__(self):' \ ' return (1, 2)\n' \ ' def __exit__(self, type, value, tb):\n' \ ' pass\n'\ 'with A() as (a, b):\n' \ ' pass\n' if sys.version_info < (2, 6, 0): code = 'from __future__ import with_statement\n' + code pymod = self.pycore.get_string_module(code) self.assertTrue('a' in pymod) self.assertTrue('b' in pymod) @testutils.run_only_for_25 def test_with_statement_variable_type(self): code = 'class A(object):\n' \ ' def __enter__(self):\n' \ ' return self\n'\ ' def __exit__(self, type, value, tb):\n' \ ' pass\n' \ 'with A() as var:\n' \ ' pass\n' if sys.version_info < (2, 6, 0): code = 'from __future__ import with_statement\n' + code pymod = self.pycore.get_string_module(code) a_class = pymod['A'].get_object() var = pymod['var'].get_object() self.assertEquals(a_class, var.get_type()) @testutils.run_only_for_25 def test_with_statement_with_no_vars(self): code = 'with open("file"): pass\n' if sys.version_info < (2, 6, 0): code = 'from __future__ import with_statement\n' + code pymod = self.pycore.get_string_module(code) pymod.get_attributes() def test_check_for_else_block(self): code = 'for i in range(10):\n' \ ' pass\n' \ 'else:\n' \ ' myvar = 1\n' mod = self.pycore.get_string_module(code) a_var = mod['myvar'] self.assertEquals((mod, 4), a_var.get_definition_location()) def test_check_names_defined_in_whiles(self): mod = self.pycore.get_string_module('while False:\n myvar = 1\n') a_var = mod['myvar'] self.assertEquals((mod, 2), a_var.get_definition_location()) def test_get_definition_location_in_tuple_assnames(self): mod = self.pycore.get_string_module( 'def f(x):\n x.z, a = range(2)\n') x = mod['f'].get_object().get_scope()['x'] a = mod['f'].get_object().get_scope()['a'] self.assertEquals((mod, 1), x.get_definition_location()) self.assertEquals((mod, 2), a.get_definition_location()) @testutils.assert_raises(exceptions.ModuleSyntaxError) def test_syntax_errors_in_code(self): mod = 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') except exceptions.ModuleSyntaxError, e: self.assertEquals(1, e.lineno)
from rope.base.project import Project from rope.base import libutils from rope.refactor.move import create_move myProj = Project('src') # resource = myProj.get_resource(r'app/services/gridMaker/grid.py') # resource = libutils.path_to_resource(myProj, r'src/app/services/gridMaker') resource = myProj.get_resource(r'app/services/theGrid/windowSetter.py') offset = None destination = libutils.path_to_resource( myProj, r'src/app/services/theGrid/windowSetter') mover = create_move(myProj, resource, offset) myProj.do(mover.get_changes(destination))
res_arg = arg elif opt == '-f': offset_arg = arg option = option_arg; projectpath = project_arg if projectpath.startswith("file://"): projectpath = projectpath.replace("file://", "") proj = Project(projectpath) proj.pycore._init_python_files() input = open(source_code_arg, 'r') source_code = input.read() respath = relpath(projectpath, res_arg) res = proj.get_resource(respath) position = int(offset_arg) try: if option == "autocomplete": proposals = codeassist.code_assist(proj, source_code, position, resource=res, maxfixes=10) proposals = codeassist.sorted_proposals(proposals) for proposal in proposals: print proposal elif option == "calltip": proposals = codeassist.get_doc(proj, source_code, position, resource=res, maxfixes=10) print proposals except:
class PyCoreTest(unittest.TestCase): def setUp(self): super(PyCoreTest, self).setUp() self.project = testutils.sample_project() self.pycore = self.project.pycore def tearDown(self): testutils.remove_project(self.project) super(PyCoreTest, self).tearDown() def test_simple_module(self): testutils.create_module(self.project, 'mod') result = self.pycore.get_module('mod') self.assertEquals(get_base_type('Module'), result.type) self.assertEquals(0, len(result.get_attributes())) def test_nested_modules(self): pkg = testutils.create_package(self.project, 'pkg') mod = testutils.create_module(self.project, 'mod', pkg) package = self.pycore.get_module('pkg') self.assertEquals(get_base_type('Module'), package.get_type()) self.assertEquals(1, len(package.get_attributes())) module = package['mod'].get_object() self.assertEquals(get_base_type('Module'), module.get_type()) def test_package(self): pkg = testutils.create_package(self.project, 'pkg') mod = testutils.create_module(self.project, 'mod', pkg) result = self.pycore.get_module('pkg') self.assertEquals(get_base_type('Module'), result.type) def test_simple_class(self): mod = testutils.create_module(self.project, 'mod') mod.write('class SampleClass(object):\n pass\n') mod_element = self.pycore.get_module('mod') result = mod_element['SampleClass'].get_object() self.assertEquals(get_base_type('Type'), result.get_type()) def test_simple_function(self): mod = testutils.create_module(self.project, 'mod') mod.write('def sample_function():\n pass\n') mod_element = self.pycore.get_module('mod') result = mod_element['sample_function'].get_object() self.assertEquals(get_base_type('Function'), result.get_type()) def test_class_methods(self): mod = testutils.create_module(self.project, 'mod') code = 'class SampleClass(object):\n' \ ' def sample_method(self):\n' \ ' pass\n' mod.write(code) mod_element = self.pycore.get_module('mod') sample_class = mod_element['SampleClass'].get_object() self.assertTrue('sample_method' in sample_class) method = sample_class['sample_method'].get_object() self.assertEquals(get_base_type('Function'), method.get_type()) 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'] 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'] def test_class_attributes_set_in_init(self): mod = testutils.create_module(self.project, 'mod') mod.write('class C(object):\n' ' 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'] def test_class_attributes_set_in_init_overwriting_a_defined(self): mod = testutils.create_module(self.project, 'mod') code = 'class C(object):\n' \ ' def __init__(self):\n' \ ' self.f = 20\n' \ ' def f():\n' \ ' pass\n' mod.write(code) mod_element = self.pycore.get_module('mod') sample_class = mod_element['C'].get_object() f = sample_class['f'].get_object() self.assertTrue(isinstance(f, AbstractFunction)) def test_classes_inside_other_classes(self): mod = testutils.create_module(self.project, 'mod') code = 'class SampleClass(object):\n' \ ' class InnerClass(object):\n' \ ' pass\n\n' mod.write(code) mod_element = self.pycore.get_module('mod') sample_class = mod_element['SampleClass'].get_object() var = sample_class['InnerClass'].get_object() self.assertEquals(get_base_type('Type'), var.get_type()) @testutils.assert_raises(exceptions.ModuleNotFoundError) def test_non_existent_module(self): self.pycore.get_module('doesnotexistmodule') def test_imported_names(self): testutils.create_module(self.project, 'mod1') mod = testutils.create_module(self.project, 'mod2') mod.write('import mod1\n') module = self.pycore.get_module('mod2') imported_sys = module['mod1'].get_object() self.assertEquals(get_base_type('Module'), imported_sys.get_type()) def test_imported_as_names(self): testutils.create_module(self.project, 'mod1') mod = testutils.create_module(self.project, 'mod2') mod.write('import mod1 as my_import\n') module = self.pycore.get_module('mod2') imported_mod = module['my_import'].get_object() 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') 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 ') def test_parameter_info_for_functions(self): code = 'def func(param1, param2=10, *param3, **param4):\n pass' mod = self.pycore.get_string_module(code) sample_function = mod['func'] self.assertEquals(['param1', 'param2', 'param3', 'param4'], sample_function.get_object().get_param_names()) # FIXME: Not found modules def xxx_test_not_found_module_is_module(self): mod = self.pycore.get_string_module('import doesnotexist\n') self.assertEquals(get_base_type('Module'), mod['doesnotexist'].get_object().get_type()) def test_mixing_scopes_and_objects_hierarchy(self): mod = self.pycore.get_string_module('var = 200\n') scope = mod.get_scope() self.assertTrue('var' in scope.get_names()) def test_inheriting_base_class_attributes(self): code = 'class Base(object):\n' \ ' def method(self):\n' \ ' pass\n' \ 'class Derived(Base):\n' \ ' pass\n' mod = self.pycore.get_string_module(code) derived = mod['Derived'].get_object() self.assertTrue('method' in derived) self.assertEquals(get_base_type('Function'), derived['method'].get_object().get_type()) def test_inheriting_multiple_base_class_attributes(self): code = 'class Base1(object):\n def method1(self):\n pass\n' \ 'class Base2(object):\n def method2(self):\n pass\n' \ 'class Derived(Base1, Base2):\n pass\n' mod = self.pycore.get_string_module(code) derived = mod['Derived'].get_object() self.assertTrue('method1' in derived) self.assertTrue('method2' in derived) def test_inheriting_multiple_base_class_attributes_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' mod = self.pycore.get_string_module(code) base1 = mod['Base1'].get_object() derived = mod['Derived'].get_object() self.assertEquals(base1['method'].get_object(), derived['method'].get_object()) def test_inheriting_unknown_base_class(self): code = 'class Derived(NotFound):\n' \ ' def f(self):\n' \ ' pass\n' mod = self.pycore.get_string_module(code) derived = mod['Derived'].get_object() self.assertTrue('f' in derived) def test_module_creation(self): new_module = testutils.create_module(self.project, 'module') self.assertFalse(new_module.is_folder()) self.assertEquals(self.project.get_resource('module.py'), new_module) def test_packaged_module_creation(self): package = self.project.root.create_folder('package') new_module = testutils.create_module(self.project, 'package.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') new_module = testutils.create_module(self.project, 'pkg.mod', src) 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')) def test_nested_package_creation(self): package = 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) 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) def test_find_module(self): src = self.project.root.create_folder('src') samplemod = testutils.create_module(self.project, 'samplemod', src) found_module = self.pycore.find_module('samplemod') self.assertEquals(samplemod, found_module) 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) found_module = self.pycore.find_module('samplepkg.samplemod') self.assertEquals(samplemod, found_module) def test_find_multiple_module(self): src = self.project.root.create_folder('src') samplemod1 = testutils.create_module(self.project, 'samplemod', src) samplemod2 = testutils.create_module(self.project, 'samplemod') test = self.project.root.create_folder('test') samplemod3 = testutils.create_module(self.project, 'samplemod', test) found_module = self.pycore.find_module('samplemod') self.assertTrue(samplemod1 == found_module or samplemod2 == found_module or samplemod3 == found_module) def test_find_module_packages(self): src = self.project.root samplepkg = testutils.create_package(self.project, 'samplepkg', src) found_module = self.pycore.find_module('samplepkg') self.assertEquals(samplepkg, found_module) 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) 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') lost = testutils.create_module(self.project, 'pkg1.src2.lost') self.assertEqual(self.project.pycore.find_module('lost'), None) self.project.close() from rope.base.project import Project self.project = Project(self.project.address, source_folders=['pkg1/src2']) self.assertEqual(self.project.pycore.find_module('lost'), lost) def test_getting_empty_source_folders(self): self.assertEquals([], self.pycore.get_source_folders()) def test_root_source_folder(self): self.project.root.create_file('sample.py') source_folders = self.pycore.get_source_folders() self.assertEquals(1, len(source_folders)) self.assertTrue(self.project.root in source_folders) def test_root_source_folder2(self): self.project.root.create_file('mod1.py') self.project.root.create_file('mod2.py') source_folders = self.pycore.get_source_folders() self.assertEquals(1, len(source_folders)) self.assertTrue(self.project.root in source_folders) def test_src_source_folder(self): src = self.project.root.create_folder('src') src.create_file('sample.py') source_folders = self.pycore.get_source_folders() self.assertEquals(1, len(source_folders)) self.assertTrue(self.project.get_resource('src') in source_folders) def test_packages(self): src = self.project.root.create_folder('src') pkg = src.create_folder('package') pkg.create_file('__init__.py') source_folders = self.pycore.get_source_folders() self.assertEquals(1, len(source_folders)) self.assertTrue(src in source_folders) def test_multi_source_folders(self): src = self.project.root.create_folder('src') package = src.create_folder('package') package.create_file('__init__.py') test = self.project.root.create_folder('test') test.create_file('alltests.py') source_folders = self.pycore.get_source_folders() self.assertEquals(2, len(source_folders)) self.assertTrue(src in source_folders) self.assertTrue(test in source_folders) def test_multi_source_folders2(self): 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) source_folders = self.pycore.get_source_folders() self.assertEquals(2, len(source_folders)) self.assertTrue(self.project.root in source_folders and \ src in source_folders) def test_get_pyname_definition_location(self): mod = self.pycore.get_string_module('a_var = 20\n') a_var = mod['a_var'] self.assertEquals((mod, 1), a_var.get_definition_location()) def test_get_pyname_definition_location_functions(self): mod = self.pycore.get_string_module('def a_func():\n pass\n') a_func = mod['a_func'] self.assertEquals((mod, 1), a_func.get_definition_location()) def test_get_pyname_definition_location_class(self): code = 'class AClass(object):\n pass\n\n' mod = self.pycore.get_string_module(code) a_class = mod['AClass'] self.assertEquals((mod, 1), a_class.get_definition_location()) def test_get_pyname_definition_location_local_variables(self): mod = self.pycore.get_string_module('def a_func():\n a_var = 10\n') a_func_scope = mod.get_scope().get_scopes()[0] a_var = a_func_scope['a_var'] self.assertEquals((mod, 2), a_var.get_definition_location()) def test_get_pyname_definition_location_reassigning(self): mod = self.pycore.get_string_module('a_var = 20\na_var=30\n') a_var = mod['a_var'] self.assertEquals((mod, 1), a_var.get_definition_location()) def test_get_pyname_definition_location_importes(self): module = 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'] self.assertEquals((imported_module, 1), module_pyname.get_definition_location()) def test_get_pyname_definition_location_imports(self): module_resource = testutils.create_module(self.project, 'mod') module_resource.write('\ndef a_func():\n pass\n') 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()) def test_get_pyname_definition_location_parameters(self): code = 'def a_func(param1, param2):\n a_var = param\n' mod = self.pycore.get_string_module(code) a_func_scope = mod.get_scope().get_scopes()[0] param1 = a_func_scope['param1'] self.assertEquals((mod, 1), param1.get_definition_location()) param2 = a_func_scope['param2'] self.assertEquals((mod, 1), param2.get_definition_location()) 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') self.assertEquals(None, string_module.get_resource()) def test_get_pyname_definition_location_class2(self): code = 'class AClass(object):\n' \ ' def __init__(self):\n' \ ' self.an_attr = 10\n' mod = self.pycore.get_string_module(code) a_class = mod['AClass'].get_object() an_attr = a_class['an_attr'] self.assertEquals((mod, 3), an_attr.get_definition_location()) 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()) def test_from_not_found_module_get_definition_location(self): mod = self.pycore.get_string_module( 'from doesnotexist import Sample\n') sample = mod['Sample'] self.assertEquals((None, None), sample.get_definition_location()) def test_from_package_import_module_get_definition_location(self): pkg = testutils.create_package(self.project, 'pkg') testutils.create_module(self.project, 'mod', pkg) pkg_mod = self.pycore.get_module('pkg.mod') mod = self.pycore.get_string_module('from pkg import mod\n') imported_mod = mod['mod'] self.assertEquals((pkg_mod, 1), 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') 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') 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()) def test_get_definition_location_for_filtered_packages(self): pkg = testutils.create_package(self.project, 'pkg') testutils.create_module(self.project, 'mod', pkg) 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()) def test_out_of_project_modules(self): 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' mod = testutils.create_module(self.project, 'mod') mod.write(contents) self.pycore.get_module('mod') def test_global_keyword(self): contents = 'a_var = 1\ndef a_func():\n global a_var\n' mod = self.pycore.get_string_module(contents) global_var = mod['a_var'] func_scope = mod['a_func'].get_object().get_scope() local_var = func_scope['a_var'] self.assertEquals(global_var, local_var) def test_not_leaking_for_vars_inside_parent_scope(self): mod = testutils.create_module(self.project, 'mod') code = 'class C(object):\n' \ ' def f(self):\n' \ ' for my_var1, my_var2 in []:\n' \ ' pass\n' mod.write(code) pymod = self.pycore.resource_to_pyobject(mod) c_class = pymod['C'].get_object() self.assertFalse('my_var1' in c_class) self.assertFalse('my_var2' in c_class) def test_not_leaking_for_vars_inside_parent_scope2(self): mod = testutils.create_module(self.project, 'mod') code = 'class C(object):\n' \ ' def f(self):\n' \ ' for my_var in []:\n' \ ' pass\n' mod.write(code) pymod = self.pycore.resource_to_pyobject(mod) c_class = pymod['C'].get_object() self.assertFalse('my_var' in c_class) def test_variables_defined_in_excepts(self): mod = testutils.create_module(self.project, 'mod') code = 'try:\n' \ ' myvar1 = 1\n' \ 'except:\n' \ ' myvar2 = 1\n' \ 'finally:\n' \ ' myvar3 = 1\n' mod.write(code) pymod = self.pycore.resource_to_pyobject(mod) self.assertTrue('myvar1' in pymod) self.assertTrue('myvar2' in pymod) self.assertTrue('myvar3' in pymod) def test_not_leaking_tuple_assigned_names_inside_parent_scope(self): mod = testutils.create_module(self.project, 'mod') code = 'class C(object):\n' \ ' def f(self):\n' \ ' var1, var2 = range(2)\n' mod.write(code) pymod = self.pycore.resource_to_pyobject(mod) c_class = pymod['C'].get_object() self.assertFalse('var1' in c_class) @testutils.run_only_for_25 def test_with_statement_variables(self): code = 'import threading\nwith threading.lock() as var: pass\n' if sys.version_info < (2, 6, 0): code = 'from __future__ import with_statement\n' + code pymod = self.pycore.get_string_module(code) self.assertTrue('var' in pymod) @testutils.run_only_for_25 def test_with_statement_variables_and_tuple_assignment(self): code = 'class A(object):\n' \ ' def __enter__(self):' \ ' return (1, 2)\n' \ ' def __exit__(self, type, value, tb):\n' \ ' pass\n'\ 'with A() as (a, b):\n' \ ' pass\n' if sys.version_info < (2, 6, 0): code = 'from __future__ import with_statement\n' + code pymod = self.pycore.get_string_module(code) self.assertTrue('a' in pymod) self.assertTrue('b' in pymod) @testutils.run_only_for_25 def test_with_statement_variable_type(self): code = 'class A(object):\n' \ ' def __enter__(self):\n' \ ' return self\n'\ ' def __exit__(self, type, value, tb):\n' \ ' pass\n' \ 'with A() as var:\n' \ ' pass\n' if sys.version_info < (2, 6, 0): code = 'from __future__ import with_statement\n' + code pymod = self.pycore.get_string_module(code) a_class = pymod['A'].get_object() var = pymod['var'].get_object() self.assertEquals(a_class, var.get_type()) @testutils.run_only_for_25 def test_with_statement_with_no_vars(self): code = 'with open("file"): pass\n' if sys.version_info < (2, 6, 0): code = 'from __future__ import with_statement\n' + code pymod = self.pycore.get_string_module(code) pymod.get_attributes() def test_check_for_else_block(self): code = 'for i in range(10):\n' \ ' pass\n' \ 'else:\n' \ ' myvar = 1\n' mod = self.pycore.get_string_module(code) a_var = mod['myvar'] self.assertEquals((mod, 4), a_var.get_definition_location()) def test_check_names_defined_in_whiles(self): mod = self.pycore.get_string_module('while False:\n myvar = 1\n') a_var = mod['myvar'] self.assertEquals((mod, 2), a_var.get_definition_location()) def test_get_definition_location_in_tuple_assnames(self): mod = self.pycore.get_string_module( 'def f(x):\n x.z, a = range(2)\n') x = mod['f'].get_object().get_scope()['x'] a = mod['f'].get_object().get_scope()['a'] self.assertEquals((mod, 1), x.get_definition_location()) self.assertEquals((mod, 2), a.get_definition_location()) @testutils.assert_raises(exceptions.ModuleSyntaxError) def test_syntax_errors_in_code(self): mod = 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') except exceptions.ModuleSyntaxError, e: self.assertEquals(1, e.lineno)