From 6b0b7a00d7cdce7b437dcad805f4aeb764733567 Mon Sep 17 00:00:00 2001
From: Wim Looman <wim@nemo157.com>
Date: Mon, 1 Feb 2016 17:40:25 +0100
Subject: [PATCH] Allow path lookups in un-delimited splices

---
 maud_macros/src/parse.rs   |  9 +++++++++
 maud_macros/tests/tests.rs | 14 ++++++++++++++
 2 files changed, 23 insertions(+)

diff --git a/maud_macros/src/parse.rs b/maud_macros/src/parse.rs
index 03d110e..07ccb5e 100644
--- a/maud_macros/src/parse.rs
+++ b/maud_macros/src/parse.rs
@@ -32,6 +32,9 @@ macro_rules! pound {
 macro_rules! dot {
     () => (TokenTree::Token(_, Token::Dot))
 }
+macro_rules! modsep {
+    () => (TokenTree::Token(_, Token::ModSep))
+}
 macro_rules! eq {
     () => (TokenTree::Token(_, Token::Eq))
 }
@@ -328,6 +331,12 @@ impl<'cx, 'i> Parser<'cx, 'i> {
                 tts.push(dot.clone());
                 tts.push(ident.clone());
             },
+            // Munch path lookups e.g. `$some_mod::Struct`
+            [ref sep @ modsep!(), ref ident @ ident!(_, _), ..] => {
+                self.shift(2);
+                tts.push(sep.clone());
+                tts.push(ident.clone());
+            },
             // Munch function calls `()` and indexing operations `[]`
             [TokenTree::Delimited(sp, ref d), ..] if d.delim != DelimToken::Brace => {
                 self.shift(1);
diff --git a/maud_macros/tests/tests.rs b/maud_macros/tests/tests.rs
index 42eb731..ca76822 100644
--- a/maud_macros/tests/tests.rs
+++ b/maud_macros/tests/tests.rs
@@ -309,3 +309,17 @@ fn issue_23() {
     let s = to_string!(p { "Hi, " $name "!" });
     assert_eq!(s, "<p>Hi, Lyra!</p>");
 }
+
+#[test]
+fn splice_with_path() {
+    mod inner {
+        pub fn name() -> &'static str {
+            "Rusticle"
+        }
+    }
+
+    let mut s = String::new();
+    html!(s, $inner::name()).unwrap();
+    assert_eq!(s, "Rusticle");
+}
+