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 模式

Download history 847370/week @ 2024-04-28 883842/week @ 2024-05-05 818393/week @ 2024-05-12 898687/week @ 2024-05-19 714827/week @ 2024-05-26 737461/week @ 2024-06-02 880644/week @ 2024-06-09 783044/week @ 2024-06-16 825073/week @ 2024-06-23 674158/week @ 2024-06-30 829840/week @ 2024-07-07 856590/week @ 2024-07-14 859113/week @ 2024-07-21 945688/week @ 2024-07-28 1074625/week @ 2024-08-04 1037585/week @ 2024-08-11

每月 3,976,245 次下载
用于 1,660 个crate (758 个直接使用)

MIT/Apache

27KB
391

缩进文档 (indoc)

github crates.io docs.rs build status

此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!() 宏的行为

  1. 计算每行的前导空格数量,忽略第一行以及任何仅包含空格的空行。
  2. 取最小值。
  3. 如果第一行是空的,即字符串以换行符开始,则删除第一行。
  4. 从每行的开头删除计算出的空格数量。

取消缩进

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.0MIT license
除非您明确说明,否则根据 Apache-2.0 许可证定义,您有意提交以包含在此库中的任何贡献,都将按上述方式双许可,而无需任何额外的条款或条件。

无运行时依赖