comparison genshi/template/astutil.py @ 1024:a5e09a7ba12d trunk

Add support for kwonlyargs and kw_defaults attributes of AST argument nodes.
author hodgestar
date Sun, 16 Feb 2014 19:36:21 +0000
parents 2036193f89e7
children
comparison
equal deleted inserted replaced
1023:2036193f89e7 1024:a5e09a7ba12d
109 # 109 #
110 # Python >= 3.4 110 # Python >= 3.4
111 # arguments = (arg* args, arg? vararg, arg* kwonlyargs, expr* kw_defaults, 111 # arguments = (arg* args, arg? vararg, arg* kwonlyargs, expr* kw_defaults,
112 # arg? kwarg, expr* defaults) 112 # arg? kwarg, expr* defaults)
113 def visit_arguments(self, node): 113 def visit_arguments(self, node):
114 first = True 114 def write_possible_comma():
115 no_default_count = len(node.args) - len(node.defaults) 115 if _first[0]:
116 for i, arg in enumerate(node.args): 116 _first[0] = False
117 if not first: 117 else:
118 self._write(', ') 118 self._write(', ')
119 else: 119 _first = [True]
120 first = False 120
121 self.visit(arg) 121 def write_args(args, defaults):
122 if i >= no_default_count: 122 no_default_count = len(args) - len(defaults)
123 self._write('=') 123 for i, arg in enumerate(args):
124 self.visit(node.defaults[i - no_default_count]) 124 write_possible_comma()
125 self.visit(arg)
126 default_idx = i - no_default_count
127 if default_idx >= 0 and defaults[default_idx] is not None:
128 self._write('=')
129 self.visit(defaults[i - no_default_count])
130
131 write_args(node.args, node.defaults)
125 if getattr(node, 'vararg', None): 132 if getattr(node, 'vararg', None):
126 if not first: 133 write_possible_comma()
127 self._write(', ')
128 else:
129 first = False
130 self._write('*') 134 self._write('*')
131 if isstring(node.vararg): 135 if isstring(node.vararg):
132 self._write(node.vararg) 136 self._write(node.vararg)
133 else: 137 else:
134 self.visit(node.vararg) 138 self.visit(node.vararg)
139 if getattr(node, 'kwonlyargs', None):
140 write_args(node.kwonlyargs, node.kw_defaults)
135 if getattr(node, 'kwarg', None): 141 if getattr(node, 'kwarg', None):
136 if not first: 142 write_possible_comma()
137 self._write(', ')
138 else:
139 first = False
140 self._write('**') 143 self._write('**')
141 if isstring(node.kwarg): 144 if isstring(node.kwarg):
142 self._write(node.kwarg) 145 self._write(node.kwarg)
143 else: 146 else:
144 self.visit(node.kwarg) 147 self.visit(node.kwarg)
Copyright (C) 2012-2017 Edgewall Software