7 个版本
0.1.6 | 2020年6月24日 |
---|---|
0.1.5 | 2020年6月24日 |
#408 in 命令行界面
11KB
153 行代码(不含注释)
Codeframe
捕获漂亮的代码框架。
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);
。因此输出将是
用法
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)
。这将产生以下结果
用法
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