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() {

`