Skip to content

Commit

Permalink
Honor hidden doc attribute of derivable trait methods
Browse files Browse the repository at this point in the history
  • Loading branch information
edwardw committed Apr 23, 2014
1 parent e049a70 commit 2cf1e4b
Show file tree
Hide file tree
Showing 14 changed files with 52 additions and 37 deletions.
5 changes: 4 additions & 1 deletion src/libsyntax/ext/deriving/clone.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,15 @@ use codemap::Span;
use ext::base::ExtCtxt;
use ext::build::AstBuilder;
use ext::deriving::generic::*;
use parse::token::InternedString;

pub fn expand_deriving_clone(cx: &mut ExtCtxt,
span: Span,
mitem: @MetaItem,
item: @Item,
push: |@Item|) {
let inline = cx.meta_word(span, InternedString::new("inline"));
let attrs = vec!(cx.attribute(span, inline));
let trait_def = TraitDef {
span: span,
attributes: Vec::new(),
Expand All @@ -32,7 +35,7 @@ pub fn expand_deriving_clone(cx: &mut ExtCtxt,
explicit_self: borrowed_explicit_self(),
args: Vec::new(),
ret_ty: Self,
inline: true,
attributes: attrs,
const_nonmatching: false,
combine_substructure: |c, s, sub| cs_clone("Clone", c, s, sub)
}
Expand Down
9 changes: 6 additions & 3 deletions src/libsyntax/ext/deriving/cmp/eq.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ use codemap::Span;
use ext::base::ExtCtxt;
use ext::build::AstBuilder;
use ext::deriving::generic::*;
use parse::token::InternedString;

pub fn expand_deriving_eq(cx: &mut ExtCtxt,
span: Span,
Expand All @@ -31,18 +32,20 @@ pub fn expand_deriving_eq(cx: &mut ExtCtxt,
}

macro_rules! md (
($name:expr, $f:ident) => {
($name:expr, $f:ident) => { {
let inline = cx.meta_word(span, InternedString::new("inline"));
let attrs = vec!(cx.attribute(span, inline));
MethodDef {
name: $name,
generics: LifetimeBounds::empty(),
explicit_self: borrowed_explicit_self(),
args: vec!(borrowed_self()),
ret_ty: Literal(Path::new(vec!("bool"))),
inline: true,
attributes: attrs,
const_nonmatching: true,
combine_substructure: $f
}
}
} }
);

let trait_def = TraitDef {
Expand Down
9 changes: 6 additions & 3 deletions src/libsyntax/ext/deriving/cmp/ord.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,25 +14,28 @@ use codemap::Span;
use ext::base::ExtCtxt;
use ext::build::AstBuilder;
use ext::deriving::generic::*;
use parse::token::InternedString;

pub fn expand_deriving_ord(cx: &mut ExtCtxt,
span: Span,
mitem: @MetaItem,
item: @Item,
push: |@Item|) {
macro_rules! md (
($name:expr, $op:expr, $equal:expr) => {
($name:expr, $op:expr, $equal:expr) => { {
let inline = cx.meta_word(span, InternedString::new("inline"));
let attrs = vec!(cx.attribute(span, inline));
MethodDef {
name: $name,
generics: LifetimeBounds::empty(),
explicit_self: borrowed_explicit_self(),
args: vec!(borrowed_self()),
ret_ty: Literal(Path::new(vec!("bool"))),
inline: true,
attributes: attrs,
const_nonmatching: false,
combine_substructure: |cx, span, substr| cs_op($op, $equal, cx, span, substr)
}
}
} }
);

let trait_def = TraitDef {
Expand Down
8 changes: 7 additions & 1 deletion src/libsyntax/ext/deriving/cmp/totaleq.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ use codemap::Span;
use ext::base::ExtCtxt;
use ext::build::AstBuilder;
use ext::deriving::generic::*;
use parse::token::InternedString;

pub fn expand_deriving_totaleq(cx: &mut ExtCtxt,
span: Span,
Expand All @@ -33,6 +34,11 @@ pub fn expand_deriving_totaleq(cx: &mut ExtCtxt,
substr)
}

let inline = cx.meta_word(span, InternedString::new("inline"));
let hidden = cx.meta_word(span, InternedString::new("hidden"));
let doc = cx.meta_list(span, InternedString::new("doc"), vec!(hidden));
let attrs = vec!(cx.attribute(span, inline),
cx.attribute(span, doc));
let trait_def = TraitDef {
span: span,
attributes: Vec::new(),
Expand All @@ -46,7 +52,7 @@ pub fn expand_deriving_totaleq(cx: &mut ExtCtxt,
explicit_self: borrowed_explicit_self(),
args: vec!(),
ret_ty: nil_ty(),
inline: true,
attributes: attrs,
const_nonmatching: true,
combine_substructure: cs_total_eq_assert
}
Expand Down
5 changes: 4 additions & 1 deletion src/libsyntax/ext/deriving/cmp/totalord.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ use codemap::Span;
use ext::base::ExtCtxt;
use ext::build::AstBuilder;
use ext::deriving::generic::*;
use parse::token::InternedString;

use std::cmp::{Ordering, Equal, Less, Greater};

Expand All @@ -22,6 +23,8 @@ pub fn expand_deriving_totalord(cx: &mut ExtCtxt,
mitem: @MetaItem,
item: @Item,
push: |@Item|) {
let inline = cx.meta_word(span, InternedString::new("inline"));
let attrs = vec!(cx.attribute(span, inline));
let trait_def = TraitDef {
span: span,
attributes: Vec::new(),
Expand All @@ -35,7 +38,7 @@ pub fn expand_deriving_totalord(cx: &mut ExtCtxt,
explicit_self: borrowed_explicit_self(),
args: vec!(borrowed_self()),
ret_ty: Literal(Path::new(vec!("std", "cmp", "Ordering"))),
inline: true,
attributes: attrs,
const_nonmatching: false,
combine_substructure: cs_cmp
}
Expand Down
2 changes: 1 addition & 1 deletion src/libsyntax/ext/deriving/decodable.rs
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ pub fn expand_deriving_decodable(cx: &mut ExtCtxt,
Borrowed(None, MutMutable))),
ret_ty: Literal(Path::new_(vec!("std", "result", "Result"), None,
vec!(~Self, ~Literal(Path::new_local("__E"))), true)),
inline: false,
attributes: Vec::new(),
const_nonmatching: true,
combine_substructure: decodable_substructure,
})
Expand Down
5 changes: 4 additions & 1 deletion src/libsyntax/ext/deriving/default.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,15 @@ use codemap::Span;
use ext::base::ExtCtxt;
use ext::build::AstBuilder;
use ext::deriving::generic::*;
use parse::token::InternedString;

pub fn expand_deriving_default(cx: &mut ExtCtxt,
span: Span,
mitem: @MetaItem,
item: @Item,
push: |@Item|) {
let inline = cx.meta_word(span, InternedString::new("inline"));
let attrs = vec!(cx.attribute(span, inline));
let trait_def = TraitDef {
span: span,
attributes: Vec::new(),
Expand All @@ -32,7 +35,7 @@ pub fn expand_deriving_default(cx: &mut ExtCtxt,
explicit_self: None,
args: Vec::new(),
ret_ty: Self,
inline: true,
attributes: attrs,
const_nonmatching: false,
combine_substructure: default_substructure
})
Expand Down
2 changes: 1 addition & 1 deletion src/libsyntax/ext/deriving/encodable.rs
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ pub fn expand_deriving_encodable(cx: &mut ExtCtxt,
vec!(~Tuple(Vec::new()),
~Literal(Path::new_local("__E"))),
true)),
inline: false,
attributes: Vec::new(),
const_nonmatching: true,
combine_substructure: encodable_substructure,
})
Expand Down
18 changes: 2 additions & 16 deletions src/libsyntax/ext/deriving/generic.rs
Original file line number Diff line number Diff line change
Expand Up @@ -227,8 +227,7 @@ pub struct MethodDef<'a> {
/// Return type
pub ret_ty: Ty<'a>,

/// Whether to mark this as #[inline]
pub inline: bool,
pub attributes: Vec<ast::Attribute>,

/// if the value of the nonmatching enums is independent of the
/// actual enum variants, i.e. can use _ => .. match.
Expand Down Expand Up @@ -604,23 +603,10 @@ impl<'a> MethodDef<'a> {
let fn_decl = cx.fn_decl(args, ret_type);
let body_block = cx.block_expr(body);

let attrs = if self.inline {
vec!(
cx
.attribute(trait_.span,
cx
.meta_word(trait_.span,
InternedString::new(
"inline")))
)
} else {
Vec::new()
};

// Create the method.
@ast::Method {
ident: method_ident,
attrs: attrs,
attrs: self.attributes.clone(),
generics: fn_generics,
explicit_self: explicit_self,
fn_style: ast::NormalFn,
Expand Down
5 changes: 4 additions & 1 deletion src/libsyntax/ext/deriving/hash.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ use codemap::Span;
use ext::base::ExtCtxt;
use ext::build::AstBuilder;
use ext::deriving::generic::*;
use parse::token::InternedString;

pub fn expand_deriving_hash(cx: &mut ExtCtxt,
span: Span,
Expand All @@ -34,6 +35,8 @@ pub fn expand_deriving_hash(cx: &mut ExtCtxt,
LifetimeBounds::empty(),
Path::new(vec!("std", "hash", "sip", "SipState")))
};
let inline = cx.meta_word(span, InternedString::new("inline"));
let attrs = vec!(cx.attribute(span, inline));
let hash_trait_def = TraitDef {
span: span,
attributes: Vec::new(),
Expand All @@ -47,7 +50,7 @@ pub fn expand_deriving_hash(cx: &mut ExtCtxt,
explicit_self: borrowed_explicit_self(),
args: vec!(Ptr(~Literal(args), Borrowed(None, MutMutable))),
ret_ty: nil_ty(),
inline: true,
attributes: attrs,
const_nonmatching: false,
combine_substructure: hash_substructure
}
Expand Down
10 changes: 6 additions & 4 deletions src/libsyntax/ext/deriving/primitive.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@ pub fn expand_deriving_from_primitive(cx: &mut ExtCtxt,
mitem: @MetaItem,
item: @Item,
push: |@Item|) {
let inline = cx.meta_word(span, InternedString::new("inline"));
let attrs = vec!(cx.attribute(span, inline));
let trait_def = TraitDef {
span: span,
attributes: Vec::new(),
Expand All @@ -38,8 +40,8 @@ pub fn expand_deriving_from_primitive(cx: &mut ExtCtxt,
None,
vec!(~Self),
true)),
// liable to cause code-bloat
inline: true,
// #[inline] liable to cause code-bloat
attributes: attrs.clone(),
const_nonmatching: false,
combine_substructure: |c, s, sub| cs_from("i64", c, s, sub),
},
Expand All @@ -53,8 +55,8 @@ pub fn expand_deriving_from_primitive(cx: &mut ExtCtxt,
None,
vec!(~Self),
true)),
// liable to cause code-bloat
inline: true,
// #[inline] liable to cause code-bloat
attributes: attrs,
const_nonmatching: false,
combine_substructure: |c, s, sub| cs_from("u64", c, s, sub),
})
Expand Down
2 changes: 1 addition & 1 deletion src/libsyntax/ext/deriving/rand.rs
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ pub fn expand_deriving_rand(cx: &mut ExtCtxt,
Borrowed(None, ast::MutMutable))
),
ret_ty: Self,
inline: false,
attributes: Vec::new(),
const_nonmatching: false,
combine_substructure: rand_substructure
}
Expand Down
2 changes: 1 addition & 1 deletion src/libsyntax/ext/deriving/show.rs
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ pub fn expand_deriving_show(cx: &mut ExtCtxt,
explicit_self: borrowed_explicit_self(),
args: vec!(fmtr),
ret_ty: Literal(Path::new(vec!("std", "fmt", "Result"))),
inline: false,
attributes: Vec::new(),
const_nonmatching: false,
combine_substructure: show_substructure
}
Expand Down
7 changes: 5 additions & 2 deletions src/libsyntax/ext/deriving/zero.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,15 @@ use codemap::Span;
use ext::base::ExtCtxt;
use ext::build::AstBuilder;
use ext::deriving::generic::*;
use parse::token::InternedString;

pub fn expand_deriving_zero(cx: &mut ExtCtxt,
span: Span,
mitem: @MetaItem,
item: @Item,
push: |@Item|) {
let inline = cx.meta_word(span, InternedString::new("inline"));
let attrs = vec!(cx.attribute(span, inline));
let trait_def = TraitDef {
span: span,
attributes: Vec::new(),
Expand All @@ -32,7 +35,7 @@ pub fn expand_deriving_zero(cx: &mut ExtCtxt,
explicit_self: None,
args: Vec::new(),
ret_ty: Self,
inline: true,
attributes: attrs.clone(),
const_nonmatching: false,
combine_substructure: zero_substructure
},
Expand All @@ -42,7 +45,7 @@ pub fn expand_deriving_zero(cx: &mut ExtCtxt,
explicit_self: borrowed_explicit_self(),
args: Vec::new(),
ret_ty: Literal(Path::new(vec!("bool"))),
inline: true,
attributes: attrs,
const_nonmatching: false,
combine_substructure: |cx, span, substr| {
cs_and(|cx, span, _, _| cx.span_bug(span,
Expand Down

2 comments on commit 2cf1e4b

@alexcrichton
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

r+

@alexcrichton
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@bors: retry

Please sign in to comment.