Skip to content

Commit 481e9d5

Browse files
committed
render multi-line doc properly
1 parent 1c198ae commit 481e9d5

File tree

1 file changed

+19
-4
lines changed

1 file changed

+19
-4
lines changed

src/util.rs

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -310,12 +310,27 @@ 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 it into multiple #[doc=""] sequence, and append 2 whitespace at end of each line (but not the last line),
315+
// to make multiple valid markdown lines.
313316
pub fn doc(doc: &Option<String>) -> TokenStream {
314317
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])
318+
let mut doc = doc.replace("\\r", "\n");
319+
doc = doc.replace("\\n", "\n");
320+
let doc_lines: Vec<_> = doc.split('\n').skip_while(|v| v.is_empty()).collect();
321+
322+
let mut doc_token_stream = TokenStream::new();
323+
for (index, content) in doc_lines.iter().enumerate() {
324+
let mut content = respace(content);
325+
content = escape_brackets(&content);
326+
// save a lot of whitespace for one-line doc
327+
if index != doc_lines.len() - 1 {
328+
content.push_str(" ");
329+
}
330+
doc_token_stream.extend(quote!(#[doc=#content]));
331+
}
332+
333+
doc_token_stream
319334
} else {
320335
quote!()
321336
}

0 commit comments

Comments
 (0)