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 |
#67 in Value formatting
30 downloads per month
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
String
or&str
withinto()
- 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
~36K SLoC