about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorAlex Crichton <alex@alexcrichton.com>2014-05-02 16:15:12 -0700
committerAlex Crichton <alex@alexcrichton.com>2014-05-03 02:09:29 -0700
commit50fb77f8baed29bb1014893c8a1f3e66cbd8e3e1 (patch)
tree88e1f7bc46655e32133610521ac968526c55e02a /src
parent5d145c1c18abb1a6b81238dd1b73178635c12f0a (diff)
downloadrust-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.rs16
-rw-r--r--src/librustdoc/core.rs6
-rw-r--r--src/librustdoc/test.rs3
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);