Skip to content

Commit cec1679

Browse files
committed
rustdoc: Simplify attr pass
1 parent 22de929 commit cec1679

File tree

2 files changed

+99
-307
lines changed

2 files changed

+99
-307
lines changed

src/rustdoc/attr_parser.rs

Lines changed: 37 additions & 190 deletions
Original file line numberDiff line numberDiff line change
@@ -9,25 +9,21 @@ import rustc::syntax::ast;
99
import rustc::front::attr;
1010
import core::tuple;
1111

12-
export crate_attrs, mod_attrs, fn_attrs, arg_attrs,
13-
const_attrs, enum_attrs, variant_attrs, res_attrs,
14-
iface_attrs, method_attrs, impl_attrs, type_attrs;
15-
export parse_crate, parse_mod, parse_fn, parse_const,
16-
parse_enum, parse_variant, parse_res,
17-
parse_iface, parse_method, parse_impl, parse_type;
12+
export crate_attrs, basic_attrs, fn_attrs, arg_attrs,
13+
variant_attrs, res_attrs, method_attrs;
14+
export parse_crate, parse_basic, parse_fn,
15+
parse_variant, parse_res, parse_method;
1816

1917
type crate_attrs = {
2018
name: option<str>
2119
};
2220

23-
type mod_attrs = {
21+
type basic_attrs = {
2422
brief: option<str>,
2523
desc: option<str>
2624
};
2725

2826
type fn_attrs = {
29-
brief: option<str>,
30-
desc: option<str>,
3127
args: [arg_attrs],
3228
return: option<str>,
3329
failure: option<str>
@@ -38,43 +34,16 @@ type arg_attrs = {
3834
desc: str
3935
};
4036

41-
type const_attrs = {
42-
brief: option<str>,
43-
desc: option<str>
44-
};
45-
46-
type enum_attrs = {
47-
brief: option<str>,
48-
desc: option<str>
49-
};
50-
5137
type variant_attrs = {
5238
desc: option<str>
5339
};
5440

5541
type res_attrs = {
56-
brief: option<str>,
57-
desc: option<str>,
5842
args: [arg_attrs]
5943
};
6044

61-
type iface_attrs = {
62-
brief: option<str>,
63-
desc: option<str>
64-
};
65-
66-
type impl_attrs = {
67-
brief: option<str>,
68-
desc: option<str>
69-
};
70-
7145
type method_attrs = fn_attrs;
7246

73-
type type_attrs = {
74-
brief: option<str>,
75-
desc: option<str>
76-
};
77-
7847
#[cfg(test)]
7948
mod test {
8049

@@ -174,40 +143,36 @@ fn parse_basic(
174143
)
175144
}
176145

177-
fn parse_mod(attrs: [ast::attribute]) -> mod_attrs {
178-
parse_basic(attrs)
179-
}
180-
181146
#[test]
182-
fn parse_mod_should_handle_undocumented_mods() {
147+
fn parse_basic_should_handle_undocumented_mods() {
183148
let source = "";
184149
let attrs = test::parse_attributes(source);
185-
let attrs = parse_mod(attrs);
150+
let attrs = parse_basic(attrs);
186151
assert attrs.brief == none;
187152
assert attrs.desc == none;
188153
}
189154

190155
#[test]
191-
fn parse_mod_should_parse_simple_doc_attributes() {
156+
fn parse_basic_should_parse_simple_doc_attributes() {
192157
let source = "#[doc = \"basic\"]";
193158
let attrs = test::parse_attributes(source);
194-
let attrs = parse_mod(attrs);
159+
let attrs = parse_basic(attrs);
195160
assert attrs.desc == some("basic");
196161
}
197162

198163
#[test]
199-
fn parse_mod_should_parse_the_brief_description() {
164+
fn parse_basic_should_parse_the_brief_description() {
200165
let source = "#[doc(brief = \"short\")]";
201166
let attrs = test::parse_attributes(source);
202-
let attrs = parse_mod(attrs);
167+
let attrs = parse_basic(attrs);
203168
assert attrs.brief == some("short");
204169
}
205170

206171
#[test]
207-
fn parse_mod_should_parse_the_long_description() {
172+
fn parse_basic_should_parse_the_long_description() {
208173
let source = "#[doc(desc = \"description\")]";
209174
let attrs = test::parse_attributes(source);
210-
let attrs = parse_mod(attrs);
175+
let attrs = parse_basic(attrs);
211176
assert attrs.desc == some("description");
212177
}
213178

@@ -246,37 +211,35 @@ fn parse_short_doc_or<T>(
246211
}
247212
}
248213

249-
fn parse_fn(
250-
attrs: [ast::attribute]
251-
) -> fn_attrs {
214+
fn parse_long_doc<T>(
215+
attrs: [ast::attribute],
216+
parse_long: fn&(doc_items: [@ast::meta_item]) -> T
217+
) -> T {
218+
alt doc_meta(attrs) {
219+
some(meta) {
220+
alt attr::get_meta_item_list(meta) {
221+
some(list) {
222+
parse_long(list)
223+
}
224+
none {
225+
parse_long([])
226+
}
227+
}
228+
}
229+
none { parse_long([]) }
230+
}
231+
}
252232

253-
parse_short_doc_or(
254-
attrs,
255-
{|desc|
256-
{
257-
brief: none,
258-
desc: desc,
259-
args: [],
260-
return: none,
261-
failure: none
262-
}
263-
},
264-
parse_fn_long_doc
265-
)
233+
fn parse_fn(attrs: [ast::attribute]) -> fn_attrs {
234+
parse_long_doc(attrs, parse_fn_long_doc)
266235
}
267236

268-
fn parse_fn_long_doc(
269-
items: [@ast::meta_item],
270-
brief: option<str>,
271-
desc: option<str>
272-
) -> fn_attrs {
237+
fn parse_fn_long_doc(items: [@ast::meta_item]) -> fn_attrs {
273238
let return = attr::meta_item_value_from_list(items, "return");
274239
let failure = attr::meta_item_value_from_list(items, "failure");
275240
let args = parse_args(items);
276241

277242
{
278-
brief: brief,
279-
desc: desc,
280243
args: args,
281244
return: return,
282245
failure: failure
@@ -304,36 +267,10 @@ fn parse_fn_should_handle_undocumented_functions() {
304267
let source = "";
305268
let attrs = test::parse_attributes(source);
306269
let attrs = parse_fn(attrs);
307-
assert attrs.brief == none;
308-
assert attrs.desc == none;
309270
assert attrs.return == none;
310271
assert vec::len(attrs.args) == 0u;
311272
}
312273

313-
#[test]
314-
fn parse_fn_should_parse_simple_doc_attributes() {
315-
let source = "#[doc = \"basic\"]";
316-
let attrs = test::parse_attributes(source);
317-
let attrs = parse_fn(attrs);
318-
assert attrs.desc == some("basic");
319-
}
320-
321-
#[test]
322-
fn parse_fn_should_parse_the_brief_description() {
323-
let source = "#[doc(brief = \"short\")]";
324-
let attrs = test::parse_attributes(source);
325-
let attrs = parse_fn(attrs);
326-
assert attrs.brief == some("short");
327-
}
328-
329-
#[test]
330-
fn parse_fn_should_parse_the_long_description() {
331-
let source = "#[doc(desc = \"description\")]";
332-
let attrs = test::parse_attributes(source);
333-
let attrs = parse_fn(attrs);
334-
assert attrs.desc == some("description");
335-
}
336-
337274
#[test]
338275
fn parse_fn_should_parse_the_return_value_description() {
339276
let source = "#[doc(return = \"return value\")]";
@@ -359,48 +296,6 @@ fn parse_fn_should_parse_failure_conditions() {
359296
assert attrs.failure == some("it's the fail");
360297
}
361298

362-
fn parse_const(attrs: [ast::attribute]) -> const_attrs {
363-
parse_basic(attrs)
364-
}
365-
366-
#[test]
367-
fn should_parse_const_short_doc() {
368-
let source = "#[doc = \"description\"]";
369-
let attrs = test::parse_attributes(source);
370-
let attrs = parse_const(attrs);
371-
assert attrs.desc == some("description");
372-
}
373-
374-
#[test]
375-
fn should_parse_const_long_doc() {
376-
let source = "#[doc(brief = \"a\", desc = \"b\")]";
377-
let attrs = test::parse_attributes(source);
378-
let attrs = parse_const(attrs);
379-
assert attrs.brief == some("a");
380-
assert attrs.desc == some("b");
381-
}
382-
383-
fn parse_enum(attrs: [ast::attribute]) -> enum_attrs {
384-
parse_basic(attrs)
385-
}
386-
387-
#[test]
388-
fn should_parse_enum_short_doc() {
389-
let source = "#[doc = \"description\"]";
390-
let attrs = test::parse_attributes(source);
391-
let attrs = parse_enum(attrs);
392-
assert attrs.desc == some("description");
393-
}
394-
395-
#[test]
396-
fn should_parse_enum_long_doc() {
397-
let source = "#[doc(brief = \"a\", desc = \"b\")]";
398-
let attrs = test::parse_attributes(source);
399-
let attrs = parse_enum(attrs);
400-
assert attrs.brief == some("a");
401-
assert attrs.desc == some("b");
402-
}
403-
404299
fn parse_variant(attrs: [ast::attribute]) -> variant_attrs {
405300
parse_short_doc_or(
406301
attrs,
@@ -446,52 +341,16 @@ fn should_parse_variant_long_doc() {
446341
assert attrs.desc == some("a");
447342
}
448343

449-
fn parse_res(
450-
attrs: [ast::attribute]
451-
) -> res_attrs {
452-
453-
parse_short_doc_or(
454-
attrs,
455-
{|desc|
456-
{
457-
brief: none,
458-
desc: desc,
459-
args: []
460-
}
461-
},
462-
parse_res_long_doc
463-
)
344+
fn parse_res(attrs: [ast::attribute]) -> res_attrs {
345+
parse_long_doc(attrs, parse_res_long_doc)
464346
}
465347

466-
fn parse_res_long_doc(
467-
items: [@ast::meta_item],
468-
brief: option<str>,
469-
desc: option<str>
470-
) -> res_attrs {
348+
fn parse_res_long_doc(items: [@ast::meta_item]) -> res_attrs {
471349
{
472-
brief: brief,
473-
desc: desc,
474350
args: parse_args(items)
475351
}
476352
}
477353

478-
#[test]
479-
fn should_parse_resource_short_desc() {
480-
let source = "#[doc = \"a\"]";
481-
let attrs = test::parse_attributes(source);
482-
let attrs = parse_res(attrs);
483-
assert attrs.desc == some("a");
484-
}
485-
486-
#[test]
487-
fn should_parse_resource_long_desc() {
488-
let source = "#[doc(brief = \"a\", desc = \"b\")]";
489-
let attrs = test::parse_attributes(source);
490-
let attrs = parse_res(attrs);
491-
assert attrs.brief == some("a");
492-
assert attrs.desc == some("b");
493-
}
494-
495354
#[test]
496355
fn shoulde_parse_resource_arg() {
497356
let source = "#[doc(args(a = \"b\"))]";
@@ -501,18 +360,6 @@ fn shoulde_parse_resource_arg() {
501360
assert attrs.args[0].desc == "b";
502361
}
503362

504-
fn parse_iface(attrs: [ast::attribute]) -> iface_attrs {
505-
parse_basic(attrs)
506-
}
507-
508363
fn parse_method(attrs: [ast::attribute]) -> method_attrs {
509364
parse_fn(attrs)
510365
}
511-
512-
fn parse_impl(attrs: [ast::attribute]) -> impl_attrs {
513-
parse_basic(attrs)
514-
}
515-
516-
fn parse_type(attrs: [ast::attribute]) -> type_attrs {
517-
parse_basic(attrs)
518-
}

0 commit comments

Comments
 (0)