diff 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
line wrap: on
line diff
--- a/src/ast_dump.rs
+++ b/src/ast_dump.rs
@@ -221,21 +221,35 @@ fn make_indent(indent: usize) -> String 
     iter::repeat("    ").take(indent).collect()
 }
 
+fn decorator_list_to_string(decorator_list: Vec<expr>, indent: usize) -> String {
+    let current_indent = make_indent(indent);
+    let decorators = vec_to_strings_vec(decorator_list);
+    if decorators.is_empty() {
+        String::new()
+    } else {
+        format!("{}@{}\n",
+            current_indent,
+            decorators.join(format!("\n{}@", current_indent).as_str())
+        )
+    }
+}
+
 impl stmt {
     fn to_string(&self, indent: usize) -> String {
         let current_indent = make_indent(indent);
         match self.clone() {
-            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)),
+            stmt::ClassDef(name, bases, keywords, body, decorator_list) => {
+                format!("{}{}class {}({}):\n{}",
+                    decorator_list_to_string(decorator_list, indent),
+                    current_indent,
+                    name,
+                    vec_to_strings_vec(bases).join(", "),
+                    statements_to_string(indent, body)
+                )
+            },
             stmt::FunctionDef(name, arguments, body, decorator_list, returns) => {
                 format!("{}{}def {}({}){}:\n{}",
-                    {
-                        let decorators = vec_to_strings_vec(decorator_list);
-                        if decorators.is_empty() {
-                            String::new()
-                        } else {
-                            format!("{}@{}\n", current_indent, decorators.join(format!("\n{}@", current_indent).as_str()))
-                        }
-                    },
+                    decorator_list_to_string(decorator_list, indent),
                     current_indent,
                     name,
                     arguments.to_string(),