codize

Crates.iocodize
lib.rscodize
version0.3.3
sourcesrc
created_at2023-04-19 06:12:29.319233
updated_at2024-05-23 23:38:05.130693
descriptionSimple, language-agnostic library that pretty-prints code for your code-generation tool.
homepage
repositoryhttps://github.com/Pistonite/codize
max_upload_size
id843213
size35,015
Michael Zhao (Pistonight)

documentation

README

codize

Build Badge Version Badge License Badge Issue Badge

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 with into()
  • 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 the [cconcat!] 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()));
Commit count: 11

cargo fmt