From 0254fe1f814e8bab6eaa28bfa89207b21c5b771b Mon Sep 17 00:00:00 2001 From: Chris Wong <lambda.fairy@gmail.com> Date: Thu, 22 Aug 2024 15:43:22 +1000 Subject: [PATCH] Fix syntax highlighting for `no_run` blocks (#439) --- docs/src/bin/build_page.rs | 31 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/docs/src/bin/build_page.rs b/docs/src/bin/build_page.rs index 4533a39..263eb2f 100644 --- a/docs/src/bin/build_page.rs +++ b/docs/src/bin/build_page.rs @@ -63,7 +63,7 @@ fn build_page( fn postprocess<'a>(content: &'a AstNode<'a>) { lower_headings(content); rewrite_md_links(content); - strip_hidden_code(content); + strip_rustdoc_idioms(content); } fn lower_headings<'a>(root: &'a AstNode<'a>) { @@ -87,25 +87,24 @@ fn rewrite_md_links<'a>(root: &'a AstNode<'a>) { } } -fn strip_hidden_code<'a>(root: &'a AstNode<'a>) { +fn strip_rustdoc_idioms<'a>(root: &'a AstNode<'a>) { for node in root.descendants() { let mut data = node.data.borrow_mut(); if let NodeValue::CodeBlock(NodeCodeBlock { info, literal, .. }) = &mut data.value { - if info.split(',').map(str::trim).all(|lang| lang != "rust") { - continue; + // Rustdoc uses commas, but CommonMark uses spaces + *info = info.replace(",", " "); + + // Rustdoc uses "#" to represent hidden setup code + if info.split_whitespace().next() == Some("rust") { + *literal = literal + .split('\n') + .filter(|line| { + let line = line.trim(); + line != "#" && !line.starts_with("# ") + }) + .collect::<Vec<_>>() + .join("\n"); } - *literal = strip_hidden_code_inner(literal); } } } - -fn strip_hidden_code_inner(literal: &str) -> String { - let lines = literal - .split('\n') - .filter(|line| { - let line = line.trim(); - line != "#" && !line.starts_with("# ") - }) - .collect::<Vec<_>>(); - lines.join("\n") -}