8 releases
| 0.3.3 | May 23, 2024 |
|---|---|
| 0.3.2 | May 23, 2024 |
| 0.2.0 | May 4, 2024 |
| 0.1.2 | Jun 13, 2023 |
| 0.1.0 | Apr 19, 2023 |
#294 in Value formatting
Used in regen-lang
34KB
842 lines
codize
Simple, language-agnostic library that pretty-prints code for your code-generation tool.
First, create a Code enum with the code structure with one of the ways listed below.
Then, the Format struct can be used to format the output. Or you can simply use to_string
for a quick formatting with the default parameters
Code Examples
The Code enum stores all of the code structures. You can create it in one of the following
ways:
- Create a single line from a
Stringor&strwithinto() - A block of code with an indented body with the
cblock!macro - A list of code segments with a separator with the
clist!macro - A concatenation of multiple code segments, either converted from an iterator with
into(), or with thecconcat!macro which allows for mixing different types of code segments
Usually, the macros will automatically convert the input to Code by calling Code::from.
use codize::{cblock, clist, cconcat};
let code = cconcat![
"",
"/// This block is auto-generated",
"",
cblock!("fn main() {", [
cblock!("println!(", [
clist!("," => [r#""{}, {}!""#, r#""Hello""#, r#""world!""#])
], ");")
], "}"),
];
let expected = r#"
/// This block is auto-generated
fn main() {
println!(
"{}, {}!",
"Hello",
"world!",
);
}"#;
assert_eq!(expected, code.to_string());
Format Examples
You can use the FormatCode trait along with the Format struct to change global
formatting options
use codize::{cblock, Format, FormatCode};
let code = cblock!("fn main() {", ["println!(\"Hello, world!\");"], "}");
let indent_2 =
r#"fn main() {
println!("Hello, world!");
}"#;
assert_eq!(indent_2, code.format_with(&Format::indent(2)));
let indent_tab =
"fn main() {
\tprintln!(\"Hello, world!\");
}";
assert_eq!(indent_tab, code.format_with(&Format::indent_tab()));
Dependencies
~1.5MB
~40K SLoC