def test_parsekeywordpairs_multiple_keywords(self): def spam(eggs=23, foobar='yay'): pass defaults = inspection.getargspec('spam', spam)[1][3] self.assertEqual(repr(defaults[0]), '23') self.assertEqual(repr(defaults[1]), "'yay'")
def test_parsekeywordpairs_multiple_keywords(self): def spam(eggs=23, foobar="yay"): pass defaults = inspection.getargspec("spam", spam)[1][3] self.assertEqual(repr(defaults[0]), "23") self.assertEqual(repr(defaults[1]), "'yay'")
def test_parsekeywordpairs(self): def fails(spam=["-a", "-b"]): pass default_arg_repr = "['-a', '-b']" self.assertEqual(str(["-a", "-b"]), default_arg_repr, "This test is broken (repr does not match), fix me.") argspec = inspection.getargspec("fails", fails) defaults = argspec[1][3] self.assertEqual(str(defaults[0]), default_arg_repr)
def test_argspec(self): def foo(x, y, z=10): "docstring!" pass argspec = inspection.getargspec('foo', foo) + [1] array = replpainter.formatted_argspec(argspec, 30, setup_config()) screen = [(bold(cyan(u'foo'))+cyan(':')+cyan(' ')+cyan('(')+cyan('x') + yellow(',')+yellow(' ')+bold(cyan('y'))+yellow(',') + yellow(' ')+cyan('z')+yellow('=')+bold(cyan('10'))+yellow(')'))] self.assertFSArraysEqual(fsarray(array), fsarray(screen))
def test_argspec(self): def foo(x, y, z=10): "docstring!" pass argspec = inspection.getargspec('foo', foo) + [1] array = replpainter.formatted_argspec(argspec, 30, setup_config()) screen = [bold(cyan(u'foo')) + cyan(':') + cyan(' ') + cyan('(') + cyan('x') + yellow(',') + yellow(' ') + bold(cyan('y')) + yellow(',') + yellow(' ') + cyan('z') + yellow('=') + bold(cyan('10')) + yellow(')')] self.assertFSArraysEqual(fsarray(array), fsarray(screen))
def test_parsekeywordpairs(self): # See issue #109 def fails(spam=['-a', '-b']): pass default_arg_repr = "['-a', '-b']" self.assertEqual(str(['-a', '-b']), default_arg_repr, 'This test is broken (repr does not match), fix me.') argspec = inspection.getargspec('fails', fails) defaults = argspec[1][3] self.assertEqual(str(defaults[0]), default_arg_repr)
def get_args(self): """Check if an unclosed parenthesis exists, then attempt to get the argspec() for it. On success, update self.argspec and return True, otherwise set self.argspec to None and return False""" self.current_func = None if not self.config.arg_spec: return False # Get the name of the current function and where we are in # the arguments stack = [['', 0, '']] try: for (token, value) in PythonLexer().get_tokens(self.current_line()): if token is Token.Punctuation: if value in '([{': stack.append(['', 0, value]) elif value in ')]}': stack.pop() elif value == ',': try: stack[-1][1] += 1 except TypeError: stack[-1][1] = '' stack[-1][0] = '' elif value == ':' and stack[-1][2] == 'lambda': stack.pop() else: stack[-1][0] = '' elif (token is Token.Name or token in Token.Name.subtypes or token is Token.Operator and value == '.'): stack[-1][0] += value elif token is Token.Operator and value == '=': stack[-1][1] = stack[-1][0] stack[-1][0] = '' elif token is Token.Keyword and value == 'lambda': stack.append(['', 0, value]) else: stack[-1][0] = '' while stack[-1][2] in '[{': stack.pop() _, arg_number, _ = stack.pop() func, _, _ = stack.pop() except IndexError: return False if not func: return False try: f = self.get_object(func) except (AttributeError, NameError, SyntaxError): return False if inspect.isclass(f): try: if f.__init__ is not object.__init__: f = f.__init__ except AttributeError: return None self.current_func = f self.argspec = inspection.getargspec(func, f) if self.argspec: self.argspec.append(arg_number) return True return False
def get_args(self): """Check if an unclosed parenthesis exists, then attempt to get the argspec() for it. On success, update self.argspec and return True, otherwise set self.argspec to None and return False""" self.current_func = None if not self.config.arg_spec: return False # Get the name of the current function and where we are in # the arguments stack = [['', 0, '']] try: for (token, value) in PythonLexer().get_tokens( self.current_line): if token is Token.Punctuation: if value in '([{': stack.append(['', 0, value]) elif value in ')]}': stack.pop() elif value == ',': try: stack[-1][1] += 1 except TypeError: stack[-1][1] = '' stack[-1][0] = '' elif value == ':' and stack[-1][2] == 'lambda': stack.pop() else: stack[-1][0] = '' elif (token is Token.Name or token in Token.Name.subtypes or token is Token.Operator and value == '.'): stack[-1][0] += value elif token is Token.Operator and value == '=': stack[-1][1] = stack[-1][0] stack[-1][0] = '' elif token is Token.Keyword and value == 'lambda': stack.append(['', 0, value]) else: stack[-1][0] = '' while stack[-1][2] in '[{': stack.pop() _, arg_number, _ = stack.pop() func, _, _ = stack.pop() except IndexError: return False if not func: return False try: f = self.get_object(func) except Exception: # another case of needing to catch every kind of error # since user code is run in the case of descriptors # XXX: Make sure you raise here if you're debugging the completion # stuff ! return False if inspect.isclass(f): try: if f.__init__ is not object.__init__: f = f.__init__ except AttributeError: return None self.current_func = f self.argspec = inspection.getargspec(func, f) if self.argspec: self.argspec.append(arg_number) return True return False
def get_args(self): """Check if an unclosed parenthesis exists, then attempt to get the argspec() for it. On success, update self.argspec and return True, otherwise set self.argspec to None and return False """ self.current_func = None if not self.config.arg_spec: return False # Get the name of the current function and where we are in # the arguments stack = [['', 0, '']] try: for (token, value) in PythonLexer().get_tokens( self.current_line()): if token is Token.Punctuation: if value in '([{': stack.append(['', 0, value]) elif value in ')]}': stack.pop() elif value == ',': try: stack[-1][1] += 1 except TypeError: stack[-1][1] = '' stack[-1][0] = '' elif value == ':' and stack[-1][2] == 'lambda': stack.pop() else: stack[-1][0] = '' elif (token is Token.Name or token in Token.Name.subtypes or token is Token.Operator and value == '.'): stack[-1][0] += value elif token is Token.Operator and value == '=': stack[-1][1] = stack[-1][0] stack[-1][0] = '' elif token is Token.Keyword and value == 'lambda': stack.append(['', 0, value]) else: stack[-1][0] = '' while stack[-1][2] in '[{': stack.pop() arg_number = stack.pop()[1] func = stack.pop()[0] except IndexError: return False if not func: return False try: f = self.get_object(func) except (AttributeError, NameError, SyntaxError): return False if inspect.isclass(f): try: if f.__init__ is not object.__init__: f = f.__init__ except AttributeError: return None self.current_func = f self.argspec = inspection.getargspec(func, f) if self.argspec: self.argspec.append(arg_number) return True return False
def test_pasekeywordpairs_string(self): def spam(eggs="foo, bar"): pass defaults = inspection.getargspec("spam", spam)[1][3] self.assertEqual(repr(defaults[0]), "'foo, bar'")
def test_pasekeywordpairs_string(self): def spam(eggs='foo, bar'): pass defaults = inspection.getargspec('spam', spam)[1][3] self.assertEqual(repr(defaults[0]), "'foo, bar'")