Skip to content

Commit 9eb336a

Browse files
committed
rustdoc: Get rid of allPaths global variable by merging it into searchIndex.
1 parent f6854ab commit 9eb336a

File tree

2 files changed

+34
-19
lines changed

2 files changed

+34
-19
lines changed

src/librustdoc/html/render.rs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -308,7 +308,7 @@ pub fn run(mut krate: clean::Crate, dst: Path) -> io::IoResult<()> {
308308
// Publish the search index
309309
let index = {
310310
let mut w = MemWriter::new();
311-
try!(write!(&mut w, "searchIndex['{}'] = [", krate.name));
311+
try!(write!(&mut w, r#"searchIndex['{}'] = \{"items":["#, krate.name));
312312
for (i, item) in cache.search_index.iter().enumerate() {
313313
if i > 0 {
314314
try!(write!(&mut w, ","));
@@ -325,8 +325,7 @@ pub fn run(mut krate: clean::Crate, dst: Path) -> io::IoResult<()> {
325325
}
326326
try!(write!(&mut w, "]"));
327327
}
328-
try!(write!(&mut w, "];"));
329-
try!(write!(&mut w, "allPaths['{}'] = [", krate.name));
328+
try!(write!(&mut w, r#"],"paths":["#));
330329
for (i, &nodeid) in pathid_to_nodeid.iter().enumerate() {
331330
let &(ref fqp, short) = cache.paths.find(&nodeid).unwrap();
332331
if i > 0 {
@@ -335,7 +334,7 @@ pub fn run(mut krate: clean::Crate, dst: Path) -> io::IoResult<()> {
335334
try!(write!(&mut w, r#"[{:u},"{}"]"#,
336335
short, *fqp.last().unwrap()));
337336
}
338-
try!(write!(&mut w, "];"));
337+
try!(write!(&mut w, r"]\};"));
339338

340339
str::from_utf8(w.unwrap().as_slice()).unwrap().to_owned()
341340
};
@@ -371,7 +370,7 @@ pub fn run(mut krate: clean::Crate, dst: Path) -> io::IoResult<()> {
371370
}
372371
}
373372
let mut w = try!(File::create(&dst));
374-
try!(writeln!(&mut w, r"var searchIndex = \{\}; var allPaths = \{\};"));
373+
try!(writeln!(&mut w, r"var searchIndex = \{\};"));
375374
for index in all_indexes.iter() {
376375
try!(writeln!(&mut w, "{}", *index));
377376
}

src/librustdoc/html/static/main.js

Lines changed: 30 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
// except according to those terms.
1010

1111
/*jslint browser: true, es5: true */
12-
/*globals $: true, rootPath: true, allPaths: true */
12+
/*globals $: true, rootPath: true */
1313

1414
(function() {
1515
"use strict";
@@ -258,7 +258,7 @@
258258
var result = results[i],
259259
name = result.item.name.toLowerCase(),
260260
path = result.item.path.toLowerCase(),
261-
parent = allPaths[result.item.crate][result.item.parent];
261+
parent = result.item.parent;
262262

263263
var valid = validateResult(name, path, split, parent);
264264
if (!valid) {
@@ -294,7 +294,7 @@
294294
if ((validate) &&
295295
(name.toLowerCase().indexOf(keys[i]) > -1 ||
296296
path.toLowerCase().indexOf(keys[i]) > -1 ||
297-
parent[1].toLowerCase().indexOf(keys[i]) > -1))
297+
parent.name.toLowerCase().indexOf(keys[i]) > -1))
298298
{
299299
validate = true;
300300
} else {
@@ -422,15 +422,13 @@
422422
'/index.html" class="' + type +
423423
'">' + name + '</a>';
424424
} else if (item.parent !== undefined) {
425-
var myparent = allPaths[item.crate][item.parent];
426-
var parentType = myparent[0];
427-
var parentName = myparent[1];
425+
var myparent = item.parent;
428426
var anchor = '#' + type + '.' + name;
429-
output += item.path + '::' + parentName +
427+
output += item.path + '::' + myparent.name +
430428
'::<a href="' + rootPath +
431429
item.path.replace(/::/g, '/') +
432-
'/' + itemTypes[parentType] +
433-
'.' + parentName +
430+
'/' + itemTypes[myparent.ty] +
431+
'.' + myparent.name +
434432
'.html' + anchor +
435433
'" class="' + type +
436434
'">' + name + '</a>';
@@ -538,18 +536,36 @@
538536
var searchWords = [];
539537
for (var crate in rawSearchIndex) {
540538
if (!rawSearchIndex.hasOwnProperty(crate)) { continue }
541-
var len = rawSearchIndex[crate].length;
542-
var i = 0;
543539

540+
// an array of [(Number) item type,
541+
// (String) name,
542+
// (String) full path,
543+
// (String) description,
544+
// (optional Number) the parent path index to `paths`]
545+
var items = rawSearchIndex[crate].items;
546+
// an array of [(Number) item type,
547+
// (String) name]
548+
var paths = rawSearchIndex[crate].paths;
549+
550+
// convert `paths` into an object form
551+
var len = paths.length;
552+
for (var i = 0; i < len; ++i) {
553+
paths[i] = {ty: paths[i][0], name: paths[i][1]};
554+
}
555+
556+
// convert `items` into an object form, and construct word indices.
557+
//
544558
// before any analysis is performed lets gather the search terms to
545559
// search against apart from the rest of the data. This is a quick
546560
// operation that is cached for the life of the page state so that
547561
// all other search operations have access to this cached data for
548562
// faster analysis operations
549-
for (i = 0; i < len; i += 1) {
550-
var rawRow = rawSearchIndex[crate][i];
563+
var len = items.length;
564+
for (var i = 0; i < len; i += 1) {
565+
var rawRow = items[i];
551566
var row = {crate: crate, ty: rawRow[0], name: rawRow[1],
552-
path: rawRow[2], desc: rawRow[3], parent: rawRow[4]};
567+
path: rawRow[2], desc: rawRow[3],
568+
parent: paths[rawRow[4]]};
553569
searchIndex.push(row);
554570
if (typeof row.name === "string") {
555571
var word = row.name.toLowerCase();

0 commit comments

Comments
 (0)