Skip to content

Commit 371a7ec

Browse files
committed
auto merge of #9675 : sfackler/rust/lint, r=alexcrichton
Closes #9671
2 parents 353578a + b7fe83d commit 371a7ec

File tree

11 files changed

+93
-12
lines changed

11 files changed

+93
-12
lines changed

src/libextra/getopts.rs

+5
Original file line numberDiff line numberDiff line change
@@ -85,13 +85,15 @@ use std::vec;
8585

8686
/// Name of an option. Either a string or a single char.
8787
#[deriving(Clone, Eq)]
88+
#[allow(missing_doc)]
8889
pub enum Name {
8990
Long(~str),
9091
Short(char),
9192
}
9293

9394
/// Describes whether an option has an argument.
9495
#[deriving(Clone, Eq)]
96+
#[allow(missing_doc)]
9597
pub enum HasArg {
9698
Yes,
9799
No,
@@ -100,6 +102,7 @@ pub enum HasArg {
100102

101103
/// Describes how often an option may occur.
102104
#[deriving(Clone, Eq)]
105+
#[allow(missing_doc)]
103106
pub enum Occur {
104107
Req,
105108
Optional,
@@ -141,6 +144,7 @@ pub struct Matches {
141144
/// The type returned when the command line does not conform to the
142145
/// expected format. Pass this value to <fail_str> to get an error message.
143146
#[deriving(Clone, Eq, ToStr)]
147+
#[allow(missing_doc)]
144148
pub enum Fail_ {
145149
ArgumentMissing(~str),
146150
UnrecognizedOption(~str),
@@ -151,6 +155,7 @@ pub enum Fail_ {
151155

152156
/// The type of failure that occured.
153157
#[deriving(Eq)]
158+
#[allow(missing_doc)]
154159
pub enum FailType {
155160
ArgumentMissing_,
156161
UnrecognizedOption_,

src/libextra/list.rs

+2
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,14 @@
1313

1414

1515
#[deriving(Clone, Eq)]
16+
#[allow(missing_doc)]
1617
pub enum List<T> {
1718
Cons(T, @List<T>),
1819
Nil,
1920
}
2021

2122
#[deriving(Eq)]
23+
#[allow(missing_doc)]
2224
pub enum MutList<T> {
2325
MutCons(T, @mut MutList<T>),
2426
MutNil,

src/libextra/semver.rs

+1
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ use std::to_str::ToStr;
3838
/// An identifier in the pre-release or build metadata. If the identifier can
3939
/// be parsed as a decimal value, it will be represented with `Numeric`.
4040
#[deriving(Clone, Eq)]
41+
#[allow(missing_doc)]
4142
pub enum Identifier {
4243
Numeric(uint),
4344
AlphaNumeric(~str)

src/libextra/terminfo/parm.rs

+1
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ enum FormatState {
3939

4040
/// Types of parameters a capability can use
4141
#[deriving(Clone)]
42+
#[allow(missing_doc)]
4243
pub enum Param {
4344
String(~str),
4445
Number(int)

src/libextra/uuid.rs

+1
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,7 @@ struct UuidFields {
116116
}
117117

118118
/// Error details for string parsing failures
119+
#[allow(missing_doc)]
119120
pub enum ParseError {
120121
ErrorInvalidLength(uint),
121122
ErrorInvalidCharacter(char, uint),

src/librustc/middle/lint.rs

+38-12
Original file line numberDiff line numberDiff line change
@@ -1351,6 +1351,18 @@ impl MissingDocLintVisitor {
13511351
// otherwise, warn!
13521352
cx.span_lint(missing_doc, sp, msg);
13531353
}
1354+
1355+
fn check_struct(&mut self, cx: @mut Context, sdef: @ast::struct_def) {
1356+
for field in sdef.fields.iter() {
1357+
match field.node.kind {
1358+
ast::named_field(_, vis) if vis != ast::private => {
1359+
self.check_attrs(cx, field.node.attrs, field.span,
1360+
"missing documentation for a field");
1361+
}
1362+
ast::unnamed_field | ast::named_field(*) => {}
1363+
}
1364+
}
1365+
}
13541366
}
13551367

13561368
impl Visitor<@mut Context> for MissingDocLintVisitor {
@@ -1395,35 +1407,49 @@ impl SubitemStoppableVisitor for MissingDocLintVisitor {
13951407
}
13961408

13971409
fn visit_item_action(&mut self, it:@ast::item, cx:@mut Context) {
1410+
if it.vis != ast::public {
1411+
return;
1412+
}
13981413

13991414
match it.node {
14001415
// Go ahead and match the fields here instead of using
14011416
// visit_struct_field while we have access to the enclosing
14021417
// struct's visibility
1403-
ast::item_struct(sdef, _) if it.vis == ast::public => {
1418+
ast::item_struct(sdef, _) => {
14041419
self.check_attrs(cx, it.attrs, it.span,
14051420
"missing documentation for a struct");
1406-
for field in sdef.fields.iter() {
1407-
match field.node.kind {
1408-
ast::named_field(_, vis) if vis != ast::private => {
1409-
self.check_attrs(cx, field.node.attrs, field.span,
1410-
"missing documentation for a field");
1411-
}
1412-
ast::unnamed_field | ast::named_field(*) => {}
1413-
}
1414-
}
1421+
self.check_struct(cx, sdef);
14151422
}
14161423

1417-
ast::item_trait(*) if it.vis == ast::public => {
1424+
ast::item_trait(*) => {
14181425
self.check_attrs(cx, it.attrs, it.span,
14191426
"missing documentation for a trait");
14201427
}
14211428

1422-
ast::item_fn(*) if it.vis == ast::public => {
1429+
ast::item_fn(*) => {
14231430
self.check_attrs(cx, it.attrs, it.span,
14241431
"missing documentation for a function");
14251432
}
14261433

1434+
ast::item_enum(ref edef, _) => {
1435+
self.check_attrs(cx, it.attrs, it.span,
1436+
"missing documentation for an enum");
1437+
for variant in edef.variants.iter() {
1438+
if variant.node.vis == ast::private {
1439+
continue;
1440+
}
1441+
1442+
self.check_attrs(cx, variant.node.attrs, variant.span,
1443+
"missing documentation for a variant");
1444+
match variant.node.kind {
1445+
ast::struct_variant_kind(sdef) => {
1446+
self.check_struct(cx, sdef);
1447+
}
1448+
_ => ()
1449+
}
1450+
}
1451+
}
1452+
14271453
_ => {}
14281454
}
14291455
}

src/libstd/fmt/parse.rs

+5
Original file line numberDiff line numberDiff line change
@@ -61,17 +61,20 @@ pub struct FormatSpec<'self> {
6161

6262
/// Enum describing where an argument for a format can be located.
6363
#[deriving(Eq)]
64+
#[allow(missing_doc)]
6465
pub enum Position<'self> {
6566
ArgumentNext, ArgumentIs(uint), ArgumentNamed(&'self str)
6667
}
6768

6869
/// Enum of alignments which are supported.
6970
#[deriving(Eq)]
71+
#[allow(missing_doc)]
7072
pub enum Alignment { AlignLeft, AlignRight, AlignUnknown }
7173

7274
/// Various flags which can be applied to format strings, the meaning of these
7375
/// flags is defined by the formatters themselves.
7476
#[deriving(Eq)]
77+
#[allow(missing_doc)]
7578
pub enum Flag {
7679
FlagSignPlus,
7780
FlagSignMinus,
@@ -82,6 +85,7 @@ pub enum Flag {
8285
/// A count is used for the precision and width parameters of an integer, and
8386
/// can reference either an argument or a literal integer.
8487
#[deriving(Eq)]
88+
#[allow(missing_doc)]
8589
pub enum Count {
8690
CountIs(uint),
8791
CountIsParam(uint),
@@ -126,6 +130,7 @@ pub struct PluralArm<'self> {
126130
///
127131
/// http://www.icu-project.org/apiref/icu4c/classicu_1_1PluralRules.html
128132
#[deriving(Eq, IterBytes)]
133+
#[allow(missing_doc)]
129134
pub enum PluralKeyword {
130135
Zero, One, Two, Few, Many
131136
}

src/libstd/local_data.rs

+1
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ use util;
5959
*/
6060
pub type Key<T> = &'static KeyValue<T>;
6161

62+
#[allow(missing_doc)]
6263
pub enum KeyValue<T> { Key }
6364

6465
trait LocalData {}

src/libstd/option.rs

+1
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ use clone::DeepClone;
5656

5757
/// The option type
5858
#[deriving(Clone, DeepClone, Eq)]
59+
#[allow(missing_doc)]
5960
pub enum Option<T> {
6061
None,
6162
Some(T),

src/libstd/send_str.rs

+1
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ use to_bytes::{IterBytes, Cb};
2222
/// A SendStr is a string that can hold either a ~str or a &'static str.
2323
/// This can be useful as an optimization when an allocation is sometimes
2424
/// needed but the common case is statically known.
25+
#[allow(missing_doc)]
2526
pub enum SendStr {
2627
SendStrOwned(~str),
2728
SendStrStatic(&'static str)

src/test/compile-fail/lint-missing-doc.rs

+37
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,43 @@ mod a {
7777
}
7878
}
7979

80+
enum Baz {
81+
BazA {
82+
a: int,
83+
priv b: int
84+
},
85+
BarB
86+
}
87+
88+
pub enum PubBaz { //~ ERROR: missing documentation
89+
PubBazA { //~ ERROR: missing documentation
90+
a: int, //~ ERROR: missing documentation
91+
priv b: int
92+
},
93+
94+
priv PubBazB
95+
}
96+
97+
/// dox
98+
pub enum PubBaz2 {
99+
/// dox
100+
PubBaz2A {
101+
/// dox
102+
a: int,
103+
priv b: int
104+
},
105+
priv PubBaz2B
106+
}
107+
108+
#[allow(missing_doc)]
109+
pub enum PubBaz3 {
110+
PubBaz3A {
111+
a: int,
112+
priv b: int
113+
},
114+
priv PubBaz3B
115+
}
116+
80117
#[doc(hidden)]
81118
pub fn baz() {}
82119

0 commit comments

Comments
 (0)