Fix operator preference at loop.first

This commit is contained in:
bott 2018-09-13 23:40:17 +02:00 committed by Dirkjan Ochtman
parent d467161159
commit c0f9fe973e
3 changed files with 20 additions and 3 deletions

View File

@ -747,14 +747,14 @@ impl<'a> Generator<'a> {
fn visit_attr(&mut self, buf: &mut Buffer, obj: &Expr, attr: &str) -> DisplayWrap {
if let Expr::Var(name) = *obj {
if name == "loop" {
buf.write("_loop_index");
if attr == "index" {
buf.write(" + 1");
buf.write("_loop_index + 1");
return DisplayWrap::Unwrapped;
} else if attr == "index0" {
buf.write("_loop_index");
return DisplayWrap::Unwrapped;
} else if attr == "first" {
buf.write(" == 0");
buf.write("(_loop_index == 0)");
return DisplayWrap::Unwrapped;
} else {
panic!("unknown loop variable");

View File

@ -0,0 +1,3 @@
{% for s in strings %}
{{- loop.index0 }}. {{ s }}{% if !loop.first %}{% else %} (first){% endif %}
{% endfor %}

View File

@ -32,3 +32,17 @@ fn test_nested_for() {
};
assert_eq!(s.render().unwrap(), "1\n 0a1b2c2\n 0one1two");
}
#[derive(Template)]
#[template(path = "precedence-for.html")]
struct PrecedenceTemplate<'a> {
strings: Vec<&'a str>,
}
#[test]
fn test_precedence_for() {
let s = PrecedenceTemplate {
strings: vec!["A", "alfa", "1"],
};
assert_eq!(s.render().unwrap(), "0. A (first)\n1. alfa\n2. 1\n");
}