Skip to content

Commit 7e76e5e

Browse files
committed
---
yaml --- r: 81917 b: refs/heads/master c: ca697d3 h: refs/heads/master i: 81915: 1b53e24 v: v3
1 parent 447dfce commit 7e76e5e

File tree

7 files changed

+89
-34
lines changed

7 files changed

+89
-34
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
refs/heads/master: c429c7c04b9c19c2ca5992b5f4e094e83832dcb8
2+
refs/heads/master: ca697d370594aaed020fb252a216b632abc56d33
33
refs/heads/snap-stage1: e33de59e47c5076a89eadeb38f4934f58a3618a6
44
refs/heads/snap-stage3: 6c08cc2db4f98e9f07ae7d50338396c4123c2f0a
55
refs/heads/try: 70152ff55722878cde684ee6462c14c65f2c4729

trunk/src/librustdoc/clean.rs

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,8 @@ pub enum ItemEnum {
149149
MethodItem(Method),
150150
StructFieldItem(StructField),
151151
VariantItem(Variant),
152+
ForeignFunctionItem(Function),
153+
ForeignStaticItem(Static),
152154
}
153155

154156
#[deriving(Clone, Encodable, Decodable)]
@@ -172,6 +174,7 @@ impl Clean<Item> for doctree::Module {
172174
inner: ModuleItem(Module {
173175
items: std::vec::concat(&[self.structs.clean(),
174176
self.enums.clean(), self.fns.clean(),
177+
std::vec::concat(self.foreigns.clean()),
175178
self.mods.clean(), self.typedefs.clean(),
176179
self.statics.clean(), self.traits.clean(),
177180
self.impls.clean(), self.view_items.clean()])
@@ -968,6 +971,41 @@ impl Clean<ViewListIdent> for ast::path_list_ident {
968971
}
969972
}
970973

974+
impl Clean<~[Item]> for ast::foreign_mod {
975+
fn clean(&self) -> ~[Item] {
976+
self.items.clean()
977+
}
978+
}
979+
980+
impl Clean<Item> for ast::foreign_item {
981+
fn clean(&self) -> Item {
982+
let inner = match self.node {
983+
ast::foreign_item_fn(ref decl, ref generics) => {
984+
ForeignFunctionItem(Function {
985+
decl: decl.clean(),
986+
generics: generics.clean(),
987+
purity: ast::extern_fn,
988+
})
989+
}
990+
ast::foreign_item_static(ref ty, mutbl) => {
991+
ForeignStaticItem(Static {
992+
type_: ty.clean(),
993+
mutability: if mutbl {Mutable} else {Immutable},
994+
expr: ~"",
995+
})
996+
}
997+
};
998+
Item {
999+
name: Some(self.ident.clean()),
1000+
attrs: self.attrs.clean(),
1001+
source: self.span.clean(),
1002+
id: self.id,
1003+
visibility: self.vis.clean(),
1004+
inner: inner,
1005+
}
1006+
}
1007+
}
1008+
9711009
// Utilities
9721010

9731011
trait ToSource {

trunk/src/librustdoc/doctree.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ pub struct Module {
3030
traits: ~[Trait],
3131
vis: ast::visibility,
3232
impls: ~[Impl],
33+
foreigns: ~[ast::foreign_mod],
3334
view_items: ~[ast::view_item],
3435
}
3536

@@ -50,6 +51,7 @@ impl Module {
5051
traits : ~[],
5152
impls : ~[],
5253
view_items : ~[],
54+
foreigns : ~[],
5355
}
5456
}
5557
}

trunk/src/librustdoc/html/render.rs

Lines changed: 40 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -540,19 +540,21 @@ impl Context {
540540

541541
fn shortty(item: &clean::Item) -> &'static str {
542542
match item.inner {
543-
clean::ModuleItem(*) => "mod",
544-
clean::StructItem(*) => "struct",
545-
clean::EnumItem(*) => "enum",
546-
clean::FunctionItem(*) => "fn",
547-
clean::TypedefItem(*) => "typedef",
548-
clean::StaticItem(*) => "static",
549-
clean::TraitItem(*) => "trait",
550-
clean::ImplItem(*) => "impl",
551-
clean::ViewItemItem(*) => "viewitem",
552-
clean::TyMethodItem(*) => "tymethod",
553-
clean::MethodItem(*) => "method",
554-
clean::StructFieldItem(*) => "structfield",
555-
clean::VariantItem(*) => "variant",
543+
clean::ModuleItem(*) => "mod",
544+
clean::StructItem(*) => "struct",
545+
clean::EnumItem(*) => "enum",
546+
clean::FunctionItem(*) => "fn",
547+
clean::TypedefItem(*) => "typedef",
548+
clean::StaticItem(*) => "static",
549+
clean::TraitItem(*) => "trait",
550+
clean::ImplItem(*) => "impl",
551+
clean::ViewItemItem(*) => "viewitem",
552+
clean::TyMethodItem(*) => "tymethod",
553+
clean::MethodItem(*) => "method",
554+
clean::StructFieldItem(*) => "structfield",
555+
clean::VariantItem(*) => "variant",
556+
clean::ForeignFunctionItem(*) => "ffi",
557+
clean::ForeignStaticItem(*) => "ffs",
556558
}
557559
}
558560

@@ -592,7 +594,8 @@ impl<'self> fmt::Default for Item<'self> {
592594
match it.item.inner {
593595
clean::ModuleItem(ref m) => item_module(fmt.buf, it.cx,
594596
it.item, m.items),
595-
clean::FunctionItem(ref f) => item_function(fmt.buf, it.item, f),
597+
clean::FunctionItem(ref f) | clean::ForeignFunctionItem(ref f) =>
598+
item_function(fmt.buf, it.item, f),
596599
clean::TraitItem(ref t) => item_trait(fmt.buf, it.item, t),
597600
clean::StructItem(ref s) => item_struct(fmt.buf, it.item, s),
598601
clean::EnumItem(ref e) => item_enum(fmt.buf, it.item, e),
@@ -673,6 +676,10 @@ fn item_module(w: &mut io::Writer, cx: &Context,
673676
(_, &clean::EnumItem(*)) => false,
674677
(&clean::StaticItem(*), _) => true,
675678
(_, &clean::StaticItem(*)) => false,
679+
(&clean::ForeignFunctionItem(*), _) => true,
680+
(_, &clean::ForeignFunctionItem(*)) => false,
681+
(&clean::ForeignStaticItem(*), _) => true,
682+
(_, &clean::ForeignStaticItem(*)) => false,
676683
(&clean::TraitItem(*), _) => true,
677684
(_, &clean::TraitItem(*)) => false,
678685
(&clean::FunctionItem(*), _) => true,
@@ -700,27 +707,31 @@ fn item_module(w: &mut io::Writer, cx: &Context,
700707
}
701708
curty = myty;
702709
write!(w, "<h2>{}</h2>\n<table>", match myitem.inner {
703-
clean::ModuleItem(*) => "Modules",
704-
clean::StructItem(*) => "Structs",
705-
clean::EnumItem(*) => "Enums",
706-
clean::FunctionItem(*) => "Functions",
707-
clean::TypedefItem(*) => "Type Definitions",
708-
clean::StaticItem(*) => "Statics",
709-
clean::TraitItem(*) => "Traits",
710-
clean::ImplItem(*) => "Implementations",
711-
clean::ViewItemItem(*) => "Reexports",
712-
clean::TyMethodItem(*) => "Type Methods",
713-
clean::MethodItem(*) => "Methods",
714-
clean::StructFieldItem(*) => "Struct Fields",
715-
clean::VariantItem(*) => "Variants",
710+
clean::ModuleItem(*) => "Modules",
711+
clean::StructItem(*) => "Structs",
712+
clean::EnumItem(*) => "Enums",
713+
clean::FunctionItem(*) => "Functions",
714+
clean::TypedefItem(*) => "Type Definitions",
715+
clean::StaticItem(*) => "Statics",
716+
clean::TraitItem(*) => "Traits",
717+
clean::ImplItem(*) => "Implementations",
718+
clean::ViewItemItem(*) => "Reexports",
719+
clean::TyMethodItem(*) => "Type Methods",
720+
clean::MethodItem(*) => "Methods",
721+
clean::StructFieldItem(*) => "Struct Fields",
722+
clean::VariantItem(*) => "Variants",
723+
clean::ForeignFunctionItem(*) => "Foreign Functions",
724+
clean::ForeignStaticItem(*) => "Foreign Statics",
716725
});
717726
}
718727

719728
match myitem.inner {
720-
clean::StaticItem(ref s) => {
729+
clean::StaticItem(ref s) | clean::ForeignStaticItem(ref s) => {
721730
struct Initializer<'self>(&'self str);
722731
impl<'self> fmt::Default for Initializer<'self> {
723732
fn fmt(s: &Initializer<'self>, f: &mut fmt::Formatter) {
733+
if s.len() == 0 { return; }
734+
write!(f.buf, "<code> = </code>");
724735
let tag = if s.contains("\n") { "pre" } else { "code" };
725736
write!(f.buf, "<{tag}>{}</{tag}>",
726737
s.as_slice(), tag=tag);
@@ -729,7 +740,7 @@ fn item_module(w: &mut io::Writer, cx: &Context,
729740

730741
write!(w, "
731742
<tr>
732-
<td><code>{}static {}: {} = </code>{}</td>
743+
<td><code>{}static {}: {}</code>{}</td>
733744
<td class='docblock'>{}&nbsp;</td>
734745
</tr>
735746
",

trunk/src/librustdoc/passes.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,8 @@ pub fn strip_private(crate: clean::Crate) -> plugins::PluginResult {
5959
clean::TypedefItem(*) | clean::StaticItem(*) |
6060
clean::StructItem(*) | clean::EnumItem(*) |
6161
clean::TraitItem(*) | clean::FunctionItem(*) |
62-
clean::ViewItemItem(*) | clean::MethodItem(*) => {
62+
clean::ViewItemItem(*) | clean::MethodItem(*) |
63+
clean::ForeignFunctionItem(*) | clean::ForeignStaticItem(*) => {
6364
// XXX: re-exported items should get surfaced in the docs as
6465
// well (using the output of resolve analysis)
6566
if i.visibility != Some(ast::public) {

trunk/src/librustdoc/visit_ast.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,9 @@ impl RustdocVisitor {
174174
};
175175
om.impls.push(i);
176176
},
177+
ast::item_foreign_mod(ref fm) => {
178+
om.foreigns.push(fm.clone());
179+
}
177180
_ => (),
178181
}
179182
}

trunk/src/libsyntax/parse/parser.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4204,9 +4204,9 @@ impl Parser {
42044204
}
42054205
42064206
// parse a function declaration from a foreign module
4207-
fn parse_item_foreign_fn(&self, attrs: ~[Attribute]) -> @foreign_item {
4207+
fn parse_item_foreign_fn(&self, vis: ast::visibility,
4208+
attrs: ~[Attribute]) -> @foreign_item {
42084209
let lo = self.span.lo;
4209-
let vis = self.parse_visibility();
42104210
42114211
// Parse obsolete purity.
42124212
let purity = self.parse_fn_purity();
@@ -4740,7 +4740,7 @@ impl Parser {
47404740
if (self.is_keyword(keywords::Fn) || self.is_keyword(keywords::Pure) ||
47414741
self.is_keyword(keywords::Unsafe)) {
47424742
// FOREIGN FUNCTION ITEM
4743-
let item = self.parse_item_foreign_fn(attrs);
4743+
let item = self.parse_item_foreign_fn(visibility, attrs);
47444744
return iovi_foreign_item(item);
47454745
}
47464746
self.parse_macro_use_or_failure(attrs,macros_allowed,lo,visibility)

0 commit comments

Comments
 (0)