Skip to content

Commit 05b82ea

Browse files
committed
render multi-line doc properly
1 parent 1c198ae commit 05b82ea

File tree

1 file changed

+20
-4
lines changed

1 file changed

+20
-4
lines changed

src/util.rs

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -310,12 +310,28 @@ pub fn relative_path(a: &str, b: &str) -> TokenStream {
310310
res
311311
}
312312

313+
// If a document contains newline(either hardcode newline or escape sequence),
314+
// convert each newline into a valid markdown linebreak (but not the last line end).
313315
pub fn doc(doc: &Option<String>) -> TokenStream {
314316
if let Some(doc) = doc {
315-
let doc = doc.replace("\\n", "\n");
316-
let doc = respace(&doc);
317-
let doc = escape_brackets(&doc);
318-
quote!(#[doc=#doc])
317+
let mut doc = doc.replace("\\r", "\n");
318+
doc = doc.replace("\\n", "\n");
319+
320+
let doc_lines: Vec<_> = doc.split('\n').skip_while(|v| v.is_empty()).collect();
321+
322+
let mut markdown_doc = String::new();
323+
324+
for (index, line) in doc_lines.iter().enumerate() {
325+
let mut line = respace(line);
326+
line = escape_brackets(&line);
327+
// save a lot of whitespace for one-line doc
328+
if index != doc_lines.len() - 1 {
329+
line.push_str(" \n");
330+
}
331+
markdown_doc.push_str(&line);
332+
}
333+
334+
quote!(#[doc=#markdown_doc])
319335
} else {
320336
quote!()
321337
}

0 commit comments

Comments
 (0)