diff --git a/jedi/docstrings.py b/jedi/docstrings.py index 043c7c1b..39134b19 100644 --- a/jedi/docstrings.py +++ b/jedi/docstrings.py @@ -6,19 +6,13 @@ import evaluate import parsing DOCSTRING_PARAM_PATTERNS = [ - r'\s*:type\s+%s:\s*([\d\w_]+)', # Sphinx - r'\s*@type\s+%s:\s*([\d\w_]+)', # Epidoc - r'\s*%s\s+\(([^()]+)\)' # googley + r'\s*:type\s+%s:\s*([^\n]+)', # Sphinx + r'\s*@type\s+%s:\s*([^\n]+)', # Epidoc ] DOCSTRING_RETURN_PATTERNS = [ re.compile(r'\s*:rtype:\s*([^\n]+)', re.M), # Sphinx re.compile(r'\s*@rtype:\s*([^\n]+)', re.M), # Epidoc - - # Googley is the most undocumented format for - # return types, so we try to analyze the first - # line or line after `Returns:` keyword - re.compile(r'returns\s*:[\s\n]*([^\n]+)', re.M|re.I), ] #@cache.memoize_default() # TODO add @@ -35,14 +29,12 @@ def follow_param(param): def search_param_in_docstr(docstr, param_str): - lines = docstr.split('\n') # look at #40 to see definitions of those params patterns = [ re.compile(p % re.escape(param_str)) for p in DOCSTRING_PARAM_PATTERNS ] - for l in lines: - for pattern in patterns: - match = pattern.match(l) - if match: - return match.group(1) + for pattern in patterns: + match = pattern.search(docstr) + if match: + return match.group(1) return None diff --git a/test/completion/docstring.py b/test/completion/docstring.py index 5b9af186..66b6744e 100644 --- a/test/completion/docstring.py +++ b/test/completion/docstring.py @@ -4,42 +4,34 @@ def f(a, b): """ asdfasdf :param a: blablabla :type a: str + :type b: (str, int) :rtype: dict """ #? str() a - #? - b + #? str() + b[0] + #? int() + b[1] #? dict() f() -def g(a, b): - """ asdfasdf - Arguments: - a (str): blablabla - - Returns: list - Blah blah. - """ - #? str() - a - #? - b - -#? list() -g() - def e(a, b): """ asdfasdf @type a: str @param a: blablabla + @type b: (str, int) + @param b: blablah @rtype: list """ #? str() a - #? - b + #? str() + b[0] + + #? int() + b[1] #? list() e() diff --git a/test/completion/std.py b/test/completion/std.py index 6ea57f30..0eec6367 100644 --- a/test/completion/std.py +++ b/test/completion/std.py @@ -83,7 +83,10 @@ row = c.fetchall()[0] row.keys()[0] def huhu(db): - """db (sqlite3.Connection): the db connection""" + """ + :type db: sqlite3.Connection + :param db: the db connection + """ #? sqlite3.Connection() db