diff --git a/maud_macros/src/lints/doctype_html.rs b/maud_macros/src/lints/doctype_html.rs index 1a9ff8a..3e1f5b3 100644 --- a/maud_macros/src/lints/doctype_html.rs +++ b/maud_macros/src/lints/doctype_html.rs @@ -20,23 +20,21 @@ impl LintPass for DoctypeHtml { impl<'a, 'tcx> LateLintPass<'a, 'tcx> for DoctypeHtml { fn check_expr(&mut self, cx: &LateContext<'a, 'tcx>, expr: &'tcx Expr) { - if_let_chain! {[ + if_chain! { // It's a function call... - let ExprCall(ref path_expr, ref args) = expr.node, + if let ExprCall(ref path_expr, ref args) = expr.node; // ... where the argument is a literal "<!doctype html>" - let Some(first_arg) = args.first(), - let ExprLit(ref lit) = first_arg.node, - let LitKind::Str(s, _) = lit.node, - s.as_str().eq_ignore_ascii_case("<!doctype html>"), - ], { + if let Some(first_arg) = args.first(); + if let ExprLit(ref lit) = first_arg.node; + if let LitKind::Str(s, _) = lit.node; + if s.as_str().eq_ignore_ascii_case("<!doctype html>"); // ... and the callee is `maud::PreEscaped` - if let ExprPath(ref qpath) = path_expr.node { - let def_id = cx.tcx.tables().qpath_def(qpath, path_expr.id).def_id(); - if match_def_path(cx, def_id, &["maud", "PreEscaped", "{{constructor}}"]) { - cx.struct_span_lint(MAUD_DOCTYPE_HTML, expr.span, - "use `maud::DOCTYPE_HTML` instead").emit(); - } + if let ExprPath(ref qpath) = path_expr.node; + let def_id = cx.tcx.tables().qpath_def(qpath, path_expr.id).def_id(); + if match_def_path(cx, def_id, &["maud", "PreEscaped", "{{constructor}}"]) { + cx.struct_span_lint(MAUD_DOCTYPE_HTML, expr.span, + "use `maud::DOCTYPE_HTML` instead").emit(); } - }} + } } } diff --git a/maud_macros/src/lints/util.rs b/maud_macros/src/lints/util.rs index b05e7e1..dd11dca 100644 --- a/maud_macros/src/lints/util.rs +++ b/maud_macros/src/lints/util.rs @@ -7,60 +7,26 @@ use rustc::lint::LateContext; use rustc::ty; use syntax::symbol::{InternedString, Symbol}; -/// Produce a nested chain of if-lets and ifs from the patterns: -/// -/// ```rust,ignore -/// if_let_chain! {[ -/// let Some(y) = x, -/// y.len() == 2, -/// let Some(z) = y, -/// ], { -/// block -/// }} -/// ``` -/// -/// becomes -/// -/// ```rust,ignore -/// if let Some(y) = x { -/// if y.len() == 2 { -/// if let Some(z) = y { -/// block -/// } -/// } -/// } -/// ``` #[macro_export] -macro_rules! if_let_chain { - ([let $pat:pat = $expr:expr, $($tt:tt)+], $block:block) => { +macro_rules! if_chain { + (let $pat:pat = $expr:expr; $($tt:tt)+) => { + { + let $pat = $expr; + if_chain! { $($tt)+ } + } + }; + (if let $pat:pat = $expr:expr; $($tt:tt)+) => { if let $pat = $expr { - if_let_chain!{ [$($tt)+], $block } + if_chain! { $($tt)+ } } }; - ([let $pat:pat = $expr:expr], $block:block) => { - if let $pat = $expr { - $block - } - }; - ([let $pat:pat = $expr:expr,], $block:block) => { - if let $pat = $expr { - $block - } - }; - ([$expr:expr, $($tt:tt)+], $block:block) => { + (if $expr:expr; $($tt:tt)+) => { if $expr { - if_let_chain!{ [$($tt)+], $block } + if_chain! { $($tt)+ } } }; - ([$expr:expr], $block:block) => { - if $expr { - $block - } - }; - ([$expr:expr,], $block:block) => { - if $expr { - $block - } + ($expr:expr) => { + $expr }; }