From 7923d096a79c03dc2eaccdd3d21d86201804daca Mon Sep 17 00:00:00 2001
From: ConnorSkees <39542938+ConnorSkees@users.noreply.github.com>
Date: Sat, 29 Feb 2020 14:16:26 -0500
Subject: [PATCH] Allow variable declarations in at rules

---
 src/atrule.rs | 10 +++++-----
 tests/for.rs  | 10 ++++++++++
 2 files changed, 15 insertions(+), 5 deletions(-)

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<I: Iterator<Item = Token>>(
     super_selector: &Selector,
 ) -> SassResult<Vec<Stmt>> {
     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<I: Iterator<Item = Token>>(
                 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"
+);