#s-expr #command-line-tool #formatting #consistent #format #human-readable #formatted

app sexpfmt

用于格式化 S-表达式的命令行工具

1 个不稳定版本

0.1.0 2023 年 7 月 23 日

#2106命令行工具

MIT 许可证

19KB
488

sexpfmt

S-表达式易于机器编写,但生成格式化的 S-表达式可能会很痛苦。 sexpfmt 以一致的方式格式化输入流,使得输出既可进行行差异比较,又可读性良好。

sexpfmt 使用的格式化风格非常规范,与许多 Lisp 和 Scheme 程序员喜欢的风格不同。每个缩进增加固定数量的空格(默认为 2 个)。

(object 
  (object
    (name "croissant")
    (quantity 2))
  (object
    (name "latte")
    (quantity 1)
    (size "tall")))

与 LISP 相比,sexpfmt 使用的 S-表达式数据格式非常简化。不支持引用、伪引用、非引用或点对构建器。也不支持用于构建图形的 #1234 = ... 表达式。字符字面量 #\ (空格)也不支持。请使用 #\space 代替。也不支持 #1234 = ... 表达式来构建图形。


设置和安装

  • 要构建和安装此工具,您需要 Cargo 和 Rust 工具链。

  • 使用 shell 导航到此存储库的根目录,然后运行

    cargo install --path .
    
  • 要运行测试,还需要 bashPython3


示例用法

$ cat my-file.sexp | sexpfmt > my-formatted-file.sexp
$ ./build/my-sexp-generator-program arg1 arg2 | sexpfmt >> formatted-logfile.sexp

有关 sexpfmt 行为的示例,请参阅 test 目录。


待办事项

  • 允许命令行选项指定...
    • 是否打印帮助信息并退出(例如 -h--help
    • 是否规范化括号标记
    • 边距宽度和缩进宽度。
    • 文件输入,直接使用操作系统 API 将文件映射,以处理非常大的文件。
  • 解析时保留注释。
  • 如果输入了格式错误的文件,则提供更好的错误报告。
    • 例如,我们几乎拥有提供行号所需的一切。
  • 考虑是否支持更多功能,如引用、伪引用、非引用、对构建等。

依赖关系

~1MB
~22K SLoC