diff options
| author | 2017-02-18 16:04:12 +0100 | |
|---|---|---|
| committer | 2017-02-18 16:04:12 +0100 | |
| commit | dbc0c8998b904855ba61ed0c47afc9b5d8ab6afa (patch) | |
| tree | 119aafd803ccbebaf7b0b3e3fcd3cba9fdb01b09 | |
| parent | 915e93aa9d0895abc295df402d3a2136ef7e7bfb (diff) | |
| download | askama-dbc0c8998b904855ba61ed0c47afc9b5d8ab6afa.tar.gz askama-dbc0c8998b904855ba61ed0c47afc9b5d8ab6afa.tar.bz2 askama-dbc0c8998b904855ba61ed0c47afc9b5d8ab6afa.zip | |
Add support for method calls
Diffstat (limited to '')
| -rw-r--r-- | askama/src/generator.rs | 14 | ||||
| -rw-r--r-- | askama/src/parser.rs | 8 | 
2 files changed, 21 insertions, 1 deletions
| diff --git a/askama/src/generator.rs b/askama/src/generator.rs index 40b6523..895ec25 100644 --- a/askama/src/generator.rs +++ b/askama/src/generator.rs @@ -146,6 +146,18 @@ impl<'a> Generator<'a> {          self.visit_expr(right);      } +    fn visit_call(&mut self, obj: &Expr, method: &str, args: &[Expr]) { +        self.visit_expr(obj); +        self.write(&format!(".{}(", method)); +        for (i, arg) in args.iter().enumerate() { +            if i > 0 { +                self.write(", "); +            } +            self.visit_expr(arg); +        } +        self.write(")"); +    } +      fn visit_expr(&mut self, expr: &Expr) {          match *expr {              Expr::NumLit(s) => self.visit_num_lit(s), @@ -155,6 +167,8 @@ impl<'a> Generator<'a> {              Expr::Filter(name, ref args) => self.visit_filter(name, args),              Expr::BinOp(op, ref left, ref right) =>                  self.visit_binop(op, left, right), +            Expr::Call(ref obj, method, ref args) => +                self.visit_call(obj, method, args),          }      } diff --git a/askama/src/parser.rs b/askama/src/parser.rs index c09eeb3..cad6468 100644 --- a/askama/src/parser.rs +++ b/askama/src/parser.rs @@ -9,6 +9,7 @@ pub enum Expr<'a> {      Attr(Box<Expr<'a>>, &'a str),      Filter(&'a str, Vec<Expr<'a>>),      BinOp(&'a str, Box<Expr<'a>>, Box<Expr<'a>>), +    Call(Box<Expr<'a>>, &'a str, Vec<Expr<'a>>),  }  #[derive(Debug)] @@ -137,7 +138,12 @@ named!(expr_attr<Expr>, alt!(          obj: expr_single >>          tag_s!(".") >>          attr: identifier >> -        (Expr::Attr(Box::new(obj), attr)) +        args: arguments >> +        (if args.is_some() { +            Expr::Call(Box::new(obj), attr, args.unwrap()) +        } else { +            Expr::Attr(Box::new(obj), attr) +        })      ) | expr_single  )); | 
