Skip to content

Commit 150f9c8

Browse files
committed
Add configuration option to disable the default hidelines feature for rust
1 parent 0722d81 commit 150f9c8

File tree

2 files changed

+45
-2
lines changed

2 files changed

+45
-2
lines changed

crates/mdbook-core/src/config.rs

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -560,14 +560,25 @@ impl Default for Playground {
560560
}
561561

562562
/// Configuration for tweaking how the HTML renderer handles code blocks.
563-
#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
563+
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
564564
#[serde(default, rename_all = "kebab-case", deny_unknown_fields)]
565565
#[non_exhaustive]
566566
pub struct Code {
567+
/// Enable or disable the default line hiding with '#' for rust. Default: `true`.
568+
pub default_hidelines: bool,
567569
/// A prefix string to hide lines per language (one or more chars).
568570
pub hidelines: HashMap<String, String>,
569571
}
570572

573+
impl Default for Code {
574+
fn default() -> Code {
575+
Code {
576+
default_hidelines: true,
577+
hidelines: HashMap::<String, String>::default(),
578+
}
579+
}
580+
}
581+
571582
/// Configuration of the search functionality of the HTML renderer.
572583
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
573584
#[serde(default, rename_all = "kebab-case", deny_unknown_fields)]

crates/mdbook-html/src/html_handlebars/hbs_renderer.rs

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -901,7 +901,7 @@ fn hide_lines(html: &str, code_config: &Code) -> String {
901901
let classes = &caps[2];
902902
let code = &caps[3];
903903

904-
if classes.contains("language-rust") {
904+
if classes.contains("language-rust") && code_config.default_hidelines {
905905
format!(
906906
"<code class=\"{}\">{}</code>",
907907
classes,
@@ -1311,6 +1311,38 @@ mod tests {
13111311
}
13121312
}
13131313

1314+
#[test]
1315+
fn no_default_hide_lines() {
1316+
let inputs = [
1317+
(
1318+
"<pre class=\"playground\"><code class=\"language-rust\">\n# #![allow(unused)]\n#fn main() {\nx()\n#}</code></pre>",
1319+
"<pre class=\"playground\"><code class=\"language-rust\">\n# #![allow(unused)]\n#fn main() {\nx()\n#}</code></pre>",
1320+
),
1321+
(
1322+
"<pre class=\"playground\"><code class=\"language-rust editable\">let s = \"foo\n # bar\n\";</code></pre>",
1323+
"<pre class=\"playground\"><code class=\"language-rust editable\">let s = \"foo\n # bar\n\";</code></pre>",
1324+
),
1325+
(
1326+
"<pre class=\"playground\"><code class=\"language-rust editable\">let s = \"foo\n ## bar\n\";</code></pre>",
1327+
"<pre class=\"playground\"><code class=\"language-rust editable\">let s = \"foo\n ## bar\n\";</code></pre>",
1328+
),
1329+
(
1330+
"<pre class=\"playground\"><code class=\"language-rust editable\">let s = \"foo\n # bar\n#\n\";</code></pre>",
1331+
"<pre class=\"playground\"><code class=\"language-rust editable\">let s = \"foo\n # bar\n#\n\";</code></pre>",
1332+
),
1333+
(
1334+
"<code class=\"language-rust ignore\">let s = \"foo\n # bar\n\";</code>",
1335+
"<code class=\"language-rust ignore\">let s = \"foo\n # bar\n\";</code>",
1336+
),
1337+
];
1338+
let mut code = Code::default();
1339+
code.default_hidelines = false;
1340+
for (src, should_be) in &inputs {
1341+
let got = hide_lines(src, &code);
1342+
assert_eq!(&*got, *should_be);
1343+
}
1344+
}
1345+
13141346
#[test]
13151347
fn test_json_direction() {
13161348
assert_eq!(json!(TextDirection::RightToLeft), json!("rtl"));

0 commit comments

Comments
 (0)