Skip to content

Commit e4636e2

Browse files
committed
librustdoc: create MaybeDisplay helper for Option<T: Display> types
1 parent d88ffcd commit e4636e2

File tree

5 files changed

+22
-4
lines changed

5 files changed

+22
-4
lines changed

src/librustdoc/clean/cfg.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ use rustc_session::parse::ParseSess;
1313
use rustc_span::Span;
1414
use rustc_span::symbol::{Symbol, sym};
1515

16+
use crate::display::Joined as _;
1617
use crate::html::escape::Escape;
17-
use crate::joined::Joined as _;
1818

1919
#[cfg(test)]
2020
mod tests;

src/librustdoc/joined.rs renamed to src/librustdoc/display.rs

+18
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
//! Various utilities for working with [`fmt::Display`] implementations.
2+
13
use std::fmt::{self, Display, Formatter};
24

35
pub(crate) trait Joined: IntoIterator {
@@ -27,3 +29,19 @@ where
2729
Ok(())
2830
}
2931
}
32+
33+
pub(crate) trait MaybeDisplay {
34+
/// For a given `Option<T: Display>`, returns a `Display` implementation that will display `t` if `Some(t)`, or nothing if `None`.
35+
fn maybe_display(self) -> impl Display;
36+
}
37+
38+
impl<T: Display> MaybeDisplay for Option<T> {
39+
fn maybe_display(self) -> impl Display {
40+
fmt::from_fn(move |f| {
41+
if let Some(t) = self.as_ref() {
42+
t.fmt(f)?;
43+
}
44+
Ok(())
45+
})
46+
}
47+
}

src/librustdoc/html/format.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,11 @@ use super::url_parts_builder::{UrlPartsBuilder, estimate_item_path_byte_length};
3030
use crate::clean::types::ExternalLocation;
3131
use crate::clean::utils::find_nearest_parent_module;
3232
use crate::clean::{self, ExternalCrate, PrimitiveType};
33+
use crate::display::Joined as _;
3334
use crate::formats::cache::Cache;
3435
use crate::formats::item_type::ItemType;
3536
use crate::html::escape::{Escape, EscapeBodyText};
3637
use crate::html::render::Context;
37-
use crate::joined::Joined as _;
3838
use crate::passes::collect_intra_doc_links::UrlFragment;
3939

4040
pub(crate) fn write_str(s: &mut String, f: fmt::Arguments<'_>) {

src/librustdoc/html/render/print_item.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ use super::{
2727
};
2828
use crate::clean;
2929
use crate::config::ModuleSorting;
30+
use crate::display::Joined as _;
3031
use crate::formats::Impl;
3132
use crate::formats::item_type::ItemType;
3233
use crate::html::escape::{Escape, EscapeBodyTextWithWbr};
@@ -37,7 +38,6 @@ use crate::html::format::{
3738
use crate::html::markdown::{HeadingOffset, MarkdownSummaryLine};
3839
use crate::html::render::{document_full, document_item_info};
3940
use crate::html::url_parts_builder::UrlPartsBuilder;
40-
use crate::joined::Joined as _;
4141

4242
/// Generates a Rinja template struct for rendering items with common methods.
4343
///

src/librustdoc/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,7 @@ macro_rules! map {
106106
mod clean;
107107
mod config;
108108
mod core;
109+
mod display;
109110
mod docfs;
110111
mod doctest;
111112
mod error;
@@ -114,7 +115,6 @@ mod fold;
114115
mod formats;
115116
// used by the error-index generator, so it needs to be public
116117
pub mod html;
117-
mod joined;
118118
mod json;
119119
pub(crate) mod lint;
120120
mod markdown;

0 commit comments

Comments
 (0)