7 个版本

0.1.6 2020年6月24日
0.1.5 2020年6月24日

#408 in 命令行界面

MIT 许可证

11KB
153 行代码(不含注释)

Codeframe

Crates.io Rust CI

捕获漂亮的代码框架。

capture_codeframe!()

capture_codeframe!() 使用 line!file! 从原始调用位置捕获代码框架。

想象一下有一个宏 assert_equal!(left, right) 检查 left 是否等于 right。我们可以使用 capture_codeframe!() 获取带有一些上下文的 assert_equal!(left, right) 调用的代码框架。

它还接受 Color 参数(capture_codeframe!(Color::Blue)),默认为 Color::Red

use codeframe::{capture_codeframe, Color};

macro_rules! assert_equal {
    ($left:expr, $right:expr) => {{
        if $left != $right {
            let codeframe = capture_codeframe!(Color::Red);
            println!("Left does not match Right");
            if let Some(codeframe) = codeframe {
                println!("{}", codeframe)
            }
        } else {
            println!("Left and right are equal");
        }
    }};
}

fn with_context() {
    super::setup_test_env();
    assert_equal!(1, 2);
}

注意 let codeframe = capture_codeframe!(Color::Red);assert_equal 宏中。这捕获了它最初调用的代码框架。在我们的例子中,assert_equal!(1, 2);。因此输出将是

Output

用法

  • capture_codeframe!()
  • capture_codeframe!(颜色::红色)
  • capture_codeframe!(颜色::蓝色)

查看当前支持的颜色

带有代码片段的Codeframe

您还可以通过使用Builder模式捕获带有代码片段的代码框架。

let raw_lines = "macro_rules! test_simple_style {
    ($string:expr, $style:ident) => {
        #[test]
        fn $style() {
            assert_eq!(
                s.$style().to_string(),
                ansi_term::Style::new().$style().paint(s).to_string()
            )
        }
    };
}".to_owned();
let codeframe = Codeframe::new(raw_lines, 5).set_color(Color::Red).capture();

if let Some(codeframe) = codeframe {
    println!("{}", codeframe)
}

构建器将原始行和行号(用于突出显示)作为必选参数。您还可以使用以下方式设置突出显示颜色:set_color(Color::Red)。这将产生以下结果

Output

用法

  • Codeframe::new(raw_lines, 5).捕获();
  • Codeframe::new(raw_lines, 5).set_color(颜色::红色).捕获();
  • Codeframe::new(raw_lines, 5).set_color(颜色::蓝色).捕获();

查看当前支持的颜色

返回类型

选项<字符串>

支持的颜色

  • 黑色
  • 红色
  • 绿色
  • 黄色
  • 蓝色
  • 品红色或(紫色)
  • 青色
  • 白色

特性

Builder 模式

依赖

~0.1–8.5MB
~48K SLoC