diff --git a/src/atrule.rs b/src/atrule.rs index 006a9b1..24fc4aa 100644 --- a/src/atrule.rs +++ b/src/atrule.rs @@ -263,7 +263,8 @@ fn eat_unknown_atrule_body>( super_selector: &Selector, ) -> SassResult> { let mut stmts = Vec::new(); - while let Some(expr) = eat_expr(toks, scope, super_selector)? { + let mut scope = scope.clone(); + while let Some(expr) = eat_expr(toks, &scope, super_selector)? { match expr { Expr::AtRule(a) => stmts.push(Stmt::AtRule(a)), Expr::Style(s) => stmts.push(Stmt::Style(*s)), @@ -273,16 +274,15 @@ fn eat_unknown_atrule_body>( todo!() } Expr::Selector(selector) => { - let rules = eat_unknown_atrule_body(toks, scope, &super_selector.zip(&selector))?; + let rules = eat_unknown_atrule_body(toks, &scope, &super_selector.zip(&selector))?; stmts.push(Stmt::RuleSet(RuleSet { super_selector: super_selector.clone(), selector, rules, })); } - Expr::VariableDecl(..) => { - todo!() - // self.scope.insert_var(&name, *val); + Expr::VariableDecl(name, val) => { + scope.insert_var(&name, *val); } Expr::MultilineComment(s) => stmts.push(Stmt::MultilineComment(s)), } diff --git a/tests/for.rs b/tests/for.rs index 77ad6a1..d8c067a 100644 --- a/tests/for.rs +++ b/tests/for.rs @@ -23,3 +23,13 @@ test!( "@for $i from 3 to 1 {\n a {\n color: $i;\n }\n}\n", "a {\n color: 3;\n}\n\na {\n color: 2;\n}\n" ); +test!( + for_var_through_var, + "$a: 1;\n$b: 3;\n@for $x from $a through $b {\n div {\n color: $x;\n }\n}\n", + "div {\n color: 1;\n}\n\ndiv {\n color: 2;\n}\n\ndiv {\n color: 3;\n}\n" +); +test!( + for_var_decl, + "@for $x from 1 to 3 {\n $limit: $x;\n\n a {\n color: $limit;\n }\n}\n", + "a {\n color: 1;\n}\n\na {\n color: 2;\n}\n" +);