Skip to content

Commit 492d372

Browse files
committed
librustdoc: create MaybeDisplay helper for Option<T: Display> types
1 parent 80c0919 commit 492d372

File tree

7 files changed

+28
-4
lines changed

7 files changed

+28
-4
lines changed

src/librustdoc/clean/cfg.rs

Lines changed: 1 addition & 1 deletion
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;
File renamed without changes.

src/librustdoc/display/maybe.rs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
use std::fmt::{self, Display};
2+
3+
pub(crate) trait MaybeDisplay {
4+
/// For a given `Option<T: Display>`, returns a `Display` implementation that will display `t` if `Some(t)`, or nothing if `None`.
5+
fn maybe_display(self) -> impl Display;
6+
}
7+
8+
impl<T: Display> MaybeDisplay for Option<T> {
9+
fn maybe_display(self) -> impl Display {
10+
fmt::from_fn(move |f| {
11+
if let Some(t) = self.as_ref() {
12+
t.fmt(f)?;
13+
}
14+
Ok(())
15+
})
16+
}
17+
}

src/librustdoc/display/mod.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
//! Various utilities for working with [`fmt::Display`](std::fmt::Display) implementations.
2+
3+
mod joined;
4+
mod maybe;
5+
6+
pub(crate) use self::joined::Joined;
7+
pub(crate) use self::maybe::MaybeDisplay;

src/librustdoc/html/format.rs

Lines changed: 1 addition & 1 deletion
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) trait Print {

src/librustdoc/html/render/print_item.rs

Lines changed: 1 addition & 1 deletion
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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@ macro_rules! map {
105105
mod clean;
106106
mod config;
107107
mod core;
108+
mod display;
108109
mod docfs;
109110
mod doctest;
110111
mod error;
@@ -113,7 +114,6 @@ mod fold;
113114
mod formats;
114115
// used by the error-index generator, so it needs to be public
115116
pub mod html;
116-
mod joined;
117117
mod json;
118118
pub(crate) mod lint;
119119
mod markdown;

0 commit comments

Comments
 (0)