comparison src/ast_dump.rs @ 53:1a815946c2e5

Implement keywords in expr::Call, and add some tests.
author Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
date Sun, 12 Jun 2016 02:37:28 +0100
parents d9838e8b3ec5
children ad2453a55820
comparison
equal deleted inserted replaced
52:d9838e8b3ec5 53:1a815946c2e5
57 cmpop::NotIn => "not in", 57 cmpop::NotIn => "not in",
58 } 58 }
59 } 59 }
60 } 60 }
61 61
62 fn args_to_string(args: Vec<expr>) -> String { 62 fn args_to_strings(args: Vec<expr>) -> Vec<String> {
63 let mut arguments = vec!(); 63 let mut arguments = vec!();
64 for arg in args { 64 for arg in args {
65 arguments.push(arg.to_string()); 65 arguments.push(arg.to_string());
66 } 66 }
67 arguments
68 }
69
70 fn args_to_string(args: Vec<expr>) -> String {
71 let mut arguments = vec!();
72 for arg in args {
73 arguments.push(arg.to_string());
74 }
67 arguments.join(", ") 75 arguments.join(", ")
68 } 76 }
69 77
70 fn kwargs_to_string(kwargs: Vec<keyword>) -> String { 78 impl keyword {
71 let mut arguments = vec!(); 79 fn to_string(&self) -> String {
72 for arg in kwargs { 80 match self.arg.clone() {
73 match arg.arg { 81 Some(arg) => format!("{}={}", arg, self.value.to_string()),
74 Some(arg) => arguments.push(arg), 82 None => format!("**{}", self.value.to_string())
75 None => arguments.push("**kwarg".to_string()) 83 }
76 } 84 }
77 } 85 }
78 arguments.join(", ") 86
87 fn kwargs_to_strings(kwargs: Vec<keyword>) -> Vec<String> {
88 let mut arguments = vec!();
89 for kwarg in kwargs {
90 arguments.push(kwarg.to_string());
91 }
92 arguments
79 } 93 }
80 94
81 fn arguments_to_string(args: arguments) -> String { 95 fn arguments_to_string(args: arguments) -> String {
82 let mut arguments = vec!(); 96 let mut arguments = vec!();
83 for arg in args.args { 97 for arg in args.args {
144 } 158 }
145 */ 159 */
146 160
147 arguments.join(" ") 161 arguments.join(" ")
148 }), 162 }),
149 expr::Call(func, args, keywords) => format!("{}({}{})", func.to_string(), args_to_string(args), kwargs_to_string(keywords)), 163 expr::Call(func, args, keywords) => format!("{}({})", func.to_string(), {
164 let mut arguments = vec!();
165 let args = args_to_strings(args);
166 let keywords = kwargs_to_strings(keywords);
167 arguments.extend(args);
168 arguments.extend(keywords);
169 arguments.join(", ")
170 }),
150 expr::Num(n) => format!("{}", n), 171 expr::Num(n) => format!("{}", n),
151 expr::Str(s) => format!("\"{}\"", s), 172 expr::Str(s) => format!("\"{}\"", s),
152 expr::NameConstant(name) => format!("{}", name), 173 expr::NameConstant(name) => format!("{}", name),
153 expr::Attribute(value, attr, ctx) => format!("{}.{}", value.to_string(), attr), 174 expr::Attribute(value, attr, ctx) => format!("{}.{}", value.to_string(), attr),
154 expr::Name(name, ctx) => format!("{}", name), 175 expr::Name(name, ctx) => format!("{}", name),