Skip to content

Commit 38197d8

Browse files
committed
rustdoc: Write markdown for ifaces
1 parent f4aba18 commit 38197d8

File tree

1 file changed

+120
-6
lines changed

1 file changed

+120
-6
lines changed

src/rustdoc/markdown_pass.rs

Lines changed: 120 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,7 @@ fn write_mod_contents(
137137
doc::consttag(constdoc) { write_const(ctxt, constdoc) }
138138
doc::enumtag(enumdoc) { write_enum(ctxt, enumdoc) }
139139
doc::restag(resdoc) { write_res(ctxt, resdoc) }
140+
doc::ifacetag(ifacedoc) { write_iface(ctxt, ifacedoc) }
140141
}
141142
}
142143
}
@@ -158,12 +159,32 @@ fn write_fn(
158159
doc: doc::fndoc
159160
) {
160161
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);
167188
}
168189

169190
fn write_sig(ctxt: ctxt, sig: option<str>) {
@@ -533,6 +554,99 @@ fn should_write_resource_args() {
533554
assert str::contains(markdown, "Arguments:\n\n* `a`: `bool` - b");
534555
}
535556

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\nArguments:\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+
536650
#[cfg(test)]
537651
mod test {
538652
fn render(source: str) -> str {

0 commit comments

Comments
 (0)