This crate provides a Rust compiler plugin for indented string literals. The
indoc!()
macro takes a multiline string literal and un-indents it so the
leftmost non-space character is in the first column.
Indoc is available on crates.io. Use the
following in Cargo.toml
:
toml
[dependencies]
indoc = "^0.1"
Release notes are available under GitHub releases.
```rust
fn main() { let testing = indoc!(" def hello(): print('Hello, world!')
hello()
");
let expected = "def hello():\n print('Hello, world!')\n\nhello()\n";
assert_eq!(testing, expected);
} ```
Indoc also works with raw string literals:
```rust
fn main() { let testing = indoc!(r#" def hello(): print("Hello, world!")
hello()
"#);
let expected = "def hello():\n print(\"Hello, world!\")\n\nhello()\n";
assert_eq!(testing, expected);
} ```
And byte string literals:
```rust
fn main() { let testing = indoc!(b" def hello(): print('Hello, world!')
hello()
");
let expected = b"def hello():\n print('Hello, world!')\n\nhello()\n";
assert_eq!(testing[..], expected[..]);
} ```
The following rules characterize the behavior of the indoc!()
macro:
This means there are a few equivalent ways to format the same string, so choose
one you like. All of the following result in the string "line one\nline
two\n"
:
indoc!(" / indoc!( / indoc!("line one
line one / "line one / line two
line two / line two / ")
") / ") /
Licensed under either of
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in Indoc by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.