Mercurial > genshi > mirror
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) |