comparison src/ast_dump.rs @ 65:ce5e27a3f277

Add ClassDef.decorator_list support.
author Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
date Mon, 13 Jun 2016 01:27:10 +0100
parents 53817b39f139
children 32550e12aedf
comparison
equal deleted inserted replaced
64:53817b39f139 65:ce5e27a3f277
219 219
220 fn make_indent(indent: usize) -> String { 220 fn make_indent(indent: usize) -> String {
221 iter::repeat(" ").take(indent).collect() 221 iter::repeat(" ").take(indent).collect()
222 } 222 }
223 223
224 fn decorator_list_to_string(decorator_list: Vec<expr>, indent: usize) -> String {
225 let current_indent = make_indent(indent);
226 let decorators = vec_to_strings_vec(decorator_list);
227 if decorators.is_empty() {
228 String::new()
229 } else {
230 format!("{}@{}\n",
231 current_indent,
232 decorators.join(format!("\n{}@", current_indent).as_str())
233 )
234 }
235 }
236
224 impl stmt { 237 impl stmt {
225 fn to_string(&self, indent: usize) -> String { 238 fn to_string(&self, indent: usize) -> String {
226 let current_indent = make_indent(indent); 239 let current_indent = make_indent(indent);
227 match self.clone() { 240 match self.clone() {
228 stmt::ClassDef(name, bases, keywords, body, decorator_list) => format!("{}class {}({}):\n{}", current_indent, name, vec_to_strings_vec(bases).join(", "), statements_to_string(indent, body)), 241 stmt::ClassDef(name, bases, keywords, body, decorator_list) => {
242 format!("{}{}class {}({}):\n{}",
243 decorator_list_to_string(decorator_list, indent),
244 current_indent,
245 name,
246 vec_to_strings_vec(bases).join(", "),
247 statements_to_string(indent, body)
248 )
249 },
229 stmt::FunctionDef(name, arguments, body, decorator_list, returns) => { 250 stmt::FunctionDef(name, arguments, body, decorator_list, returns) => {
230 format!("{}{}def {}({}){}:\n{}", 251 format!("{}{}def {}({}){}:\n{}",
231 { 252 decorator_list_to_string(decorator_list, indent),
232 let decorators = vec_to_strings_vec(decorator_list);
233 if decorators.is_empty() {
234 String::new()
235 } else {
236 format!("{}@{}\n", current_indent, decorators.join(format!("\n{}@", current_indent).as_str()))
237 }
238 },
239 current_indent, 253 current_indent,
240 name, 254 name,
241 arguments.to_string(), 255 arguments.to_string(),
242 match returns { 256 match returns {
243 None => String::new(), 257 None => String::new(),