@@ -904,13 +904,16 @@ fn hide_lines(content: &str) -> String {
904904 }
905905
906906 let mut result = String :: with_capacity ( content. len ( ) ) ;
907- for line in content. lines ( ) {
907+ let mut lines = content. lines ( ) . peekable ( ) ;
908+ while let Some ( line) = lines. next ( ) {
909+ // Don't include newline on the last line.
910+ let newline = if lines. peek ( ) . is_none ( ) { "" } else { "\n " } ;
908911 if let Some ( caps) = BORING_LINES_REGEX . captures ( line) {
909912 if & caps[ 2 ] == "#" {
910913 result += & caps[ 1 ] ;
911914 result += & caps[ 2 ] ;
912915 result += & caps[ 3 ] ;
913- result += " \n " ;
916+ result += newline ;
914917 continue ;
915918 } else if & caps[ 2 ] != "!" && & caps[ 2 ] != "[" {
916919 result += "<span class=\" boring\" >" ;
@@ -919,13 +922,13 @@ fn hide_lines(content: &str) -> String {
919922 result += & caps[ 2 ] ;
920923 }
921924 result += & caps[ 3 ] ;
922- result += " \n " ;
925+ result += newline ;
923926 result += "</span>" ;
924927 continue ;
925928 }
926929 }
927930 result += line;
928- result += " \n " ;
931+ result += newline ;
929932 }
930933 result
931934}
@@ -1005,19 +1008,19 @@ mod tests {
10051008 fn add_playground ( ) {
10061009 let inputs = [
10071010 ( "<code class=\" language-rust\" >x()</code>" ,
1008- "<pre class=\" playground\" ><code class=\" language-rust\" ><span class=\" boring\" >#![allow(unused)]\n </span><span class=\" boring\" >fn main() {\n </span>x()\n <span class=\" boring\" >}\n </span></code></pre>" ) ,
1011+ "<pre class=\" playground\" ><code class=\" language-rust\" ><span class=\" boring\" >#![allow(unused)]\n </span><span class=\" boring\" >fn main() {\n </span>x()\n <span class=\" boring\" >}</span></code></pre>" ) ,
10091012 ( "<code class=\" language-rust\" >fn main() {}</code>" ,
1010- "<pre class=\" playground\" ><code class=\" language-rust\" >fn main() {}\n </code></pre>" ) ,
1013+ "<pre class=\" playground\" ><code class=\" language-rust\" >fn main() {}</code></pre>" ) ,
10111014 ( "<code class=\" language-rust editable\" >let s = \" foo\n # bar\n \" ;</code>" ,
1012- "<pre class=\" playground\" ><code class=\" language-rust editable\" >let s = \" foo\n <span class=\" boring\" > bar\n </span>\" ;\n </code></pre>" ) ,
1015+ "<pre class=\" playground\" ><code class=\" language-rust editable\" >let s = \" foo\n <span class=\" boring\" > bar\n </span>\" ;</code></pre>" ) ,
10131016 ( "<code class=\" language-rust editable\" >let s = \" foo\n ## bar\n \" ;</code>" ,
1014- "<pre class=\" playground\" ><code class=\" language-rust editable\" >let s = \" foo\n # bar\n \" ;\n </code></pre>" ) ,
1017+ "<pre class=\" playground\" ><code class=\" language-rust editable\" >let s = \" foo\n # bar\n \" ;</code></pre>" ) ,
10151018 ( "<code class=\" language-rust editable\" >let s = \" foo\n # bar\n #\n \" ;</code>" ,
1016- "<pre class=\" playground\" ><code class=\" language-rust editable\" >let s = \" foo\n <span class=\" boring\" > bar\n </span><span class=\" boring\" >\n </span>\" ;\n </code></pre>" ) ,
1019+ "<pre class=\" playground\" ><code class=\" language-rust editable\" >let s = \" foo\n <span class=\" boring\" > bar\n </span><span class=\" boring\" >\n </span>\" ;</code></pre>" ) ,
10171020 ( "<code class=\" language-rust ignore\" >let s = \" foo\n # bar\n \" ;</code>" ,
1018- "<code class=\" language-rust ignore\" >let s = \" foo\n <span class=\" boring\" > bar\n </span>\" ;\n </code>" ) ,
1021+ "<code class=\" language-rust ignore\" >let s = \" foo\n <span class=\" boring\" > bar\n </span>\" ;</code>" ) ,
10191022 ( "<code class=\" language-rust editable\" >#![no_std]\n let s = \" foo\" ;\n #[some_attr]</code>" ,
1020- "<pre class=\" playground\" ><code class=\" language-rust editable\" >#![no_std]\n let s = \" foo\" ;\n #[some_attr]\n </code></pre>" ) ,
1023+ "<pre class=\" playground\" ><code class=\" language-rust editable\" >#![no_std]\n let s = \" foo\" ;\n #[some_attr]</code></pre>" ) ,
10211024 ] ;
10221025 for ( src, should_be) in & inputs {
10231026 let got = add_playground_pre (
@@ -1035,13 +1038,13 @@ mod tests {
10351038 fn add_playground_edition2015 ( ) {
10361039 let inputs = [
10371040 ( "<code class=\" language-rust\" >x()</code>" ,
1038- "<pre class=\" playground\" ><code class=\" language-rust edition2015\" ><span class=\" boring\" >#![allow(unused)]\n </span><span class=\" boring\" >fn main() {\n </span>x()\n <span class=\" boring\" >}\n </span></code></pre>" ) ,
1041+ "<pre class=\" playground\" ><code class=\" language-rust edition2015\" ><span class=\" boring\" >#![allow(unused)]\n </span><span class=\" boring\" >fn main() {\n </span>x()\n <span class=\" boring\" >}</span></code></pre>" ) ,
10391042 ( "<code class=\" language-rust\" >fn main() {}</code>" ,
1040- "<pre class=\" playground\" ><code class=\" language-rust edition2015\" >fn main() {}\n </code></pre>" ) ,
1043+ "<pre class=\" playground\" ><code class=\" language-rust edition2015\" >fn main() {}</code></pre>" ) ,
10411044 ( "<code class=\" language-rust edition2015\" >fn main() {}</code>" ,
1042- "<pre class=\" playground\" ><code class=\" language-rust edition2015\" >fn main() {}\n </code></pre>" ) ,
1045+ "<pre class=\" playground\" ><code class=\" language-rust edition2015\" >fn main() {}</code></pre>" ) ,
10431046 ( "<code class=\" language-rust edition2018\" >fn main() {}</code>" ,
1044- "<pre class=\" playground\" ><code class=\" language-rust edition2018\" >fn main() {}\n </code></pre>" ) ,
1047+ "<pre class=\" playground\" ><code class=\" language-rust edition2018\" >fn main() {}</code></pre>" ) ,
10451048 ] ;
10461049 for ( src, should_be) in & inputs {
10471050 let got = add_playground_pre (
@@ -1059,13 +1062,13 @@ mod tests {
10591062 fn add_playground_edition2018 ( ) {
10601063 let inputs = [
10611064 ( "<code class=\" language-rust\" >x()</code>" ,
1062- "<pre class=\" playground\" ><code class=\" language-rust edition2018\" ><span class=\" boring\" >#![allow(unused)]\n </span><span class=\" boring\" >fn main() {\n </span>x()\n <span class=\" boring\" >}\n </span></code></pre>" ) ,
1065+ "<pre class=\" playground\" ><code class=\" language-rust edition2018\" ><span class=\" boring\" >#![allow(unused)]\n </span><span class=\" boring\" >fn main() {\n </span>x()\n <span class=\" boring\" >}</span></code></pre>" ) ,
10631066 ( "<code class=\" language-rust\" >fn main() {}</code>" ,
1064- "<pre class=\" playground\" ><code class=\" language-rust edition2018\" >fn main() {}\n </code></pre>" ) ,
1067+ "<pre class=\" playground\" ><code class=\" language-rust edition2018\" >fn main() {}</code></pre>" ) ,
10651068 ( "<code class=\" language-rust edition2015\" >fn main() {}</code>" ,
1066- "<pre class=\" playground\" ><code class=\" language-rust edition2015\" >fn main() {}\n </code></pre>" ) ,
1069+ "<pre class=\" playground\" ><code class=\" language-rust edition2015\" >fn main() {}</code></pre>" ) ,
10671070 ( "<code class=\" language-rust edition2018\" >fn main() {}</code>" ,
1068- "<pre class=\" playground\" ><code class=\" language-rust edition2018\" >fn main() {}\n </code></pre>" ) ,
1071+ "<pre class=\" playground\" ><code class=\" language-rust edition2018\" >fn main() {}</code></pre>" ) ,
10691072 ] ;
10701073 for ( src, should_be) in & inputs {
10711074 let got = add_playground_pre (
@@ -1083,13 +1086,13 @@ mod tests {
10831086 fn add_playground_edition2021 ( ) {
10841087 let inputs = [
10851088 ( "<code class=\" language-rust\" >x()</code>" ,
1086- "<pre class=\" playground\" ><code class=\" language-rust edition2021\" ><span class=\" boring\" >#![allow(unused)]\n </span><span class=\" boring\" >fn main() {\n </span>x()\n <span class=\" boring\" >}\n </span></code></pre>" ) ,
1089+ "<pre class=\" playground\" ><code class=\" language-rust edition2021\" ><span class=\" boring\" >#![allow(unused)]\n </span><span class=\" boring\" >fn main() {\n </span>x()\n <span class=\" boring\" >}</span></code></pre>" ) ,
10871090 ( "<code class=\" language-rust\" >fn main() {}</code>" ,
1088- "<pre class=\" playground\" ><code class=\" language-rust edition2021\" >fn main() {}\n </code></pre>" ) ,
1091+ "<pre class=\" playground\" ><code class=\" language-rust edition2021\" >fn main() {}</code></pre>" ) ,
10891092 ( "<code class=\" language-rust edition2015\" >fn main() {}</code>" ,
1090- "<pre class=\" playground\" ><code class=\" language-rust edition2015\" >fn main() {}\n </code></pre>" ) ,
1093+ "<pre class=\" playground\" ><code class=\" language-rust edition2015\" >fn main() {}</code></pre>" ) ,
10911094 ( "<code class=\" language-rust edition2018\" >fn main() {}</code>" ,
1092- "<pre class=\" playground\" ><code class=\" language-rust edition2018\" >fn main() {}\n </code></pre>" ) ,
1095+ "<pre class=\" playground\" ><code class=\" language-rust edition2018\" >fn main() {}</code></pre>" ) ,
10931096 ] ;
10941097 for ( src, should_be) in & inputs {
10951098 let got = add_playground_pre (
0 commit comments