48 个版本 (16 个稳定版)
2.0.5 | 2024 年 3 月 23 日 |
---|---|
2.0.4 | 2023 年 9 月 16 日 |
2.0.3 | 2023 年 7 月 15 日 |
2.0.1 | 2023 年 3 月 5 日 |
0.1.6 | 2016 年 3 月 21 日 |
#131 in Rust 模式
每月 3,976,245 次下载
用于 1,660 个crate (758 个直接使用)
27KB
391 行
缩进文档 (indoc)
此crate提供了一个用于缩进字符串字面量的过程宏。宏 indoc!()
在编译时将多行字符串字面量取消缩进,使最左侧的非空字符位于第一列。
[dependencies]
indoc = "2"
编译器要求:rustc 1.56 或更高版本。
使用 indoc
use indoc::indoc;
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 也可以与原始字符串字面量一起使用
use indoc::indoc;
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);
}
以及字节字符串字面量
use indoc::indoc;
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[..]);
}
格式化宏
indoc crate导出五个额外的宏,方便地替换标准库的格式化宏
formatdoc!($fmt, ...)
— 等同于format!(indoc!($fmt), ...)
printdoc!($fmt, ...)
— 等同于print!(indoc!($fmt), ...)
eprintdoc!($fmt, ...)
—— 等价于eprint!(indoc!($fmt), ...)
writedoc!($dest, $fmt, ...)
—— 等价于write!($dest, indoc!($fmt), ...)
concatdoc!(...)
—— 等价于concat!(...)
,每个字符串字面量都被indoc!
包裹
use indoc::{concatdoc, printdoc};
const HELP: &str = concatdoc! {"
Usage: ", env!("CARGO_BIN_NAME"), " [options]
Options:
-h, --help
"};
fn main() {
printdoc! {"
GET {url}
Accept: {mime}
",
url = "http://127.0.0.1:8080",
mime = "application/json",
}
}
说明
以下规则定义了 indoc!()
宏的行为
- 计算每行的前导空格数量,忽略第一行以及任何仅包含空格的空行。
- 取最小值。
- 如果第一行是空的,即字符串以换行符开始,则删除第一行。
- 从每行的开头删除计算出的空格数量。
取消缩进
Indoc 的缩进逻辑在 unindent
库中可用。这可能对处理在编译时不可静态知的字符串很有用。
该库公开了两个函数
unindent(&str) ->String
unindent_bytes(&[u8]) -> Vec<u8>
use unindent::unindent;
fn main() {
let indented = "
line one
line two";
assert_eq!("line one\nline two", unindent(indented));
}
许可
根据您的选择,许可协议为 Apache License, Version 2.0 或 MIT 许可证。详情请参阅 Apache License, Version 2.0 或 MIT license。除非您明确说明,否则根据 Apache-2.0 许可证定义,您有意提交以包含在此库中的任何贡献,都将按上述方式双许可,而无需任何额外的条款或条件。