diff --git a/src/librustdoc/html/render.rs b/src/librustdoc/html/render.rs
index 866d8fe682a7b..3f2eaf8ec5527 100644
--- a/src/librustdoc/html/render.rs
+++ b/src/librustdoc/html/render.rs
@@ -1060,11 +1060,22 @@ themePicker.onblur = handleThemeButtonsBlur;
.expect("invalid osstring conversion")))
.collect::>();
files.sort_unstable_by(|a, b| a.cmp(b));
- // FIXME(imperio): we could avoid to generate "dirs" and "files" if they're empty.
- format!("{{\"name\":\"{name}\",\"dirs\":[{subs}],\"files\":[{files}]}}",
+ let subs = subs.iter().map(|s| s.to_json_string()).collect::>().join(",");
+ let dirs = if subs.is_empty() {
+ String::new()
+ } else {
+ format!(",\"dirs\":[{}]", subs)
+ };
+ let files = files.join(",");
+ let files = if files.is_empty() {
+ String::new()
+ } else {
+ format!(",\"files\":[{}]", files)
+ };
+ format!("{{\"name\":\"{name}\"{dirs}{files}}}",
name=self.elem.to_str().expect("invalid osstring conversion"),
- subs=subs.iter().map(|s| s.to_json_string()).collect::>().join(","),
- files=files.join(","))
+ dirs=dirs,
+ files=files)
}
}
diff --git a/src/librustdoc/html/static/source-script.js b/src/librustdoc/html/static/source-script.js
index 509c628ce5a46..567022b4139ad 100644
--- a/src/librustdoc/html/static/source-script.js
+++ b/src/librustdoc/html/static/source-script.js
@@ -39,28 +39,32 @@ function createDirEntry(elem, parent, fullPath, currentFile, hasFoundFile) {
children.className = "children";
var folders = document.createElement("div");
folders.className = "folders";
- for (var i = 0; i < elem.dirs.length; ++i) {
- if (createDirEntry(elem.dirs[i], folders, fullPath, currentFile,
- hasFoundFile) === true) {
- addClass(name, "expand");
- hasFoundFile = true;
+ if (elem.dirs) {
+ for (var i = 0; i < elem.dirs.length; ++i) {
+ if (createDirEntry(elem.dirs[i], folders, fullPath, currentFile,
+ hasFoundFile) === true) {
+ addClass(name, "expand");
+ hasFoundFile = true;
+ }
}
}
children.appendChild(folders);
var files = document.createElement("div");
files.className = "files";
- for (i = 0; i < elem.files.length; ++i) {
- var file = document.createElement("a");
- file.innerText = elem.files[i];
- file.href = window.rootPath + "src/" + fullPath + elem.files[i] + ".html";
- if (hasFoundFile === false &&
- currentFile === fullPath + elem.files[i]) {
- file.className = "selected";
- addClass(name, "expand");
- hasFoundFile = true;
+ if (elem.files) {
+ for (i = 0; i < elem.files.length; ++i) {
+ var file = document.createElement("a");
+ file.innerText = elem.files[i];
+ file.href = window.rootPath + "src/" + fullPath + elem.files[i] + ".html";
+ if (hasFoundFile === false &&
+ currentFile === fullPath + elem.files[i]) {
+ file.className = "selected";
+ addClass(name, "expand");
+ hasFoundFile = true;
+ }
+ files.appendChild(file);
}
- files.appendChild(file);
}
search.fullPath = fullPath;
children.appendChild(files);