From 6c48e08e343fbf72eb32f692db1ec074665a49b7 Mon Sep 17 00:00:00 2001 From: Colin Reeder Date: Wed, 29 Sep 2021 12:29:49 -0600 Subject: [PATCH] Only output self-closing tags for void elements (#42) --- render/src/fragment.rs | 2 +- render/src/html.rs | 2 +- render/src/simple_element.rs | 12 +++++++++++- render_macros/src/lib.rs | 10 +++++----- render_tests/src/lib.rs | 15 +++++++++++++-- 5 files changed, 31 insertions(+), 10 deletions(-) diff --git a/render/src/fragment.rs b/render/src/fragment.rs index 6b653aa..aa16379 100644 --- a/render/src/fragment.rs +++ b/render/src/fragment.rs @@ -15,7 +15,7 @@ use std::fmt::{Result, Write}; /// /// /// }; -/// assert_eq!(result, ""); +/// assert_eq!(result, ""); /// ``` #[derive(Debug)] pub struct Fragment { diff --git a/render/src/html.rs b/render/src/html.rs index ce8ae92..f70d78a 100644 --- a/render/src/html.rs +++ b/render/src/html.rs @@ -18,7 +18,7 @@ use std::fmt::{Result, Write}; /// /// /// }; -/// # assert_eq!(result, ""); +/// # assert_eq!(result, ""); /// ``` #[derive(Debug)] pub struct HTML5Doctype; diff --git a/render/src/simple_element.rs b/render/src/simple_element.rs index 4cc0e22..7389caf 100644 --- a/render/src/simple_element.rs +++ b/render/src/simple_element.rs @@ -35,7 +35,17 @@ impl Render for SimpleElement<'_, T> { None => { write!(writer, "<{}", self.tag_name)?; write_attributes(self.attributes, writer)?; - write!(writer, "/>") + + match self.tag_name { + "area" | "base" | "br" | "col" | "embed" | "hr" | "img" | "input" | "link" + | "meta" | "param" | "source" | "track" | "wbr" => { + // void element, can be self-closing + write!(writer, "/>") + } + _ => { + write!(writer, ">", self.tag_name) + } + } } Some(renderable) => { write!(writer, "<{}", self.tag_name)?; diff --git a/render_macros/src/lib.rs b/render_macros/src/lib.rs index e62e2be..23efaf0 100644 --- a/render_macros/src/lib.rs +++ b/render_macros/src/lib.rs @@ -57,7 +57,7 @@ use syn::parse_macro_input; ///
/// }; /// -/// assert_eq!(rendered, r#"
"#); +/// assert_eq!(rendered, r#"
"#); /// ``` /// /// ### HTML entities can accept dashed-separated value @@ -66,10 +66,10 @@ use syn::parse_macro_input; /// # use render_macros::html; /// # use pretty_assertions::assert_eq; /// let rendered = html! { -///
+///
/// }; /// -/// assert_eq!(rendered, r#"
"#); +/// assert_eq!(rendered, r#"
"#); /// ``` /// /// ### Custom components can't accept dashed-separated values @@ -95,7 +95,7 @@ use syn::parse_macro_input; ///
/// }; /// -/// assert_eq!(rendered, r#"
"#); +/// assert_eq!(rendered, r#"
"#); /// ``` /// /// ### Punning is not supported for dashed-delimited attributes @@ -107,7 +107,7 @@ use syn::parse_macro_input; ///
/// }; /// -/// assert_eq!(rendered, r#"
"#); +/// assert_eq!(rendered, r#"
"#); /// ``` #[proc_macro] #[proc_macro_error] diff --git a/render_tests/src/lib.rs b/render_tests/src/lib.rs index 873e576..d1a9657 100644 --- a/render_tests/src/lib.rs +++ b/render_tests/src/lib.rs @@ -9,7 +9,7 @@ fn works_with_dashes() { use pretty_assertions::assert_eq; let value = render::html! {
}; - assert_eq!(value, r#"
"#); + assert_eq!(value, r#"
"#); } #[test] @@ -41,7 +41,18 @@ fn works_with_keywords() { use render::html; assert_eq!(html! { }, r#""#); - assert_eq!(html! {