rustdoc: Fix json output and input

Turns out a hash map with integer keys isn't serializable to json.

Closes #10115
This commit is contained in:
Alex Crichton 2014-02-16 22:31:05 -08:00
parent 6db37bb147
commit 68d576fd34
5 changed files with 34 additions and 6 deletions

View file

@ -25,7 +25,6 @@ use rustc::metadata::csearch;
use rustc::metadata::decoder;
use std;
use std::hashmap::HashMap;
use doctree;
use visit_ast;
@ -68,7 +67,7 @@ impl<T: Clean<U>, U> Clean<~[U]> for syntax::opt_vec::OptVec<T> {
pub struct Crate {
name: ~str,
module: Option<Item>,
externs: HashMap<ast::CrateNum, ExternalCrate>,
externs: ~[(ast::CrateNum, ExternalCrate)],
}
impl<'a> Clean<Crate> for visit_ast::RustdocVisitor<'a> {
@ -76,9 +75,9 @@ impl<'a> Clean<Crate> for visit_ast::RustdocVisitor<'a> {
use syntax::attr::find_crateid;
let cx = local_data::get(super::ctxtkey, |x| *x.unwrap());
let mut externs = HashMap::new();
let mut externs = ~[];
cx.sess.cstore.iter_crate_data(|n, meta| {
externs.insert(n, meta.clean());
externs.push((n, meta.clean()));
});
Crate {

View file

@ -305,7 +305,7 @@ pub fn run(mut krate: clean::Crate, dst: Path) -> io::IoResult<()> {
krate = folder.fold_crate(krate);
}
for (&n, e) in krate.externs.iter() {
for &(n, ref e) in krate.externs.iter() {
cache.extern_locations.insert(n, extern_location(e, &cx.dst));
}

View file

@ -344,7 +344,7 @@ fn json_output(krate: clean::Crate, res: ~[plugins::PluginJson],
};
let crate_json = match json::from_str(crate_json_str) {
Ok(j) => j,
Err(_) => fail!("Rust generated JSON is invalid??")
Err(e) => fail!("Rust generated JSON is invalid: {:?}", e)
};
json.insert(~"crate", crate_json);