@@ -34,13 +34,30 @@ global !p
3434NORMAL = 0x 1
3535DOXYGEN = 0x 2
3636SPHINX = 0x 3
37+ GOOGLE = 0x 4
3738
3839SINGLE_QUOTES = 0x 1
3940DOUBLE_QUOTES = 0x 2
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+
4158def 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
@@ -51,7 +68,7 @@ def get_quoting_style(snip):
5168 return SINGLE_QUOTES
5269 return DOUBLE_QUOTES
5370
54- def tripple_quotes (snip ):
71+ def triple_quotes (snip ):
5572 if get_quoting_style(snip) == SINGLE_QUOTES :
5673 return " '''"
5774 return ' """'
@@ -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,26 +89,54 @@ 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
7696def 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
83105def write_docstring_args (args , snip ):
84106 if not args:
85- snip.rv += ' {0} ' .format(tripple_quotes (snip))
107+ snip.rv += ' {0} ' .format(triple_quotes (snip))
86108 return
87109
88110 snip.rv += ' \n ' + snip.mkline(' ' , indent = ' ' )
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
96142def write_init_body (args , parents , snip ):
@@ -120,10 +166,10 @@ endglobal
120166snippet class " class with docstrings" b
121167class ${1: MyClass } (${2: object } ):
122168
123- `!p snip.rv = tripple_quotes (snip) ` ${3: Docstring for $1 . } `!p snip.rv = tripple_quotes (snip) `
169+ `!p snip.rv = triple_quotes (snip) ` ${3: Docstring for $1 . } `!p snip.rv = triple_quotes (snip) `
124170
125171 def __init__(self$4 ):
126- `!p snip.rv = tripple_quotes (snip) ` ${5: @todo: to be defined1. } `!p
172+ `!p snip.rv = triple_quotes (snip) ` ${5: @todo: to be defined1. } `!p
127173snip.rv = " "
128174snip >> 2
129175
@@ -132,7 +178,7 @@ args = get_args(t[4])
132178write_docstring_args(args, snip)
133179if args:
134180 snip.rv += ' \n ' + snip.mkline(' ' , indent = ' ' )
135- snip += ' {0} ' .format(tripple_quotes (snip))
181+ snip += ' {0} ' .format(triple_quotes (snip))
136182
137183write_init_body(args, t[2 ], snip)
138184`
@@ -143,15 +189,15 @@ endsnippet
143189snippet slotclass " class with slots and docstrings" b
144190class ${1: MyClass } (${2: object } ):
145191
146- `!p snip.rv = tripple_quotes (snip) ` ${3: Docstring for $1 . } `!p snip.rv = tripple_quotes (snip) `
192+ `!p snip.rv = triple_quotes (snip) ` ${3: Docstring for $1 . } `!p snip.rv = triple_quotes (snip) `
147193`!p
148194snip >> 1
149195args = get_args(t[4 ])
150196write_slots_args(args, snip)
151197`
152198
153199 def __init__(self$4 ):
154- `!p snip.rv = tripple_quotes (snip) ` ${5: @todo: to be defined. } `!p
200+ `!p snip.rv = triple_quotes (snip) ` ${5: @todo: to be defined. } `!p
155201snip.rv = " "
156202snip >> 2
157203
@@ -160,7 +206,7 @@ args = get_args(t[4])
160206write_docstring_args(args, snip)
161207if args:
162208 snip.rv += ' \n ' + snip.mkline(' ' , indent = ' ' )
163- snip += tripple_quotes (snip)
209+ snip += triple_quotes (snip)
164210
165211write_init_body(args, t[2 ], snip)
166212`
@@ -353,7 +399,7 @@ snippet def "function with docstrings" b
353399def ${1: function } (`!p
354400if snip.indent:
355401 snip.rv = ' self' + (" , " if len (t[2 ]) else " " ) `${2: arg1 } ):
356- `!p snip.rv = tripple_quotes (snip) ` ${4: @todo: Docstring for $1 . } `!p
402+ `!p snip.rv = triple_quotes (snip) ` ${4: @todo: Docstring for $1 . } `!p
357403snip.rv = " "
358404snip >> 1
359405
@@ -364,7 +410,7 @@ if args:
364410style = get_style(snip)
365411snip += format_return(style)
366412snip.rv += ' \n ' + snip.mkline(' ' , indent = ' ' )
367- snip += tripple_quotes (snip) `
413+ snip += triple_quotes (snip) `
368414 ${0: pass }
369415endsnippet
370416
@@ -390,7 +436,7 @@ endsnippet
390436
391437snippet rwprop " Read write property" b
392438def ${1: name } ():
393- `!p snip.rv = tripple_quotes (snip) if t[2 ] else ' '
439+ `!p snip.rv = triple_quotes (snip) if t[2 ] else ' '
394440` ${2: @todo: Docstring for $1 . } `!p
395441if t[2 ]:
396442 snip >> 1
@@ -399,7 +445,7 @@ if t[2]:
399445 snip.rv += ' \n ' + snip.mkline(' ' , indent = ' ' )
400446 snip += format_return(style)
401447 snip.rv += ' \n ' + snip.mkline(' ' , indent = ' ' )
402- snip += tripple_quotes (snip)
448+ snip += triple_quotes (snip)
403449else :
404450 snip.rv = " " `
405451 def fget(self):
@@ -518,7 +564,7 @@ endsnippet
518564snippet testcase " pyunit testcase" b
519565class Test${1: Class } (${2: unittest.TestCase } ):
520566
521- `!p snip.rv = tripple_quotes (snip) ` ${3: Test case docstring. } `!p snip.rv = tripple_quotes (snip) `
567+ `!p snip.rv = triple_quotes (snip) ` ${3: Test case docstring. } `!p snip.rv = triple_quotes (snip) `
522568
523569 def setUp(self):
524570 ${4: pass }
0 commit comments