1
Fork 0

librustdoc: create MaybeDisplay helper for Option<T: Display> types

This commit is contained in:
Yotam Ofek 2025-02-10 16:15:15 +00:00
parent d88ffcdb8b
commit e4636e2613
5 changed files with 22 additions and 4 deletions

View file

@ -13,8 +13,8 @@ use rustc_session::parse::ParseSess;
use rustc_span::Span;
use rustc_span::symbol::{Symbol, sym};
use crate::display::Joined as _;
use crate::html::escape::Escape;
use crate::joined::Joined as _;
#[cfg(test)]
mod tests;

View file

@ -1,3 +1,5 @@
//! Various utilities for working with [`fmt::Display`] implementations.
use std::fmt::{self, Display, Formatter};
pub(crate) trait Joined: IntoIterator {
@ -27,3 +29,19 @@ where
Ok(())
}
}
pub(crate) trait MaybeDisplay {
/// For a given `Option<T: Display>`, returns a `Display` implementation that will display `t` if `Some(t)`, or nothing if `None`.
fn maybe_display(self) -> impl Display;
}
impl<T: Display> MaybeDisplay for Option<T> {
fn maybe_display(self) -> impl Display {
fmt::from_fn(move |f| {
if let Some(t) = self.as_ref() {
t.fmt(f)?;
}
Ok(())
})
}
}

View file

@ -30,11 +30,11 @@ use super::url_parts_builder::{UrlPartsBuilder, estimate_item_path_byte_length};
use crate::clean::types::ExternalLocation;
use crate::clean::utils::find_nearest_parent_module;
use crate::clean::{self, ExternalCrate, PrimitiveType};
use crate::display::Joined as _;
use crate::formats::cache::Cache;
use crate::formats::item_type::ItemType;
use crate::html::escape::{Escape, EscapeBodyText};
use crate::html::render::Context;
use crate::joined::Joined as _;
use crate::passes::collect_intra_doc_links::UrlFragment;
pub(crate) fn write_str(s: &mut String, f: fmt::Arguments<'_>) {

View file

@ -27,6 +27,7 @@ use super::{
};
use crate::clean;
use crate::config::ModuleSorting;
use crate::display::Joined as _;
use crate::formats::Impl;
use crate::formats::item_type::ItemType;
use crate::html::escape::{Escape, EscapeBodyTextWithWbr};
@ -37,7 +38,6 @@ use crate::html::format::{
use crate::html::markdown::{HeadingOffset, MarkdownSummaryLine};
use crate::html::render::{document_full, document_item_info};
use crate::html::url_parts_builder::UrlPartsBuilder;
use crate::joined::Joined as _;
/// Generates a Rinja template struct for rendering items with common methods.
///

View file

@ -106,6 +106,7 @@ macro_rules! map {
mod clean;
mod config;
mod core;
mod display;
mod docfs;
mod doctest;
mod error;
@ -114,7 +115,6 @@ mod fold;
mod formats;
// used by the error-index generator, so it needs to be public
pub mod html;
mod joined;
mod json;
pub(crate) mod lint;
mod markdown;