17次发布
0.3.7 | 2022年12月17日 |
---|---|
0.3.6 | 2020年6月16日 |
0.3.5 | 2020年3月25日 |
0.3.4 | 2019年8月17日 |
0.2.3 | 2017年10月23日 |
#10 in #literal
每月112,355次下载
19KB
192 行
缩进文档 (indoc)
此crate提供了一种用于缩进字符串字面量的过程宏。宏 indoc!()
接受多行字符串字面量并将其取消缩进,使得最左侧的非空格字符位于第一列。
[dependencies]
indoc = "0.3"
发布说明可在 GitHub发布 下找到。
使用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!()
宏的行为
- 计算每行的前导空格数,忽略第一行和任何只包含空格的空行。
- 取最小值。
- 如果第一行是空的,即字符串以换行符开头,则删除第一行。
- 从每行的开头删除计算出的空格数。
这意味着有几种格式化相同字符串的等效方法,因此请选择您喜欢的格式。以下所有格式均产生相同的字符串 "line one\nline two\n"
indoc!(" / indoc!( / indoc!("line one
line one / "line one / line two
line two / line two / ")
") / ") /
取消缩进
Indoc的缩进逻辑可在 unindent
crate中找到。这可能对处理在编译时不是静态已知的字符串很有用。
该crate公开了两个函数
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-2.0许可证定义,您有意提交以包含在此软件包中的任何贡献,都将采用上述双重许可,不附加任何额外条款或条件。
依赖项
~1.5MB
~35K SLoC