pyo3_stub_gen/generate/
docstring.rs1use std::fmt;
2
3pub fn write_docstring(f: &mut fmt::Formatter, doc: &str, indent: &str) -> fmt::Result {
4 let doc = doc.trim();
5 if !doc.is_empty() {
6 writeln!(f, r#"{indent}r""""#)?;
7
8 let lines: Vec<&str> = doc.lines().collect();
10
11 let min_indent = lines
13 .iter()
14 .skip(1) .filter(|line| !line.trim().is_empty())
16 .map(|line| line.chars().take_while(|c| c.is_whitespace()).count())
17 .min()
18 .unwrap_or(0);
19
20 for (i, line) in lines.iter().enumerate() {
22 if i == 0 {
23 writeln!(f, "{indent}{line}")?;
25 } else if line.trim().is_empty() {
26 writeln!(f, "{indent}")?;
28 } else {
29 let dedented = if line.len() >= min_indent {
31 &line[min_indent..]
32 } else {
33 line.trim_start()
34 };
35 writeln!(f, "{indent}{dedented}")?;
36 }
37 }
38
39 writeln!(f, r#"{indent}""""#)?;
40 }
41 Ok(())
42}