diff --git a/src/librustdoc/clean.rs b/src/librustdoc/clean.rs index 06d768b43425..9fa1c57f9916 100644 --- a/src/librustdoc/clean.rs +++ b/src/librustdoc/clean.rs @@ -20,6 +20,8 @@ use syntax::codemap::Pos; use syntax::parse::token::InternedString; use syntax::parse::token; +use rustc::back::link; +use rustc::driver::driver; use rustc::metadata::cstore; use rustc::metadata::csearch; use rustc::metadata::decoder; @@ -75,7 +77,6 @@ pub struct Crate { impl<'a> Clean for visit_ast::RustdocVisitor<'a> { fn clean(&self) -> Crate { - use syntax::attr::find_crateid; let cx = local_data::get(super::ctxtkey, |x| *x.unwrap()); let mut externs = Vec::new(); @@ -83,11 +84,16 @@ impl<'a> Clean for visit_ast::RustdocVisitor<'a> { externs.push((n, meta.clean())); }); + let input = driver::FileInput(cx.src.clone()); + let t_outputs = driver::build_output_filenames(&input, + &None, + &None, + self.attrs.as_slice(), + cx.sess()); + let id = link::find_crate_id(self.attrs.as_slice(), + t_outputs.out_filestem); Crate { - name: match find_crateid(self.attrs.as_slice()) { - Some(n) => n.name, - None => fail!("rustdoc requires a `crate_id` crate attribute"), - }, + name: id.name, module: Some(self.module.clean()), externs: externs, } diff --git a/src/librustdoc/core.rs b/src/librustdoc/core.rs index c31261282fa6..9f89da563cc7 100644 --- a/src/librustdoc/core.rs +++ b/src/librustdoc/core.rs @@ -34,7 +34,8 @@ pub enum MaybeTyped { pub struct DocContext { pub krate: ast::Crate, - pub maybe_typed: MaybeTyped + pub maybe_typed: MaybeTyped, + pub src: Path, } impl DocContext { @@ -96,7 +97,8 @@ fn get_ast_and_resolve(cpath: &Path, libs: HashSet, cfgs: Vec<~str>) debug!("crate: {:?}", krate); (DocContext { krate: krate, - maybe_typed: Typed(ty_cx) + maybe_typed: Typed(ty_cx), + src: cpath.clone(), }, CrateAnalysis { exported_items: exported_items, public_items: public_items, diff --git a/src/librustdoc/test.rs b/src/librustdoc/test.rs index b05fdc826ff1..27f0d8d52235 100644 --- a/src/librustdoc/test.rs +++ b/src/librustdoc/test.rs @@ -55,7 +55,7 @@ pub fn run(input: &str, cfgs: Vec<~str>, diagnostic::mk_span_handler(diagnostic_handler, codemap); let sess = driver::build_session_(sessopts, - Some(input_path), + Some(input_path.clone()), span_diagnostic_handler); let mut cfg = driver::build_configuration(&sess); @@ -70,6 +70,7 @@ pub fn run(input: &str, cfgs: Vec<~str>, let ctx = @core::DocContext { krate: krate, maybe_typed: core::NotTyped(sess), + src: input_path, }; local_data::set(super::ctxtkey, ctx);