diff --git a/src/parse.rs b/src/parse.rs
index 961c3be89c2cd64bddddc6c2fed7c66793ae8487..1b26b060513c9e9d23f05c738220e6fccf356cc2 100644
--- a/src/parse.rs
+++ b/src/parse.rs
@@ -2,11 +2,13 @@ use std::collections::{HashMap, HashSet};
 use std::iter::Peekable;
 use std::slice::Iter;
 
-use syn::{self, DelimToken, Ident, IntTy, Lit, Path, Token, BinOpToken, TokenTree, Ty};
+use syn::{self, DelimToken, Ident, IntTy, Lit, Path, Token, BinOpToken,
+          TokenTree, Ty};
 
 use error::*;
 
-use {Cro, Ips, Ops, App, Idle, Init, Resources, Static, Statics, Task, Tasks, Expr};
+use {Cro, Ips, Ops, App, Idle, Init, Resources, Static, Statics, Task, Tasks,
+     Expr};
 
 /// Parses the contents of `app! { $App }`
 pub fn app(input: &str) -> Result<App> {
@@ -23,7 +25,8 @@ pub fn app(input: &str) -> Result<App> {
             "device" => {
                 ensure!(device.is_none(), "duplicated `device` field");
 
-                device = Some(::parse::path(tts).chain_err(|| "parsing `device`")?);
+                device =
+                    Some(::parse::path(tts).chain_err(|| "parsing `device`")?);
             }
             "idle" => {
                 ensure!(idle.is_none(), "duplicated `idle` field");
@@ -38,12 +41,15 @@ pub fn app(input: &str) -> Result<App> {
             "resources" => {
                 ensure!(resources.is_none(), "duplicated `resources` field");
 
-                resources = Some(::parse::statics(tts).chain_err(|| "parsing `resources`")?);
+                resources = Some(::parse::statics(tts).chain_err(
+                    || "parsing `resources`",
+                )?);
             }
             "tasks" => {
                 ensure!(tasks.is_none(), "duplicated `tasks` field");
 
-                tasks = Some(::parse::tasks(tts).chain_err(|| "parsing `tasks`")?);
+                tasks =
+                    Some(::parse::tasks(tts).chain_err(|| "parsing `tasks`")?);
             }
             _ => bail!("unknown field: `{}`", key),
         }
@@ -71,7 +77,11 @@ fn bool(tt: Option<&TokenTree>) -> Result<bool> {
 }
 
 /// Parses a delimited token tree
-fn delimited<R, F>(tts: &mut Peekable<Iter<TokenTree>>, delimiter: DelimToken, f: F) -> Result<R>
+fn delimited<R, F>(
+    tts: &mut Peekable<Iter<TokenTree>>,
+    delimiter: DelimToken,
+    f: F,
+) -> Result<R>
 where
     F: FnOnce(&[TokenTree]) -> Result<R>,
 {
@@ -137,9 +147,14 @@ fn idle(tts: &mut Peekable<Iter<TokenTree>>) -> Result<Idle> {
                     path = Some(::parse::path(tts)?);
                 }
                 "resources" => {
-                    ensure!(resources.is_none(), "duplicated `resources` field");
+                    ensure!(
+                        resources.is_none(),
+                        "duplicated `resources` field"
+                    );
 
-                    resources = Some(::parse::resources(tts).chain_err(|| "parsing `resources`")?);
+                    resources = Some(::parse::resources(tts).chain_err(
+                        || "parsing `resources`",
+                    )?);
                 }
                 _ => bail!("unknown field: `{}`", key),
             }
@@ -188,7 +203,10 @@ fn resources(tts: &mut Peekable<Iter<TokenTree>>) -> Result<Resources> {
         let mut tts = tts.iter().peekable();
         while let Some(tt) = tts.next() {
             if let &TokenTree::Token(Token::Ident(ref ident)) = tt {
-                ensure!(!idents.contains(ident), "ident {} listed more than once");
+                ensure!(
+                    !idents.contains(ident),
+                    "ident {} listed more than once"
+                );
 
                 idents.insert(ident.clone());
 
@@ -262,18 +280,20 @@ fn statics(tts: &mut Peekable<Iter<TokenTree>>) -> Result<Statics> {
         let mut tts = tts.iter();
         while let Some(tt) = tts.next() {
             match tt {
-                &TokenTree::Token(Token::Ident(ref id)) if id.as_ref() == "static" => {}
+                &TokenTree::Token(Token::Ident(ref id))
+                    if id.as_ref() == "static" => {}
                 _ => {
                     bail!("expected keyword `static`, found {:?}", tt);
                 }
             }
 
             let tt = tts.next();
-            let ident = if let Some(&TokenTree::Token(Token::Ident(ref id))) = tt {
-                id
-            } else {
-                bail!("expected Ident, found {:?}", tt);
-            };
+            let ident =
+                if let Some(&TokenTree::Token(Token::Ident(ref id))) = tt {
+                    id
+                } else {
+                    bail!("expected Ident, found {:?}", tt);
+                };
 
             ensure!(
                 !statics.contains_key(ident),
@@ -334,22 +354,33 @@ fn task(tts: &mut Peekable<Iter<TokenTree>>) -> Result<Task> {
                 "enabled" => {
                     ensure!(enabled.is_none(), "duplicated `enabled` field");
 
-                    enabled = Some(::parse::bool(tts.next()).chain_err(|| "parsing `enabled`")?);
+                    enabled = Some(::parse::bool(tts.next()).chain_err(
+                        || "parsing `enabled`",
+                    )?);
                 }
                 "path" => {
                     ensure!(path.is_none(), "duplicated `path` field");
 
-                    path = Some(::parse::path(tts).chain_err(|| "parsing `path`")?);
+                    path = Some(
+                        ::parse::path(tts).chain_err(|| "parsing `path`")?,
+                    );
                 }
                 "priority" => {
                     ensure!(priority.is_none(), "duplicated `priority` field");
 
-                    priority = Some(::parse::u8(tts.next()).chain_err(|| "parsing `priority`")?);
+                    priority = Some(::parse::u8(tts.next()).chain_err(
+                        || "parsing `priority`",
+                    )?);
                 }
                 "resources" => {
-                    ensure!(resources.is_none(), "duplicated `resources` field");
+                    ensure!(
+                        resources.is_none(),
+                        "duplicated `resources` field"
+                    );
 
-                    resources = Some(::parse::resources(tts).chain_err(|| "parsing `resources`")?);
+                    resources = Some(::parse::resources(tts).chain_err(
+                        || "parsing `resources`",
+                    )?);
                 }
                 _ => bail!("unknown field: `{}`", key),
             }
@@ -499,42 +530,56 @@ fn ips(tts: &mut Peekable<Iter<TokenTree>>) -> Result<Ips> {
             let mut ty_arg = None;
             let mut ty_ret = syn::parse_type(&"()")?;
             let mut op_sync = None;
-            let _ = ::parse::delimited(&mut tts, DelimToken::Brace, |tts| {
-                fields(&tts, |key, mut tts| {
-                    match key.as_ref() {
-                        "sig" => {
-                            let tt = tts.next();
-                            if let Some(&TokenTree::Token(Token::Ident(ref id))) = tt {
+            let _ =
+                ::parse::delimited(&mut tts, DelimToken::Brace, |tts| {
+                    fields(&tts, |key, mut tts| {
+                        match key.as_ref() {
+                            "sig" => {
+                                let tt = tts.next();
+                                if let Some(&TokenTree::Token(Token::Ident(ref id))) = tt {
                                 ensure!(id.as_ref() == "fn", "expected `fn` Ident, found {:?}", tt);
                             } else {
                                 bail!("expected `fn` Ident, found {:?}", tt);
                             }
-                            ty_arg = Some(::parse::delimited(&mut tts, DelimToken::Paren, |tts| {
-                                Ok(syn::parse_type(&format!("({})", quote!(#(#tts)*)))?)
-                            })?);
-
-                            let tt = tts.peek().cloned();
-                            let ty_ret: Result<Ty> = match tt {
-                                Some(&TokenTree::Token(Token::Comma)) => Ok(
+                                ty_arg = Some(::parse::delimited(
+                                    &mut tts,
+                                    DelimToken::Paren,
+                                    |tts| {
+                                        Ok(syn::parse_type(
+                                            &format!("({})", quote!(#(#tts)*)),
+                                        )?)
+                                    },
+                                )?);
+
+                                let tt = tts.peek().cloned();
+                                ty_ret =
+                                    match tt {
+                                        Some(&TokenTree::Token(Token::Comma)) => Ok(
                                     syn::parse_type(&"()")?,
                                 ),
-                                Some(&TokenTree::Token(Token::RArrow)) => {
+                                        Some(&TokenTree::Token(Token::RArrow)) => {
+                                        	tts.next();
                                     ::parse::ty(&TokenTree::Token(Token::Comma), &mut tts)
                                 }
-                                _ => bail!("expected `-> Type,' or `,` found {:?}", tt),
-                            };
+                                        _ => {
+                                            bail!(
+                                                "expected `-> Type,' or `,` found {:?}",
+                                                tt
+                                            )
+                                        }
+                                    }?;
 
-                        }
-                        "sync" => {
-                            op_sync = Some(::parse::resources(&mut tts)?);
-                        }
+                            }
+                            "sync" => {
+                                op_sync = Some(::parse::resources(&mut tts)?);
+                            }
 
-                        "async" => (),
-                        _ => bail!("unknown field: `{}`", key),
-                    };
-                    Ok(())
-                })
-            })?;
+                            "async" => (),
+                            _ => bail!("unknown field: `{}`", key),
+                        };
+                        Ok(())
+                    })
+                })?;
 
             let tt = tts.next();
             match tt {
@@ -576,7 +621,11 @@ fn ops(tts: &mut Peekable<Iter<TokenTree>>) -> Result<Ops> {
 
             let tt = tts.next();
             if let Some(&TokenTree::Token(Token::Ident(ref id))) = tt {
-                ensure!(id.as_ref() == "fn", "expected `fn` Ident, found {:?}", tt);
+                ensure!(
+                    id.as_ref() == "fn",
+                    "expected `fn` Ident, found {:?}",
+                    tt
+                );
             } else {
                 bail!("expected `fn` Ident, found {:?}", tt);
             }
@@ -596,7 +645,9 @@ fn ops(tts: &mut Peekable<Iter<TokenTree>>) -> Result<Ops> {
 
             let tt = tts.peek().cloned();
             let ty_ret: Result<Ty> = match tt {
-                Some(&TokenTree::Token(Token::Comma)) => Ok(syn::parse_type(&"()")?),
+                Some(&TokenTree::Token(Token::Comma)) => Ok(syn::parse_type(
+                    &"()",
+                )?),
                 Some(&TokenTree::Token(Token::RArrow)) => {
                     tts.next();
                     ::parse::ty(&TokenTree::Token(Token::Comma), &mut tts)
@@ -639,7 +690,10 @@ fn ty(token: &TokenTree, tts: &mut Peekable<Iter<TokenTree>>) -> Result<Ty> {
 }
 
 /// Parses `$Expr `
-fn expr(token: &TokenTree, tts: &mut Peekable<Iter<TokenTree>>) -> Result<::Expr> {
+fn expr(
+    token: &TokenTree,
+    tts: &mut Peekable<Iter<TokenTree>>,
+) -> Result<::Expr> {
     let mut fragments = vec![];
     loop {
         if let Some(tt) = tts.next() {