Merge pull request #96 from jjay/improvedocparse

Improve docstring parsing for param types.
This commit is contained in:
David Halter
2012-12-28 05:29:22 -08:00
3 changed files with 22 additions and 35 deletions

View File

@@ -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

View File

@@ -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()

View File

@@ -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