diff --git a/src/librustdoc/html/render.rs b/src/librustdoc/html/render.rs index d7739daad57..669a489a4fb 100644 --- a/src/librustdoc/html/render.rs +++ b/src/librustdoc/html/render.rs @@ -309,12 +309,23 @@ pub fn run(mut krate: clean::Crate, dst: Path) -> io::IoResult<()> { let index = { let mut w = MemWriter::new(); try!(write!(&mut w, r#"searchIndex['{}'] = \{"items":["#, krate.name)); + + let mut lastpath = ~""; for (i, item) in cache.search_index.iter().enumerate() { + // Omit the path if it is same to that of the prior item. + let path; + if lastpath == item.path { + path = ""; + } else { + lastpath = item.path.clone(); + path = item.path.as_slice(); + }; + if i > 0 { try!(write!(&mut w, ",")); } try!(write!(&mut w, r#"[{:u},"{}","{}",{}"#, - item.ty, item.name, item.path, + item.ty, item.name, path, item.desc.to_json().to_str())); match item.parent { Some(nodeid) => { @@ -325,7 +336,9 @@ pub fn run(mut krate: clean::Crate, dst: Path) -> io::IoResult<()> { } try!(write!(&mut w, "]")); } + try!(write!(&mut w, r#"],"paths":["#)); + for (i, &nodeid) in pathid_to_nodeid.iter().enumerate() { let &(ref fqp, short) = cache.paths.find(&nodeid).unwrap(); if i > 0 { @@ -334,6 +347,7 @@ pub fn run(mut krate: clean::Crate, dst: Path) -> io::IoResult<()> { try!(write!(&mut w, r#"[{:u},"{}"]"#, short, *fqp.last().unwrap())); } + try!(write!(&mut w, r"]\};")); str::from_utf8(w.unwrap().as_slice()).unwrap().to_owned() diff --git a/src/librustdoc/html/static/main.js b/src/librustdoc/html/static/main.js index 9ef25c50206..4b79ae89eef 100644 --- a/src/librustdoc/html/static/main.js +++ b/src/librustdoc/html/static/main.js @@ -539,7 +539,7 @@ // an array of [(Number) item type, // (String) name, - // (String) full path, + // (String) full path or empty string for previous path, // (String) description, // (optional Number) the parent path index to `paths`] var items = rawSearchIndex[crate].items; @@ -561,10 +561,11 @@ // all other search operations have access to this cached data for // faster analysis operations var len = items.length; + var lastPath = ""; for (var i = 0; i < len; i += 1) { var rawRow = items[i]; var row = {crate: crate, ty: rawRow[0], name: rawRow[1], - path: rawRow[2], desc: rawRow[3], + path: rawRow[2] || lastPath, desc: rawRow[3], parent: paths[rawRow[4]]}; searchIndex.push(row); if (typeof row.name === "string") { @@ -573,6 +574,7 @@ } else { searchWords.push(""); } + lastPath = row.path; } } return searchWords;