@@ -903,28 +903,42 @@ 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 ( ) ;
907
+ let last_line = lines. next_back ( ) ;
908
+ let mut handle_line = |line : & str , newline : & str | {
907
909
if let Some ( caps) = BORING_LINES_REGEX . captures ( line) {
908
910
if & caps[ 2 ] == "#" {
909
911
result += & caps[ 1 ] ;
910
912
result += & caps[ 2 ] ;
911
913
result += & caps[ 3 ] ;
912
914
result += "\n " ;
913
- continue ;
914
- } else if & caps[ 2 ] != "!" && & caps[ 2 ] != "[" {
915
+ return ;
916
+ }
917
+
918
+ if & caps[ 2 ] != "!" && & caps[ 2 ] != "[" {
915
919
result += "<span class=\" boring\" >" ;
916
920
result += & caps[ 1 ] ;
917
921
if & caps[ 2 ] != " " {
918
922
result += & caps[ 2 ] ;
919
923
}
920
924
result += & caps[ 3 ] ;
921
- result += " \n " ;
925
+ result += newline ;
922
926
result += "</span>" ;
923
- continue ;
927
+ return ;
924
928
}
925
929
}
930
+
926
931
result += line;
927
- result += "\n " ;
932
+ result += newline;
933
+ } ;
934
+
935
+ // Iterate over all lines except the last:
936
+ for line in lines {
937
+ handle_line ( line, "\n " ) ;
938
+ }
939
+ // Handle the last line, if any:
940
+ if let Some ( line) = last_line {
941
+ handle_line ( line, "" ) ;
928
942
}
929
943
result
930
944
}
@@ -1004,19 +1018,19 @@ mod tests {
1004
1018
fn add_playground ( ) {
1005
1019
let inputs = [
1006
1020
( "<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>" ) ,
1021
+ "<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
1022
( "<code class=\" language-rust\" >fn main() {}</code>" ,
1009
- "<pre class=\" playground\" ><code class=\" language-rust\" >fn main() {}\n </code></pre>" ) ,
1023
+ "<pre class=\" playground\" ><code class=\" language-rust\" >fn main() {}</code></pre>" ) ,
1010
1024
( "<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>" ) ,
1025
+ "<pre class=\" playground\" ><code class=\" language-rust editable\" >let s = \" foo\n <span class=\" boring\" > bar\n </span>\" ;</code></pre>" ) ,
1012
1026
( "<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>" ) ,
1027
+ "<pre class=\" playground\" ><code class=\" language-rust editable\" >let s = \" foo\n # bar\n \" ;</code></pre>" ) ,
1014
1028
( "<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>" ) ,
1029
+ "<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
1030
( "<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>" ) ,
1031
+ "<code class=\" language-rust ignore\" >let s = \" foo\n <span class=\" boring\" > bar\n </span>\" ;</code>" ) ,
1018
1032
( "<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>" ) ,
1033
+ "<pre class=\" playground\" ><code class=\" language-rust editable\" >#![no_std]\n let s = \" foo\" ;\n #[some_attr]</code></pre>" ) ,
1020
1034
] ;
1021
1035
for ( src, should_be) in & inputs {
1022
1036
let got = add_playground_pre (
@@ -1034,13 +1048,13 @@ mod tests {
1034
1048
fn add_playground_edition2015 ( ) {
1035
1049
let inputs = [
1036
1050
( "<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>" ) ,
1051
+ "<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
1052
( "<code class=\" language-rust\" >fn main() {}</code>" ,
1039
- "<pre class=\" playground\" ><code class=\" language-rust edition2015\" >fn main() {}\n </code></pre>" ) ,
1053
+ "<pre class=\" playground\" ><code class=\" language-rust edition2015\" >fn main() {}</code></pre>" ) ,
1040
1054
( "<code class=\" language-rust edition2015\" >fn main() {}</code>" ,
1041
- "<pre class=\" playground\" ><code class=\" language-rust edition2015\" >fn main() {}\n </code></pre>" ) ,
1055
+ "<pre class=\" playground\" ><code class=\" language-rust edition2015\" >fn main() {}</code></pre>" ) ,
1042
1056
( "<code class=\" language-rust edition2018\" >fn main() {}</code>" ,
1043
- "<pre class=\" playground\" ><code class=\" language-rust edition2018\" >fn main() {}\n </code></pre>" ) ,
1057
+ "<pre class=\" playground\" ><code class=\" language-rust edition2018\" >fn main() {}</code></pre>" ) ,
1044
1058
] ;
1045
1059
for ( src, should_be) in & inputs {
1046
1060
let got = add_playground_pre (
@@ -1058,13 +1072,13 @@ mod tests {
1058
1072
fn add_playground_edition2018 ( ) {
1059
1073
let inputs = [
1060
1074
( "<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>" ) ,
1075
+ "<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
1076
( "<code class=\" language-rust\" >fn main() {}</code>" ,
1063
- "<pre class=\" playground\" ><code class=\" language-rust edition2018\" >fn main() {}\n </code></pre>" ) ,
1077
+ "<pre class=\" playground\" ><code class=\" language-rust edition2018\" >fn main() {}</code></pre>" ) ,
1064
1078
( "<code class=\" language-rust edition2015\" >fn main() {}</code>" ,
1065
- "<pre class=\" playground\" ><code class=\" language-rust edition2015\" >fn main() {}\n </code></pre>" ) ,
1079
+ "<pre class=\" playground\" ><code class=\" language-rust edition2015\" >fn main() {}</code></pre>" ) ,
1066
1080
( "<code class=\" language-rust edition2018\" >fn main() {}</code>" ,
1067
- "<pre class=\" playground\" ><code class=\" language-rust edition2018\" >fn main() {}\n </code></pre>" ) ,
1081
+ "<pre class=\" playground\" ><code class=\" language-rust edition2018\" >fn main() {}</code></pre>" ) ,
1068
1082
] ;
1069
1083
for ( src, should_be) in & inputs {
1070
1084
let got = add_playground_pre (
@@ -1082,13 +1096,13 @@ mod tests {
1082
1096
fn add_playground_edition2021 ( ) {
1083
1097
let inputs = [
1084
1098
( "<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>" ) ,
1099
+ "<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
1100
( "<code class=\" language-rust\" >fn main() {}</code>" ,
1087
- "<pre class=\" playground\" ><code class=\" language-rust edition2021\" >fn main() {}\n </code></pre>" ) ,
1101
+ "<pre class=\" playground\" ><code class=\" language-rust edition2021\" >fn main() {}</code></pre>" ) ,
1088
1102
( "<code class=\" language-rust edition2015\" >fn main() {}</code>" ,
1089
- "<pre class=\" playground\" ><code class=\" language-rust edition2015\" >fn main() {}\n </code></pre>" ) ,
1103
+ "<pre class=\" playground\" ><code class=\" language-rust edition2015\" >fn main() {}</code></pre>" ) ,
1090
1104
( "<code class=\" language-rust edition2018\" >fn main() {}</code>" ,
1091
- "<pre class=\" playground\" ><code class=\" language-rust edition2018\" >fn main() {}\n </code></pre>" ) ,
1105
+ "<pre class=\" playground\" ><code class=\" language-rust edition2018\" >fn main() {}</code></pre>" ) ,
1092
1106
] ;
1093
1107
for ( src, should_be) in & inputs {
1094
1108
let got = add_playground_pre (
0 commit comments