@@ -903,13 +903,16 @@ fn hide_lines(content: &str) -> String {
903
903
}
904
904
905
905
let mut result = String :: with_capacity ( content. len ( ) ) ;
906
- for line in content. lines ( ) {
906
+ let mut lines = content. lines ( ) . peekable ( ) ;
907
+ while let Some ( line) = lines. next ( ) {
908
+ // Don't include newline on the last line.
909
+ let newline = if lines. peek ( ) . is_none ( ) { "" } else { "\n " } ;
907
910
if let Some ( caps) = BORING_LINES_REGEX . captures ( line) {
908
911
if & caps[ 2 ] == "#" {
909
912
result += & caps[ 1 ] ;
910
913
result += & caps[ 2 ] ;
911
914
result += & caps[ 3 ] ;
912
- result += " \n " ;
915
+ result += newline ;
913
916
continue ;
914
917
} else if & caps[ 2 ] != "!" && & caps[ 2 ] != "[" {
915
918
result += "<span class=\" boring\" >" ;
@@ -918,13 +921,13 @@ fn hide_lines(content: &str) -> String {
918
921
result += & caps[ 2 ] ;
919
922
}
920
923
result += & caps[ 3 ] ;
921
- result += " \n " ;
924
+ result += newline ;
922
925
result += "</span>" ;
923
926
continue ;
924
927
}
925
928
}
926
929
result += line;
927
- result += " \n " ;
930
+ result += newline ;
928
931
}
929
932
result
930
933
}
@@ -1004,19 +1007,19 @@ mod tests {
1004
1007
fn add_playground ( ) {
1005
1008
let inputs = [
1006
1009
( "<code class=\" language-rust\" >x()</code>" ,
1007
- "<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>" ) ,
1010
+ "<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>" ) ,
1008
1011
( "<code class=\" language-rust\" >fn main() {}</code>" ,
1009
- "<pre class=\" playground\" ><code class=\" language-rust\" >fn main() {}\n </code></pre>" ) ,
1012
+ "<pre class=\" playground\" ><code class=\" language-rust\" >fn main() {}</code></pre>" ) ,
1010
1013
( "<code class=\" language-rust editable\" >let s = \" foo\n # bar\n \" ;</code>" ,
1011
- "<pre class=\" playground\" ><code class=\" language-rust editable\" >let s = \" foo\n <span class=\" boring\" > bar\n </span>\" ;\n </code></pre>" ) ,
1014
+ "<pre class=\" playground\" ><code class=\" language-rust editable\" >let s = \" foo\n <span class=\" boring\" > bar\n </span>\" ;</code></pre>" ) ,
1012
1015
( "<code class=\" language-rust editable\" >let s = \" foo\n ## bar\n \" ;</code>" ,
1013
- "<pre class=\" playground\" ><code class=\" language-rust editable\" >let s = \" foo\n # bar\n \" ;\n </code></pre>" ) ,
1016
+ "<pre class=\" playground\" ><code class=\" language-rust editable\" >let s = \" foo\n # bar\n \" ;</code></pre>" ) ,
1014
1017
( "<code class=\" language-rust editable\" >let s = \" foo\n # bar\n #\n \" ;</code>" ,
1015
- "<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>" ) ,
1018
+ "<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>" ) ,
1016
1019
( "<code class=\" language-rust ignore\" >let s = \" foo\n # bar\n \" ;</code>" ,
1017
- "<code class=\" language-rust ignore\" >let s = \" foo\n <span class=\" boring\" > bar\n </span>\" ;\n </code>" ) ,
1020
+ "<code class=\" language-rust ignore\" >let s = \" foo\n <span class=\" boring\" > bar\n </span>\" ;</code>" ) ,
1018
1021
( "<code class=\" language-rust editable\" >#![no_std]\n let s = \" foo\" ;\n #[some_attr]</code>" ,
1019
- "<pre class=\" playground\" ><code class=\" language-rust editable\" >#![no_std]\n let s = \" foo\" ;\n #[some_attr]\n </code></pre>" ) ,
1022
+ "<pre class=\" playground\" ><code class=\" language-rust editable\" >#![no_std]\n let s = \" foo\" ;\n #[some_attr]</code></pre>" ) ,
1020
1023
] ;
1021
1024
for ( src, should_be) in & inputs {
1022
1025
let got = add_playground_pre (
@@ -1034,13 +1037,13 @@ mod tests {
1034
1037
fn add_playground_edition2015 ( ) {
1035
1038
let inputs = [
1036
1039
( "<code class=\" language-rust\" >x()</code>" ,
1037
- "<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>" ) ,
1040
+ "<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>" ) ,
1038
1041
( "<code class=\" language-rust\" >fn main() {}</code>" ,
1039
- "<pre class=\" playground\" ><code class=\" language-rust edition2015\" >fn main() {}\n </code></pre>" ) ,
1042
+ "<pre class=\" playground\" ><code class=\" language-rust edition2015\" >fn main() {}</code></pre>" ) ,
1040
1043
( "<code class=\" language-rust edition2015\" >fn main() {}</code>" ,
1041
- "<pre class=\" playground\" ><code class=\" language-rust edition2015\" >fn main() {}\n </code></pre>" ) ,
1044
+ "<pre class=\" playground\" ><code class=\" language-rust edition2015\" >fn main() {}</code></pre>" ) ,
1042
1045
( "<code class=\" language-rust edition2018\" >fn main() {}</code>" ,
1043
- "<pre class=\" playground\" ><code class=\" language-rust edition2018\" >fn main() {}\n </code></pre>" ) ,
1046
+ "<pre class=\" playground\" ><code class=\" language-rust edition2018\" >fn main() {}</code></pre>" ) ,
1044
1047
] ;
1045
1048
for ( src, should_be) in & inputs {
1046
1049
let got = add_playground_pre (
@@ -1058,13 +1061,13 @@ mod tests {
1058
1061
fn add_playground_edition2018 ( ) {
1059
1062
let inputs = [
1060
1063
( "<code class=\" language-rust\" >x()</code>" ,
1061
- "<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>" ) ,
1064
+ "<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>" ) ,
1062
1065
( "<code class=\" language-rust\" >fn main() {}</code>" ,
1063
- "<pre class=\" playground\" ><code class=\" language-rust edition2018\" >fn main() {}\n </code></pre>" ) ,
1066
+ "<pre class=\" playground\" ><code class=\" language-rust edition2018\" >fn main() {}</code></pre>" ) ,
1064
1067
( "<code class=\" language-rust edition2015\" >fn main() {}</code>" ,
1065
- "<pre class=\" playground\" ><code class=\" language-rust edition2015\" >fn main() {}\n </code></pre>" ) ,
1068
+ "<pre class=\" playground\" ><code class=\" language-rust edition2015\" >fn main() {}</code></pre>" ) ,
1066
1069
( "<code class=\" language-rust edition2018\" >fn main() {}</code>" ,
1067
- "<pre class=\" playground\" ><code class=\" language-rust edition2018\" >fn main() {}\n </code></pre>" ) ,
1070
+ "<pre class=\" playground\" ><code class=\" language-rust edition2018\" >fn main() {}</code></pre>" ) ,
1068
1071
] ;
1069
1072
for ( src, should_be) in & inputs {
1070
1073
let got = add_playground_pre (
@@ -1082,13 +1085,13 @@ mod tests {
1082
1085
fn add_playground_edition2021 ( ) {
1083
1086
let inputs = [
1084
1087
( "<code class=\" language-rust\" >x()</code>" ,
1085
- "<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>" ) ,
1088
+ "<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>" ) ,
1086
1089
( "<code class=\" language-rust\" >fn main() {}</code>" ,
1087
- "<pre class=\" playground\" ><code class=\" language-rust edition2021\" >fn main() {}\n </code></pre>" ) ,
1090
+ "<pre class=\" playground\" ><code class=\" language-rust edition2021\" >fn main() {}</code></pre>" ) ,
1088
1091
( "<code class=\" language-rust edition2015\" >fn main() {}</code>" ,
1089
- "<pre class=\" playground\" ><code class=\" language-rust edition2015\" >fn main() {}\n </code></pre>" ) ,
1092
+ "<pre class=\" playground\" ><code class=\" language-rust edition2015\" >fn main() {}</code></pre>" ) ,
1090
1093
( "<code class=\" language-rust edition2018\" >fn main() {}</code>" ,
1091
- "<pre class=\" playground\" ><code class=\" language-rust edition2018\" >fn main() {}\n </code></pre>" ) ,
1094
+ "<pre class=\" playground\" ><code class=\" language-rust edition2018\" >fn main() {}</code></pre>" ) ,
1092
1095
] ;
1093
1096
for ( src, should_be) in & inputs {
1094
1097
let got = add_playground_pre (
0 commit comments