Add unstable option to only emit shared/crate-specific files · notriddle/rust@f77ebd4 (original) (raw)
`@@ -13,7 +13,7 @@ use serde::Serialize;
`
13
13
``
14
14
`use super::{collect_paths_for_type, ensure_trailing_slash, Context, BASIC_KEYWORDS};
`
15
15
`use crate::clean::Crate;
`
16
``
`-
use crate::config::RenderOptions;
`
``
16
`+
use crate::config::{EmitType, RenderOptions};
`
17
17
`use crate::docfs::PathError;
`
18
18
`use crate::error::Error;
`
19
19
`use crate::formats::FormatRenderer;
`
`@@ -72,6 +72,18 @@ impl SharedResource<'_> {
`
72
72
`SharedResource::CrateSpecific { basename } => cx.suffix_path(basename),
`
73
73
`}
`
74
74
`}
`
``
75
+
``
76
`+
fn should_emit(&self, emit: &[EmitType]) -> bool {
`
``
77
`+
if emit.is_empty() {
`
``
78
`+
return true;
`
``
79
`+
}
`
``
80
`+
let kind = match self {
`
``
81
`+
SharedResource::Unversioned { .. } => EmitType::Unversioned,
`
``
82
`+
SharedResource::ToolchainSpecific { .. } => EmitType::Toolchain,
`
``
83
`+
SharedResource::CrateSpecific { .. } => EmitType::CrateSpecific,
`
``
84
`+
};
`
``
85
`+
emit.contains(&kind)
`
``
86
`+
}
`
75
87
`}
`
76
88
``
77
89
`impl Context<'_> {
`
`@@ -86,16 +98,25 @@ impl Context<'_> {
`
86
98
`self.dst.join(&filename)
`
87
99
`}
`
88
100
``
89
``
`-
fn write_shared<C: AsRef<[u8]>>(&self, resource: SharedResource<'_>, contents: C) -> Result<(), Error>
`
90
``
`-
{
`
91
``
`-
self.shared.fs.write(resource.path(self), contents)
`
``
101
`+
fn write_shared<C: AsRef<[u8]>>(
`
``
102
`+
&self,
`
``
103
`+
resource: SharedResource<'_>,
`
``
104
`+
contents: C,
`
``
105
`+
emit: &[EmitType],
`
``
106
`+
) -> Result<(), Error> {
`
``
107
`+
if resource.should_emit(emit) {
`
``
108
`+
self.shared.fs.write(resource.path(self), contents)
`
``
109
`+
} else {
`
``
110
`+
Ok(())
`
``
111
`+
}
`
92
112
`}
`
93
113
``
94
114
`fn write_minify(
`
95
115
`&self,
`
96
116
`resource: SharedResource<'_>,
`
97
117
`contents: &str,
`
98
118
`minify: bool,
`
``
119
`+
emit: &[EmitType],
`
99
120
`) -> Result<(), Error> {
`
100
121
`let tmp;
`
101
122
`let contents = if minify {
`
`@@ -111,7 +132,7 @@ impl Context<'_> {
`
111
132
` contents.as_bytes()
`
112
133
`};
`
113
134
``
114
``
`-
self.write_shared(resource, contents)
`
``
135
`+
self.write_shared(resource, contents, emit)
`
115
136
`}
`
116
137
`}
`
117
138
``
`@@ -133,10 +154,14 @@ pub(super) fn write_shared(
`
133
154
`SharedResource::ToolchainSpecific { basename: p },
`
134
155
` c,
`
135
156
` options.enable_minification,
`
``
157
`+
&options.emit,
`
136
158
`)
`
137
159
`};
`
138
``
`-
let write_toolchain =
`
139
``
`-
|p: &, c: &| cx.write_shared(SharedResource::ToolchainSpecific { basename: p }, c);
`
``
160
`+
let write_toolchain = |p: &, c: &| {
`
``
161
`+
cx.write_shared(SharedResource::ToolchainSpecific { basename: p }, c, &options.emit)
`
``
162
`+
};
`
``
163
`+
let write_crate =
`
``
164
`+
|p, c: &_| cx.write_shared(SharedResource::CrateSpecific { basename: p }, c, &options.emit);
`
140
165
``
141
166
`// Add all the static files. These may already exist, but we just
`
142
167
`// overwrite them anyway to make sure that they're fresh and up-to-date.
`
`@@ -214,7 +239,7 @@ pub(super) fn write_shared(
`
214
239
`}
`
215
240
`write_minify("normalize.css", static_files::NORMALIZE_CSS)?;
`
216
241
`for (name, contents) in &*FILES_UNVERSIONED {
`
217
``
`-
cx.write_shared(SharedResource::Unversioned { name }, contents)?;
`
``
242
`+
cx.write_shared(SharedResource::Unversioned { name }, contents, &options.emit)?;
`
218
243
`}
`
219
244
``
220
245
`fn collect(path: &Path, krate: &str, key: &str) -> io::Result<(Vec, Vec)> {
`
`@@ -354,7 +379,7 @@ pub(super) fn write_shared(
`
354
379
`"var N = null;var sourcesIndex = {{}};\n{}\ncreateSourceSidebar();\n",
`
355
380
` all_sources.join("\n")
`
356
381
`);
`
357
``
`-
cx.write_shared(SharedResource::CrateSpecific { basename: "source-files.js" }, v)?;
`
``
382
`+
write_crate("source-files.js", &v)?;
`
358
383
`}
`
359
384
``
360
385
`// Update the search index and crate list.
`
`@@ -371,12 +396,12 @@ pub(super) fn write_shared(
`
371
396
`let mut v = String::from("var searchIndex = JSON.parse('{\\n");
`
372
397
` v.push_str(&all_indexes.join(",\\n"));
`
373
398
` v.push_str("\\n}');\ninitSearch(searchIndex);");
`
374
``
`-
cx.write_shared(SharedResource::CrateSpecific { basename: "search-index.js" }, v)?;
`
``
399
`+
write_crate("search-index.js", &v)?;
`
375
400
`}
`
376
401
``
377
402
`let crate_list =
`
378
403
`format!("window.ALL_CRATES = [{}];", krates.iter().map(|k| format!(""{}"", k)).join(","));
`
379
``
`-
cx.write_shared(SharedResource::CrateSpecific { basename: "crates.js" }, crate_list)?;
`
``
404
`+
write_crate("crates.js", &crate_list)?;
`
380
405
``
381
406
`if options.enable_index_page {
`
382
407
`if let Some(index_page) = options.index_page.clone() {
`