tighterror_build/coder/generator/
helpers.rs

1use crate::coder::idents;
2use proc_macro2::{Ident, TokenStream};
3use quote::{format_ident, quote};
4
5fn _handle_multiline_doc(doc: &str) -> String {
6    let n_lines = doc.lines().count();
7    if n_lines <= 1 {
8        if doc.starts_with(' ') {
9            doc.to_owned()
10        } else {
11            format!(" {doc}")
12        }
13    } else {
14        let mut s = String::from("\n");
15        for line in doc.lines() {
16            s.push_str(&format!(" * {}\n", line));
17        }
18        s
19    }
20}
21
22fn _doc_tokens(doc: &str, outer: bool) -> TokenStream {
23    if doc.is_empty() {
24        quote! {}
25    } else {
26        let doc = _handle_multiline_doc(doc);
27        if outer {
28            quote! {
29                #![doc = #doc]
30            }
31        } else {
32            quote! {
33                #[doc = #doc]
34            }
35        }
36    }
37}
38
39pub fn doc_tokens(doc: &str) -> TokenStream {
40    const OUTER: bool = false;
41    _doc_tokens(doc, OUTER)
42}
43
44pub fn outer_doc_tokens(doc: &str) -> TokenStream {
45    const OUTER: bool = true;
46    _doc_tokens(doc, OUTER)
47}
48
49pub fn category_names_mod_ident() -> Ident {
50    format_ident!("{}", idents::CATEGORY_NAMES_MOD)
51}
52
53pub fn error_names_mod_ident() -> Ident {
54    format_ident!("{}", idents::ERROR_NAMES_MOD)
55}
56
57pub fn error_displays_mod_ident() -> Ident {
58    format_ident!("{}", idents::ERROR_DISPLAYS_MOD)
59}
60
61pub fn private_mod_ident() -> Ident {
62    format_ident!("{}", idents::PRIVATE_MOD)
63}
64
65pub fn error_kinds_mod_ident() -> Ident {
66    format_ident!("{}", idents::ERROR_KINDS_MOD)
67}
68
69pub fn tests_mod_ident() -> Ident {
70    format_ident!("{}", idents::TESTS_MOD)
71}
72
73pub fn categories_mod_ident() -> Ident {
74    format_ident!("{}", idents::CATEGORY_CONSTS_MOD)
75}
76
77pub fn variants_mod_ident() -> Ident {
78    format_ident!("{}", idents::VARIANTS_MOD)
79}
80
81pub fn types_mod_ident() -> Ident {
82    format_ident!("{}", idents::TYPES_MOD)
83}