10 个版本 (破坏性)
0.8.0 | 2023 年 5 月 1 日 |
---|---|
0.7.0 | 2022 年 7 月 30 日 |
0.6.1 | 2020 年 7 月 21 日 |
0.6.0 | 2020 年 3 月 9 日 |
#160 在 值格式化
每月 45 次下载
40KB
998 行
ruut
为什么
我在 DocSend 的工作中经常处理文件夹结构。我也非常喜欢使用 tree(1)
来讨论文件夹结构。
不幸的是,大多数时候我并不是在文件系统上讨论文件夹结构,所以为了使用 tree(1)
获取美观的输出,我必须在计算机上创建目录和/或文件,这似乎有些荒谬。
这就是我创建 ruut
的原因。它将一个相当易于输入的表达式,比如这样
Parent (Child 1, Child 2 (Grandchild 1, Grandchild 2), Child 3)
转换成一个更漂亮的样子
Parent
├── Child 1
├── Child 2
│ ├── Grandchild 1
│ └── Grandchild 2
└── Child 3
它也适合打印树结构的序列化表示(见下面的 format
选项)。
注意:如果您只想从 Rust 程序中渲染上面显示的树样式,请查看 render_as_tree。
用法
ruut
可以通过参数或从 stdin 接收 "结构"。
$ ruut 'Parent (Child 1, Child 2 (Grandchild 1, Grandchild 2), Child 3)'
# Equivalent to
$ echo 'Parent (Child 1, Child 2 (Grandchild 1, Grandchild 2), Child 3)' | ruut
安装
从 GitHub 下载
从本仓库的 版本发布部分 获取最新发布的版本。
使用 cargo
- 使用
rustup
安装rust
- 运行
cargo install ruut
格式
本节中的所有示例都生成以下输出
Parent
├── Child 1
├── Child 2
│ ├── Grandchild 1
│ └── Grandchild 2
└── Child 3
└── Grandchild 3
括号 (-f parens
,默认)
Parent (Child 1, Child 2 (Grandchild 1, Grandchild 2), Child 3 (Grandchild 3))
本页设计便于输入。请注意,文件夹名称中间的空格会被保留。
以下是语法的正式描述
<name of folder> [(<name of subfolder 1> [(<name of subsubfolder1>[, <name of
subsubfolder2>[, ...]])][, <name of subfolder 2> [, ...]])]
使用<
和>
包围的部分,需要您自行填写这些值。使用[
和]
包围的部分是可选的。
JSON (-f json
)
{
"Parent": {
"Child 1": null,
"Child 2": {
"Grandchild 1": null,
"Grandchild 2": {},
},
"Child 3": {
"Grandchild 3": "doesn't matter",
}
}
}
这里真正相关的是键名。注意,除了对象和空对象以外的实体都会被忽略。
注意,所有JSON5语法都被接受。JSON5是JSON的超集,支持不同类型的引号、注释等,因此您可以更容易地从实际的JavaScript环境中复制。有关详细信息,请参阅JSON5网站。
带属性的JSON (-f jsonprop
)
{
"name": "Parent",
"children": [
{
"name": "Child 1"
},
{
"name": "Child 2",
"children": [
{
"name": "Grandchild 1"
},
{
"name": "Grandchild 2",
"children": []
}
]
},
{
"name": "Child 3",
"children": [
{
"name": "Grandchild 3",
"children": null
}
]
}
]
}
如果您是从外部源提取结构化树而不是手动编写,这通常很有用。请注意,children
也可以是一个对象——在这种情况下,该对象的属性将被迭代,并忽略键名。
{
"name": "Parent",
"children": {
"whatever_1": {
"name": "Child 1"
},
"whatever_2": {
"name": "Child 2",
"children": {
"pls_ignore": {
"name": "Grandchild 1"
},
"test_post": {
"name": "Grandchild 2",
"children": {}
}
}
},
"whatever_3": {
"name": "Child 3",
"children": {
"it_me": {
"name": "Grandchild 3",
"children": null
}
}
}
}
}
注意,所有JSON5语法都被接受。JSON5是JSON的超集,支持不同类型的引号、注释等,因此您可以更容易地从实际的JavaScript环境中复制。有关详细信息,请参阅JSON5网站。
默认情况下,此格式查找属性name
用于打印每个项目的内容,并查找属性children
以确定直接子项。要更改此设置,您可以使用--template
和--children
选项,分别。缺失的值将被文本<missing>
填充——这可以通过--raise-on-missing
标志来覆盖。
-t/--模板<模板字符串>
此选项允许您使用简单的花括号模板语法从每个JSON节点中抓取任何属性。例如,对于一个具有属性id
= 3
、type
= "Folder"
的节点,您可以编写模板字符串Id: {id}, Type: {type}
,这将产生Id: 3, Type: Folder
。
-c/--子项<子项属性>
此选项允许您指定包含子JSON节点的属性的名称,默认为children
。
-r/--引发-在-缺失
此标志会导致ruut
在模板中的任何占位符缺失时立即报错。
版本管理
此项目遵循语义版本控制。
依赖项
~4.5–5.5MB
~101K SLoC