diff options
| author | Alex Crichton <alex@alexcrichton.com> | 2014-05-02 16:15:12 -0700 |
|---|---|---|
| committer | Alex Crichton <alex@alexcrichton.com> | 2014-05-03 02:09:29 -0700 |
| commit | 50fb77f8baed29bb1014893c8a1f3e66cbd8e3e1 (patch) | |
| tree | 88e1f7bc46655e32133610521ac968526c55e02a /src | |
| parent | 5d145c1c18abb1a6b81238dd1b73178635c12f0a (diff) | |
| download | rust-50fb77f8baed29bb1014893c8a1f3e66cbd8e3e1.tar.gz rust-50fb77f8baed29bb1014893c8a1f3e66cbd8e3e1.zip | |
rustdoc: Stop requiring a crate ID attribute
This is mostly just an artificial requirement as it can use similar logic to the compiler to infer the crate id.
Diffstat (limited to 'src')
| -rw-r--r-- | src/librustdoc/clean.rs | 16 | ||||
| -rw-r--r-- | src/librustdoc/core.rs | 6 | ||||
| -rw-r--r-- | src/librustdoc/test.rs | 3 |
3 files changed, 17 insertions, 8 deletions
diff --git a/src/librustdoc/clean.rs b/src/librustdoc/clean.rs index 06d768b4342..9fa1c57f991 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<Crate> 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<Crate> 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 c31261282fa..9f89da563cc 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<Path>, 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 b05fdc826ff..27f0d8d5223 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); |
