rustdoc_to_markdown: Recognize code blocks in other languages (#12484)
This PR updates `rustdoc_to_markdown` to be able to recognize code blocks using non-Rust languages. Release Notes: - N/A
This commit is contained in:
parent
a259042f92
commit
bf7c6a676a
2 changed files with 47 additions and 4 deletions
|
@ -148,10 +148,21 @@ impl MarkdownWriter {
|
||||||
.collect::<Vec<_>>()
|
.collect::<Vec<_>>()
|
||||||
})
|
})
|
||||||
.unwrap_or_default();
|
.unwrap_or_default();
|
||||||
let is_rust = classes.into_iter().any(|class| class == "rust");
|
let is_rust = classes.iter().any(|class| class == &"rust");
|
||||||
let language = if is_rust { "rs" } else { "" };
|
let language = is_rust
|
||||||
|
.then(|| "rs")
|
||||||
|
.or_else(|| {
|
||||||
|
classes.iter().find_map(|class| {
|
||||||
|
if let Some((_, language)) = class.split_once("language-") {
|
||||||
|
Some(language.trim())
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
.unwrap_or("");
|
||||||
|
|
||||||
self.push_str(&format!("\n```{language}\n"))
|
self.push_str(&format!("\n\n```{language}\n"))
|
||||||
}
|
}
|
||||||
"ul" | "ol" => self.push_newline(),
|
"ul" | "ol" => self.push_newline(),
|
||||||
"li" => self.push_str("- "),
|
"li" => self.push_str("- "),
|
||||||
|
|
|
@ -45,7 +45,7 @@ mod tests {
|
||||||
use super::*;
|
use super::*;
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_code_blocks() {
|
fn test_rust_code_block() {
|
||||||
let html = indoc! {r#"
|
let html = indoc! {r#"
|
||||||
<pre class="rust rust-example-rendered"><code><span class="kw">use </span>axum::extract::{Path, Query, Json};
|
<pre class="rust rust-example-rendered"><code><span class="kw">use </span>axum::extract::{Path, Query, Json};
|
||||||
<span class="kw">use </span>std::collections::HashMap;
|
<span class="kw">use </span>std::collections::HashMap;
|
||||||
|
@ -85,4 +85,36 @@ mod tests {
|
||||||
expected
|
expected
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_toml_code_block() {
|
||||||
|
let html = indoc! {r##"
|
||||||
|
<h2 id="required-dependencies"><a class="doc-anchor" href="#required-dependencies">§</a>Required dependencies</h2>
|
||||||
|
<p>To use axum there are a few dependencies you have to pull in as well:</p>
|
||||||
|
<div class="example-wrap"><pre class="language-toml"><code>[dependencies]
|
||||||
|
axum = "<latest-version>"
|
||||||
|
tokio = { version = "<latest-version>", features = ["full"] }
|
||||||
|
tower = "<latest-version>"
|
||||||
|
</code></pre></div>
|
||||||
|
"##};
|
||||||
|
let expected = indoc! {r#"
|
||||||
|
## Required dependencies
|
||||||
|
|
||||||
|
To use axum there are a few dependencies you have to pull in as well:
|
||||||
|
|
||||||
|
```toml
|
||||||
|
[dependencies]
|
||||||
|
axum = "<latest-version>"
|
||||||
|
tokio = { version = "<latest-version>", features = ["full"] }
|
||||||
|
tower = "<latest-version>"
|
||||||
|
|
||||||
|
```
|
||||||
|
"#}
|
||||||
|
.trim();
|
||||||
|
|
||||||
|
assert_eq!(
|
||||||
|
convert_rustdoc_to_markdown(html.as_bytes()).unwrap(),
|
||||||
|
expected
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue