@@ -904,13 +904,16 @@ fn hide_lines(content: &str) -> String {
904
904
}
905
905
906
906
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 " } ;
908
911
if let Some ( caps) = BORING_LINES_REGEX . captures ( line) {
909
912
if & caps[ 2 ] == "#" {
910
913
result += & caps[ 1 ] ;
911
914
result += & caps[ 2 ] ;
912
915
result += & caps[ 3 ] ;
913
- result += " \n " ;
916
+ result += newline ;
914
917
continue ;
915
918
} else if & caps[ 2 ] != "!" && & caps[ 2 ] != "[" {
916
919
result += "<span class=\" boring\" >" ;
@@ -919,13 +922,13 @@ fn hide_lines(content: &str) -> String {
919
922
result += & caps[ 2 ] ;
920
923
}
921
924
result += & caps[ 3 ] ;
922
- result += " \n " ;
925
+ result += newline ;
923
926
result += "</span>" ;
924
927
continue ;
925
928
}
926
929
}
927
930
result += line;
928
- result += " \n " ;
931
+ result += newline ;
929
932
}
930
933
result
931
934
}
@@ -1005,19 +1008,19 @@ mod tests {
1005
1008
fn add_playground ( ) {
1006
1009
let inputs = [
1007
1010
( "<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>" ) ,
1009
1012
( "<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>" ) ,
1011
1014
( "<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>" ) ,
1013
1016
( "<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>" ) ,
1015
1018
( "<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>" ) ,
1017
1020
( "<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>" ) ,
1019
1022
( "<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>" ) ,
1021
1024
] ;
1022
1025
for ( src, should_be) in & inputs {
1023
1026
let got = add_playground_pre (
@@ -1035,13 +1038,13 @@ mod tests {
1035
1038
fn add_playground_edition2015 ( ) {
1036
1039
let inputs = [
1037
1040
( "<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>" ) ,
1039
1042
( "<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>" ) ,
1041
1044
( "<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>" ) ,
1043
1046
( "<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>" ) ,
1045
1048
] ;
1046
1049
for ( src, should_be) in & inputs {
1047
1050
let got = add_playground_pre (
@@ -1059,13 +1062,13 @@ mod tests {
1059
1062
fn add_playground_edition2018 ( ) {
1060
1063
let inputs = [
1061
1064
( "<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>" ) ,
1063
1066
( "<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>" ) ,
1065
1068
( "<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>" ) ,
1067
1070
( "<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>" ) ,
1069
1072
] ;
1070
1073
for ( src, should_be) in & inputs {
1071
1074
let got = add_playground_pre (
@@ -1083,13 +1086,13 @@ mod tests {
1083
1086
fn add_playground_edition2021 ( ) {
1084
1087
let inputs = [
1085
1088
( "<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>" ) ,
1087
1090
( "<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>" ) ,
1089
1092
( "<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>" ) ,
1091
1094
( "<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>" ) ,
1093
1096
] ;
1094
1097
for ( src, should_be) in & inputs {
1095
1098
let got = add_playground_pre (
0 commit comments