diff options
| author | Yuki Okushi <huyuumi.dev@gmail.com> | 2021-03-07 10:41:18 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-03-07 10:41:18 +0900 |
| commit | 379679b913410e1bada4e754fde6e2799664fc91 (patch) | |
| tree | 9ffbd765c4a3f0247f28c4006e332e0ea50e3308 | |
| parent | a0dcfdfb7640b0e807e48d8234d41e5a3a0a7e84 (diff) | |
| parent | 173d2aaa009d7d1b76addefc204a2bde329caa83 (diff) | |
| download | rust-379679b913410e1bada4e754fde6e2799664fc91.tar.gz rust-379679b913410e1bada4e754fde6e2799664fc91.zip | |
Rollup merge of #82803 - jyn514:unversioned-files, r=GuillaumeGomez
rustdoc: Add an unstable option to print all unversioned files This allows sharing those files between different doc invocations without having to know their names ahead of time. Helps with https://github.com/rust-lang/docs.rs/issues/1302. r? ````@GuillaumeGomez```` cc ````@pietroalbini```` ````@Nemo157````
| -rw-r--r-- | src/librustdoc/clean/types.rs | 18 | ||||
| -rw-r--r-- | src/librustdoc/config.rs | 7 | ||||
| -rw-r--r-- | src/librustdoc/html/render/mod.rs | 1 | ||||
| -rw-r--r-- | src/librustdoc/html/render/write_shared.rs | 39 | ||||
| -rw-r--r-- | src/librustdoc/lib.rs | 21 | ||||
| -rw-r--r-- | src/test/run-make-fulldeps/print-unversioned-files/Makefile | 4 | ||||
| -rw-r--r-- | src/test/run-make-fulldeps/print-unversioned-files/unversioned-files.txt | 15 |
7 files changed, 72 insertions, 33 deletions
diff --git a/src/librustdoc/clean/types.rs b/src/librustdoc/clean/types.rs index e560843383e..a94ee918c24 100644 --- a/src/librustdoc/clean/types.rs +++ b/src/librustdoc/clean/types.rs @@ -1615,24 +1615,6 @@ impl PrimitiveType { CELL.get_or_init(move || { use self::PrimitiveType::*; - /// A macro to create a FxHashMap. - /// - /// Example: - /// - /// ``` - /// let letters = map!{"a" => "b", "c" => "d"}; - /// ``` - /// - /// Trailing commas are allowed. - /// Commas between elements are required (even if the expression is a block). - macro_rules! map { - ($( $key: expr => $val: expr ),* $(,)*) => {{ - let mut map = ::rustc_data_structures::fx::FxHashMap::default(); - $( map.insert($key, $val); )* - map - }} - } - let single = |a: Option<DefId>| a.into_iter().collect(); let both = |a: Option<DefId>, b: Option<DefId>| -> ArrayVec<_> { a.into_iter().chain(b).collect() diff --git a/src/librustdoc/config.rs b/src/librustdoc/config.rs index 43cddc06320..ecb6378f31f 100644 --- a/src/librustdoc/config.rs +++ b/src/librustdoc/config.rs @@ -315,6 +315,13 @@ impl Options { return Err(0); } + if matches.opt_strs("print").iter().any(|opt| opt == "unversioned-files") { + for file in crate::html::render::FILES_UNVERSIONED.keys() { + println!("{}", file); + } + return Err(0); + } + let color = config::parse_color(&matches); let (json_rendered, _artifacts) = config::parse_json(&matches); let error_format = config::parse_error_format(&matches, color, json_rendered); diff --git a/src/librustdoc/html/render/mod.rs b/src/librustdoc/html/render/mod.rs index 50cae50c2c3..9b9ec2581cf 100644 --- a/src/librustdoc/html/render/mod.rs +++ b/src/librustdoc/html/render/mod.rs @@ -33,6 +33,7 @@ mod print_item; mod write_shared; crate use context::*; +crate use write_shared::FILES_UNVERSIONED; use std::cell::{Cell, RefCell}; use std::collections::VecDeque; diff --git a/src/librustdoc/html/render/write_shared.rs b/src/librustdoc/html/render/write_shared.rs index cbf0f9a4927..02ad01aa29a 100644 --- a/src/librustdoc/html/render/write_shared.rs +++ b/src/librustdoc/html/render/write_shared.rs @@ -3,6 +3,7 @@ use std::fmt::Write; use std::fs::{self, File}; use std::io::prelude::*; use std::io::{self, BufReader}; +use std::lazy::SyncLazy as Lazy; use std::path::{Component, Path, PathBuf}; use itertools::Itertools; @@ -18,6 +19,26 @@ use crate::error::Error; use crate::formats::FormatRenderer; use crate::html::{layout, static_files}; +crate static FILES_UNVERSIONED: Lazy<FxHashMap<&str, &[u8]>> = Lazy::new(|| { + map! { + "FiraSans-Regular.woff2" => static_files::fira_sans::REGULAR2, + "FiraSans-Medium.woff2" => static_files::fira_sans::MEDIUM2, + "FiraSans-Regular.woff" => static_files::fira_sans::REGULAR, + "FiraSans-Medium.woff" => static_files::fira_sans::MEDIUM, + "FiraSans-LICENSE.txt" => static_files::fira_sans::LICENSE, + "SourceSerifPro-Regular.ttf.woff" => static_files::source_serif_pro::REGULAR, + "SourceSerifPro-Bold.ttf.woff" => static_files::source_serif_pro::BOLD, + "SourceSerifPro-It.ttf.woff" => static_files::source_serif_pro::ITALIC, + "SourceSerifPro-LICENSE.md" => static_files::source_serif_pro::LICENSE, + "SourceCodePro-Regular.woff" => static_files::source_code_pro::REGULAR, + "SourceCodePro-Semibold.woff" => static_files::source_code_pro::SEMIBOLD, + "SourceCodePro-LICENSE.txt" => static_files::source_code_pro::LICENSE, + "LICENSE-MIT.txt" => static_files::LICENSE_MIT, + "LICENSE-APACHE.txt" => static_files::LICENSE_APACHE, + "COPYRIGHT.txt" => static_files::COPYRIGHT, + } +}); + pub(super) fn write_shared( cx: &Context<'_>, krate: &Crate, @@ -212,21 +233,9 @@ themePicker.onblur = handleThemeButtonsBlur; static_files::NORMALIZE_CSS, options.enable_minification, )?; - write(cx.dst.join("FiraSans-Regular.woff2"), static_files::fira_sans::REGULAR2)?; - write(cx.dst.join("FiraSans-Medium.woff2"), static_files::fira_sans::MEDIUM2)?; - write(cx.dst.join("FiraSans-Regular.woff"), static_files::fira_sans::REGULAR)?; - write(cx.dst.join("FiraSans-Medium.woff"), static_files::fira_sans::MEDIUM)?; - write(cx.dst.join("FiraSans-LICENSE.txt"), static_files::fira_sans::LICENSE)?; - write(cx.dst.join("SourceSerifPro-Regular.ttf.woff"), static_files::source_serif_pro::REGULAR)?; - write(cx.dst.join("SourceSerifPro-Bold.ttf.woff"), static_files::source_serif_pro::BOLD)?; - write(cx.dst.join("SourceSerifPro-It.ttf.woff"), static_files::source_serif_pro::ITALIC)?; - write(cx.dst.join("SourceSerifPro-LICENSE.md"), static_files::source_serif_pro::LICENSE)?; - write(cx.dst.join("SourceCodePro-Regular.woff"), static_files::source_code_pro::REGULAR)?; - write(cx.dst.join("SourceCodePro-Semibold.woff"), static_files::source_code_pro::SEMIBOLD)?; - write(cx.dst.join("SourceCodePro-LICENSE.txt"), static_files::source_code_pro::LICENSE)?; - write(cx.dst.join("LICENSE-MIT.txt"), static_files::LICENSE_MIT)?; - write(cx.dst.join("LICENSE-APACHE.txt"), static_files::LICENSE_APACHE)?; - write(cx.dst.join("COPYRIGHT.txt"), static_files::COPYRIGHT)?; + for (file, contents) in &*FILES_UNVERSIONED { + write(cx.dst.join(file), contents)?; + } fn collect(path: &Path, krate: &str, key: &str) -> io::Result<(Vec<String>, Vec<String>)> { let mut ret = Vec::new(); diff --git a/src/librustdoc/lib.rs b/src/librustdoc/lib.rs index e447b49c11a..9e843245442 100644 --- a/src/librustdoc/lib.rs +++ b/src/librustdoc/lib.rs @@ -71,6 +71,24 @@ use rustc_session::config::{make_crate_type_option, ErrorOutputType, RustcOptGro use rustc_session::getopts; use rustc_session::{early_error, early_warn}; +/// A macro to create a FxHashMap. +/// +/// Example: +/// +/// ``` +/// let letters = map!{"a" => "b", "c" => "d"}; +/// ``` +/// +/// Trailing commas are allowed. +/// Commas between elements are required (even if the expression is a block). +macro_rules! map { + ($( $key: expr => $val: expr ),* $(,)*) => {{ + let mut map = ::rustc_data_structures::fx::FxHashMap::default(); + $( map.insert($key, $val); )* + map + }} +} + #[macro_use] mod externalfiles; @@ -506,6 +524,9 @@ fn opts() -> Vec<RustcOptGroup> { "Generate JSON file at the top level instead of generating HTML redirection files", ) }), + unstable("print", |o| { + o.optmulti("", "print", "Rustdoc information to print on stdout", "[unversioned-files]") + }), ] } diff --git a/src/test/run-make-fulldeps/print-unversioned-files/Makefile b/src/test/run-make-fulldeps/print-unversioned-files/Makefile new file mode 100644 index 00000000000..e368f61cddf --- /dev/null +++ b/src/test/run-make-fulldeps/print-unversioned-files/Makefile @@ -0,0 +1,4 @@ +-include ../tools.mk + +all: + $(RUSTDOC) -Z unstable-options --print unversioned-files | sort | diff - unversioned-files.txt diff --git a/src/test/run-make-fulldeps/print-unversioned-files/unversioned-files.txt b/src/test/run-make-fulldeps/print-unversioned-files/unversioned-files.txt new file mode 100644 index 00000000000..c5a9bf24381 --- /dev/null +++ b/src/test/run-make-fulldeps/print-unversioned-files/unversioned-files.txt @@ -0,0 +1,15 @@ +COPYRIGHT.txt +FiraSans-LICENSE.txt +FiraSans-Medium.woff +FiraSans-Medium.woff2 +FiraSans-Regular.woff +FiraSans-Regular.woff2 +LICENSE-APACHE.txt +LICENSE-MIT.txt +SourceCodePro-LICENSE.txt +SourceCodePro-Regular.woff +SourceCodePro-Semibold.woff +SourceSerifPro-Bold.ttf.woff +SourceSerifPro-It.ttf.woff +SourceSerifPro-LICENSE.md +SourceSerifPro-Regular.ttf.woff |
