@@ -137,6 +137,7 @@ fn write_mod_contents(
137
137
doc:: consttag ( constdoc) { write_const ( ctxt, constdoc) }
138
138
doc:: enumtag ( enumdoc) { write_enum ( ctxt, enumdoc) }
139
139
doc:: restag ( resdoc) { write_res ( ctxt, resdoc) }
140
+ doc:: ifacetag ( ifacedoc) { write_iface ( ctxt, ifacedoc) }
140
141
}
141
142
}
142
143
}
@@ -158,12 +159,32 @@ fn write_fn(
158
159
doc : doc:: fndoc
159
160
) {
160
161
write_header ( ctxt, h2, #fmt ( "Function `%s`" , doc. name ) ) ;
161
- write_sig ( ctxt, doc. sig ) ;
162
- write_brief ( ctxt, doc. brief ) ;
163
- write_desc ( ctxt, doc. desc ) ;
164
- write_args ( ctxt, doc. args ) ;
165
- write_return ( ctxt, doc. return ) ;
166
- write_failure ( ctxt, doc. failure ) ;
162
+ write_fnlike (
163
+ ctxt,
164
+ doc. sig ,
165
+ doc. brief ,
166
+ doc. desc ,
167
+ doc. args ,
168
+ doc. return ,
169
+ doc. failure
170
+ ) ;
171
+ }
172
+
173
+ fn write_fnlike (
174
+ ctxt : ctxt ,
175
+ sig : option < str > ,
176
+ brief : option < str > ,
177
+ desc : option < str > ,
178
+ args : [ doc:: argdoc ] ,
179
+ return : doc:: retdoc ,
180
+ failure : option < str >
181
+ ) {
182
+ write_sig ( ctxt, sig) ;
183
+ write_brief ( ctxt, brief) ;
184
+ write_desc ( ctxt, desc) ;
185
+ write_args ( ctxt, args) ;
186
+ write_return ( ctxt, return ) ;
187
+ write_failure ( ctxt, failure) ;
167
188
}
168
189
169
190
fn write_sig ( ctxt : ctxt , sig : option < str > ) {
@@ -533,6 +554,99 @@ fn should_write_resource_args() {
533
554
assert str:: contains ( markdown, "Arguments:\n \n * `a`: `bool` - b" ) ;
534
555
}
535
556
557
+ fn write_iface ( ctxt : ctxt , doc : doc:: ifacedoc ) {
558
+ write_header ( ctxt, h2, #fmt ( "Interface `%s`" , doc. name ) ) ;
559
+ write_brief ( ctxt, doc. brief ) ;
560
+ write_desc ( ctxt, doc. desc ) ;
561
+ write_methods ( ctxt, doc. methods ) ;
562
+ }
563
+
564
+ fn write_methods ( ctxt : ctxt , docs : [ doc:: methoddoc ] ) {
565
+ vec:: iter ( docs) { |doc| write_method ( ctxt, doc) }
566
+ }
567
+
568
+ fn write_method ( ctxt : ctxt , doc : doc:: methoddoc ) {
569
+ write_header ( ctxt, h3, #fmt ( "Method `%s`" , doc. name ) ) ;
570
+ write_fnlike (
571
+ ctxt,
572
+ doc. sig ,
573
+ doc. brief ,
574
+ doc. desc ,
575
+ doc. args ,
576
+ doc. return ,
577
+ doc. failure
578
+ ) ;
579
+ }
580
+
581
+ #[ test]
582
+ fn should_write_iface_header ( ) {
583
+ let markdown = test:: render ( "iface i { fn a(); }" ) ;
584
+ assert str:: contains ( markdown, "## Interface `i`" ) ;
585
+ }
586
+
587
+ #[ test]
588
+ fn should_write_iface_brief ( ) {
589
+ let markdown = test:: render (
590
+ "#[doc(brief = \" brief\" )] iface i { fn a(); }" ) ;
591
+ assert str:: contains ( markdown, "brief" ) ;
592
+ }
593
+
594
+ #[ test]
595
+ fn should_write_iface_desc ( ) {
596
+ let markdown = test:: render (
597
+ "#[doc(desc = \" desc\" )] iface i { fn a(); }" ) ;
598
+ assert str:: contains ( markdown, "desc" ) ;
599
+ }
600
+
601
+ #[ test]
602
+ fn should_write_iface_method_header ( ) {
603
+ let markdown = test:: render (
604
+ "iface i { fn a(); }" ) ;
605
+ assert str:: contains ( markdown, "### Method `a`" ) ;
606
+ }
607
+
608
+ #[ test]
609
+ fn should_write_iface_method_signature ( ) {
610
+ let markdown = test:: render (
611
+ "iface i { fn a(); }" ) ;
612
+ assert str:: contains ( markdown, "\n fn a()" ) ;
613
+ }
614
+
615
+ #[ test]
616
+ fn should_write_iface_method_argument_header ( ) {
617
+ let markdown = test:: render (
618
+ "iface a { fn a(b: int); }" ) ;
619
+ assert str:: contains ( markdown, "\n \n Arguments:\n \n " ) ;
620
+ }
621
+
622
+ #[ test]
623
+ fn should_write_iface_method_arguments ( ) {
624
+ let markdown = test:: render (
625
+ "iface a { fn a(b: int); }" ) ;
626
+ assert str:: contains ( markdown, "* `b`: `int`\n " ) ;
627
+ }
628
+
629
+ #[ test]
630
+ fn should_not_write_iface_method_arguments_if_none ( ) {
631
+ let markdown = test:: render (
632
+ "iface a { fn a(); }" ) ;
633
+ assert !str:: contains ( markdown, "Arguments" ) ;
634
+ }
635
+
636
+ #[ test]
637
+ fn should_write_iface_method_return_info ( ) {
638
+ let markdown = test:: render (
639
+ "iface a { fn a() -> int; }" ) ;
640
+ assert str:: contains ( markdown, "Returns `int`" ) ;
641
+ }
642
+
643
+ #[ test]
644
+ fn should_write_iface_method_failure_conditions ( ) {
645
+ let markdown = test:: render (
646
+ "iface a { #[doc(failure = \" nuked\" )] fn a(); }" ) ;
647
+ assert str:: contains ( markdown, "Failure conditions: nuked" ) ;
648
+ }
649
+
536
650
#[ cfg( test) ]
537
651
mod test {
538
652
fn render ( source : str ) -> str {
0 commit comments