",
match tooltip {
- Tooltip::Ignore => " ignore",
+ Tooltip::IgnoreAll | Tooltip::IgnoreSome(_) => " ignore",
Tooltip::CompileFail => " compile_fail",
Tooltip::ShouldPanic => " should_panic",
Tooltip::Edition(_) => " edition",
@@ -80,18 +81,46 @@ fn write_header(
);
if tooltip != Tooltip::None {
- let edition_code;
+ // variable for extending lifetimes of temporaries
+ let tmp;
write_str(
out,
format_args!(
"
ⓘ",
match tooltip {
- Tooltip::Ignore => "This example is not tested",
+ Tooltip::IgnoreAll => "This example is not tested",
+ Tooltip::IgnoreSome(platforms) => {
+ tmp = format!(
+ "This example is not tested on {}",
+ fmt::from_fn(|f| {
+ match platforms.len() {
+ 0 => unreachable!(),
+ 1 => f.write_str(&platforms[0]),
+ 2 => write!(f, "{} or {}", &platforms[0], &platforms[1]),
+ _ => {
+ for (i, plat) in platforms.iter().enumerate() {
+ match (platforms.len() - 2).cmp(&i) {
+ std::cmp::Ordering::Greater => {
+ write!(f, "{}, ", plat)?
+ }
+ std::cmp::Ordering::Equal => {
+ write!(f, "{}, or ", plat)?
+ }
+ std::cmp::Ordering::Less => f.write_str(&plat)?,
+ }
+ }
+ Ok(())
+ }
+ }
+ })
+ );
+ &tmp
+ }
Tooltip::CompileFail => "This example deliberately fails to compile",
Tooltip::ShouldPanic => "This example panics",
Tooltip::Edition(edition) => {
- edition_code = format!("This example runs with edition {edition}");
- &edition_code
+ tmp = format!("This example runs with edition {edition}");
+ &tmp
}
Tooltip::None => unreachable!(),
}
diff --git a/src/librustdoc/html/markdown.rs b/src/librustdoc/html/markdown.rs
index ad7dfafd90c7..987b92fa4e23 100644
--- a/src/librustdoc/html/markdown.rs
+++ b/src/librustdoc/html/markdown.rs
@@ -320,8 +320,10 @@ fn next(&mut self) -> Option
{
))
});
- let tooltip = if ignore != Ignore::None {
- highlight::Tooltip::Ignore
+ let tooltip = if ignore == Ignore::All {
+ highlight::Tooltip::IgnoreAll
+ } else if let Ignore::Some(platforms) = ignore {
+ highlight::Tooltip::IgnoreSome(platforms)
} else if compile_fail {
highlight::Tooltip::CompileFail
} else if should_panic {
diff --git a/tests/rustdoc/doctest/ignore-sometimes.rs b/tests/rustdoc/doctest/ignore-sometimes.rs
new file mode 100644
index 000000000000..0f8586d221c1
--- /dev/null
+++ b/tests/rustdoc/doctest/ignore-sometimes.rs
@@ -0,0 +1,23 @@
+#![crate_name = "foo"]
+
+// test for https://github.com/rust-lang/rust/issues/141092
+
+//@ has 'foo/fn.f.html' '//a[@title="This example is not tested on wasm"]' 'ⓘ'
+/// Example
+///
+/// ```ignore-wasm
+/// let x = 1;
+/// ```
+pub fn f() {}
+
+//@ has 'foo/fn.g.html' '//a[@title="This example is not tested on wasm or windows"]' 'ⓘ'
+/// ```ignore-wasm,ignore-windows
+/// let x = 1;
+/// ```
+pub fn g() {}
+
+//@ has 'foo/fn.h.html' '//a[@title="This example is not tested on wasm, windows, or unix"]' 'ⓘ'
+/// ```ignore-wasm,ignore-windows,ignore-unix
+/// let x = 1;
+/// ```
+pub fn h() {}