mirror of
https://github.com/rust-lang/rust-analyzer
synced 2024-12-30 15:03:42 +00:00
35 lines
1.2 KiB
Rust
35 lines
1.2 KiB
Rust
|
//! Rustdoc specific doc comment handling
|
||
|
|
||
|
// stripped down version of https://github.com/rust-lang/rust/blob/392ba2ba1a7d6c542d2459fb8133bebf62a4a423/src/librustdoc/html/markdown.rs#L810-L933
|
||
|
pub fn is_rust_fence(s: &str) -> bool {
|
||
|
let mut seen_rust_tags = false;
|
||
|
let mut seen_other_tags = false;
|
||
|
|
||
|
let tokens = s
|
||
|
.trim()
|
||
|
.split(|c| c == ',' || c == ' ' || c == '\t')
|
||
|
.map(str::trim)
|
||
|
.filter(|t| !t.is_empty());
|
||
|
|
||
|
for token in tokens {
|
||
|
match token {
|
||
|
"should_panic" | "no_run" | "ignore" | "allow_fail" => {
|
||
|
seen_rust_tags = !seen_other_tags
|
||
|
}
|
||
|
"rust" => seen_rust_tags = true,
|
||
|
"test_harness" | "compile_fail" => seen_rust_tags = !seen_other_tags || seen_rust_tags,
|
||
|
x if x.starts_with("edition") => {}
|
||
|
x if x.starts_with('E') && x.len() == 5 => {
|
||
|
if x[1..].parse::<u32>().is_ok() {
|
||
|
seen_rust_tags = !seen_other_tags || seen_rust_tags;
|
||
|
} else {
|
||
|
seen_other_tags = true;
|
||
|
}
|
||
|
}
|
||
|
_ => seen_other_tags = true,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
!seen_other_tags || seen_rust_tags
|
||
|
}
|