]> git.lizzy.rs Git - rust.git/commitdiff
rustdoc: Inline names of function arguments
authorAlex Crichton <alex@alexcrichton.com>
Sat, 24 May 2014 01:47:01 +0000 (18:47 -0700)
committerAlex Crichton <alex@alexcrichton.com>
Sun, 25 May 2014 08:18:10 +0000 (01:18 -0700)
src/librustc/metadata/encoder.rs
src/librustdoc/clean.rs

index 941977f6d16e7c15abeb3d05ae1c2daa856a2fb6..b12de2aee09f572e265c9079aba048c668b0797f 100644 (file)
@@ -774,23 +774,27 @@ fn encode_info_for_method(ecx: &EncodeContext,
         } else {
             encode_symbol(ecx, ebml_w, m.def_id.node);
         }
+        encode_method_argument_names(ebml_w, &*ast_method.decl);
+    }
 
-        ebml_w.start_tag(tag_method_argument_names);
-        for arg in ast_method.decl.inputs.iter() {
-            ebml_w.start_tag(tag_method_argument_name);
-            match arg.pat.node {
-                ast::PatIdent(_, ref name, _) => {
-                    let name = name.segments.last().unwrap().identifier;
-                    let name = token::get_ident(name);
-                    ebml_w.writer.write(name.get().as_bytes());
-                }
-                _ => {}
+    ebml_w.end_tag();
+}
+
+fn encode_method_argument_names(ebml_w: &mut Encoder,
+                                decl: &ast::FnDecl) {
+    ebml_w.start_tag(tag_method_argument_names);
+    for arg in decl.inputs.iter() {
+        ebml_w.start_tag(tag_method_argument_name);
+        match arg.pat.node {
+            ast::PatIdent(_, ref name, _) => {
+                let name = name.segments.last().unwrap().identifier;
+                let name = token::get_ident(name);
+                ebml_w.writer.write(name.get().as_bytes());
             }
-            ebml_w.end_tag();
+            _ => {}
         }
         ebml_w.end_tag();
     }
-
     ebml_w.end_tag();
 }
 
@@ -910,7 +914,7 @@ fn add_to_index(item: &Item, ebml_w: &Encoder,
         encode_visibility(ebml_w, vis);
         ebml_w.end_tag();
       }
-      ItemFn(_, fn_style, _, ref generics, _) => {
+      ItemFn(ref decl, fn_style, _, ref generics, _) => {
         add_to_index(item, ebml_w, index);
         ebml_w.start_tag(tag_items_data_item);
         encode_def_id(ebml_w, def_id);
@@ -926,6 +930,7 @@ fn add_to_index(item: &Item, ebml_w: &Encoder,
             encode_symbol(ecx, ebml_w, item.id);
         }
         encode_visibility(ebml_w, vis);
+        encode_method_argument_names(ebml_w, &**decl);
         ebml_w.end_tag();
       }
       ItemMod(ref m) => {
index 6e3186eda4c7ee97335a7d3125ae5c4edeb654db..79f687b06248495b1db1cd76ce473c587895e395 100644 (file)
@@ -722,18 +722,35 @@ fn clean(&self) -> FnDecl {
     }
 }
 
-impl Clean<FnDecl> for ty::FnSig {
+impl<'a> Clean<FnDecl> for (ast::DefId, &'a ty::FnSig) {
     fn clean(&self) -> FnDecl {
+        let cx = super::ctxtkey.get().unwrap();
+        let tcx = match cx.maybe_typed {
+            core::Typed(ref tcx) => tcx,
+            core::NotTyped(_) => fail!(),
+        };
+        let (did, sig) = *self;
+        let mut names = if did.node != 0 {
+            csearch::get_method_arg_names(&tcx.sess.cstore, did).move_iter()
+        } else {
+            Vec::new().move_iter()
+        }.peekable();
+        if names.peek().map(|s| s.as_slice()) == Some("self") {
+            let _ = names.next();
+        }
+        if did.node == 0 {
+            let _ = names.len();
+        }
         FnDecl {
-            output: self.output.clean(),
+            output: sig.output.clean(),
             cf: Return,
-            attrs: Vec::new(), // FIXME: this is likely wrong
+            attrs: Vec::new(),
             inputs: Arguments {
-                values: self.inputs.iter().map(|t| {
+                values: sig.inputs.iter().map(|t| {
                     Argument {
                         type_: t.clean(),
                         id: 0,
-                        name: "".to_strbuf(), // FIXME: where are the names?
+                        name: names.next().unwrap_or("".to_strbuf()),
                     }
                 }).collect(),
             },
@@ -868,15 +885,6 @@ fn clean(&self) -> TraitMethod {
                 (s, sig)
             }
         };
-        let mut names = csearch::get_method_arg_names(&tcx.sess.cstore,
-                                                      self.def_id).move_iter();
-        if self_ != SelfStatic {
-            names.next();
-        }
-        let mut decl = sig.clean();
-        for (name, slot) in names.zip(decl.inputs.values.mut_iter()) {
-            slot.name = name;
-        }
 
         m(Item {
             name: Some(self.ident.clean()),
@@ -888,7 +896,7 @@ fn clean(&self) -> TraitMethod {
                 fn_style: self.fty.fn_style,
                 generics: self.generics.clean(),
                 self_: self_,
-                decl: decl,
+                decl: (self.def_id, &sig).clean(),
             })
         })
     }
@@ -1005,13 +1013,13 @@ fn clean(&self) -> Type {
                 generics: Generics {
                     lifetimes: Vec::new(), type_params: Vec::new()
                 },
-                decl: fty.sig.clean(),
+                decl: (ast_util::local_def(0), &fty.sig).clean(),
                 abi: fty.abi.to_str().to_strbuf(),
             }),
             ty::ty_closure(ref fty) => {
                 let decl = box ClosureDecl {
                     lifetimes: Vec::new(), // FIXME: this looks wrong...
-                    decl: fty.sig.clean(),
+                    decl: (ast_util::local_def(0), &fty.sig).clean(),
                     onceness: fty.onceness,
                     fn_style: fty.fn_style,
                     bounds: fty.bounds.iter().map(|i| i.clean()).collect(),
@@ -1855,7 +1863,7 @@ fn build_external_function(tcx: &ty::ctxt,
     let t = ty::lookup_item_type(tcx, did);
     Function {
         decl: match ty::get(t.ty).sty {
-            ty::ty_bare_fn(ref f) => f.sig.clean(),
+            ty::ty_bare_fn(ref f) => (did, &f.sig).clean(),
             _ => fail!("bad function"),
         },
         generics: t.generics.clean(),