def _keyword_parameters(self, pymodule, scope): offset = self.offset 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: 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: pyobject = pyobject["__init__"].get_object() elif "__call__" in pyobject: pyobject = pyobject["__call__"].get_object() if isinstance(pyobject, pyobjects.AbstractFunction): param_names = [] param_names.extend(pyobject.get_param_names(special_args=False)) result = {} for name in param_names: if name.startswith(self.starting): result[name + "="] = NamedParamProposal(name, pyobject) return result
def _keyword_parameters(self, pymodule, scope): offset = self.offset 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: 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: pyobject = pyobject['__init__'].get_object() elif '__call__' in pyobject: pyobject = pyobject['__call__'].get_object() if isinstance(pyobject, pyobjects.AbstractFunction): param_names = [] param_names.extend( pyobject.get_param_names(special_args=False)) result = {} for name in param_names: if name.startswith(self.starting): result[name + '='] = NamedParamProposal( name, pyobject ) return result
def _logical_finder(self, code): lines = SourceLinesAdapter(code) return codeanalyze.CachingLogicalLineFinder( lines, codeanalyze.custom_generator)
def test_generating_line_starts3(self): code = 'a = 1\na = 2\n\na = \\ 3\n' line_finder = LogicalLineFinder(SourceLinesAdapter(code)) self.assertEquals([2], list(line_finder.generate_starts(2, 3)))
def test_fors_and_block_start(self): code = 'l = range(10)\nfor i in l:\n print i\n' self.assertEquals(2, get_block_start(SourceLinesAdapter(code), 2))
def _logical_finder(self, code): return LogicalLineFinder(SourceLinesAdapter(code))
def test_source_lines_last_line_with_no_new_line(self): to_lines = SourceLinesAdapter('line1') self.assertEquals(1, to_lines.get_line_number(5))
def test_source_lines_get_line_end(self): to_lines = SourceLinesAdapter('line1\nline2\n') self.assertEquals(5, to_lines.get_line_end(1)) self.assertEquals(11, to_lines.get_line_end(2)) self.assertEquals(12, to_lines.get_line_end(3))
def test_source_lines_get_line_start(self): to_lines = SourceLinesAdapter('line1\nline2\n') self.assertEquals(0, to_lines.get_line_start(1)) self.assertEquals(6, to_lines.get_line_start(2)) self.assertEquals(12, to_lines.get_line_start(3))
def test_source_lines_get_line_number(self): to_lines = SourceLinesAdapter('line1\nline2\n') self.assertEquals(1, to_lines.get_line_number(0)) self.assertEquals(1, to_lines.get_line_number(5)) self.assertEquals(2, to_lines.get_line_number(7)) self.assertEquals(3, to_lines.get_line_number(12))
def test_source_lines_simple(self): to_lines = SourceLinesAdapter('line1\nline2\n') self.assertEquals('line1', to_lines.get_line(1)) self.assertEquals('line2', to_lines.get_line(2)) self.assertEquals('', to_lines.get_line(3)) self.assertEquals(3, to_lines.length())