Skip to content

Commit 4b31551

Browse files
committed
Merge pull request honza#322 from RyanPineo/master
Python: Add Google style docstring support.
2 parents e868e17 + 391d4fe commit 4b31551

File tree

1 file changed

+50
-4
lines changed

1 file changed

+50
-4
lines changed

Diff for: UltiSnips/python.snippets

+50-4
Original file line numberDiff line numberDiff line change
@@ -34,13 +34,30 @@ global !p
3434
NORMAL = 0x1
3535
DOXYGEN = 0x2
3636
SPHINX = 0x3
37+
GOOGLE = 0x4
3738
3839
SINGLE_QUOTES = 0x1
3940
DOUBLE_QUOTES = 0x2
4041
42+
43+
class Arg(object):
44+
def __init__(self, arg):
45+
self.arg = arg
46+
self.name = arg.split('=')[0].strip()
47+
48+
def __str__(self):
49+
return self.name
50+
51+
def __unicode__(self):
52+
return self.name
53+
54+
def is_kwarg(self):
55+
return '=' in self.arg
56+
57+
4158
def get_args(arglist):
42-
args = [arg.split('=')[0].strip() for arg in arglist.split(',') if arg]
43-
args = [arg for arg in args if arg and arg != "self"]
59+
args = [Arg(arg) for arg in arglist.split(',') if arg]
60+
args = [arg for arg in args if arg.name != 'self']
4461
4562
return args
4663
@@ -61,6 +78,7 @@ def get_style(snip):
6178
6279
if style == "doxygen": return DOXYGEN
6380
elif style == "sphinx": return SPHINX
81+
elif style == "google": return GOOGLE
6482
else: return NORMAL
6583
6684
@@ -71,13 +89,17 @@ def format_arg(arg, style):
7189
return ":param %s: @todo" % arg
7290
elif style == NORMAL:
7391
return ":%s: @todo" % arg
92+
elif style == GOOGLE:
93+
return "%s (@todo): @todo" % arg
7494
7595
7696
def format_return(style):
7797
if style == DOXYGEN:
7898
return "@return: @todo"
7999
elif style in (NORMAL, SPHINX):
80100
return ":returns: @todo"
101+
elif style == GOOGLE:
102+
return "Returns: @todo"
81103
82104
83105
def write_docstring_args(args, snip):
@@ -89,8 +111,32 @@ def write_docstring_args(args, snip):
89111
90112
style = get_style(snip)
91113
92-
for arg in args:
93-
snip += format_arg(arg, style)
114+
if style == GOOGLE:
115+
write_google_docstring_args(args, snip)
116+
else:
117+
for arg in args:
118+
snip += format_arg(arg, style)
119+
120+
121+
def write_google_docstring_args(args, snip):
122+
kwargs = [arg for arg in args if arg.is_kwarg()]
123+
args = [arg for arg in args if not arg.is_kwarg()]
124+
125+
if args:
126+
snip += "Args:"
127+
snip.shift()
128+
for arg in args:
129+
snip += format_arg(arg, GOOGLE)
130+
snip.unshift()
131+
snip.rv += '\n' + snip.mkline('', indent='')
132+
133+
if kwargs:
134+
snip += "Kwargs:"
135+
snip.shift()
136+
for kwarg in kwargs:
137+
snip += format_arg(kwarg, GOOGLE)
138+
snip.unshift()
139+
snip.rv += '\n' + snip.mkline('', indent='')
94140
95141
96142
def write_init_body(args, parents, snip):

0 commit comments

Comments
 (0)