2015-08-18 112 views
4

Scheme是否有等效的GNU indent或clang格式?也就是说,一个命令行工具(而不是交互式Emacs命令)将采用一组Scheme源文件并使用标准缩进等格式化它们?方案格式化工具

回答

2

我不知道现成的命令行工具重新缩进Scheme代码。 但是很多Scheme实现都带有一个漂亮的打印机。

例如:http://docs.racket-lang.org/reference/pretty-print.html

制作工具,可读取程序之一,在一个时间,然后用漂亮的印刷是合理的容易。读者对待'foo(quote foo)相同,所以输出可能不是100%相同(即使是模空白)。

UPDATE

Dorai Sitaram在他的主页上这样压头:

http://www.ccs.neu.edu/home/dorai/scmindent/scmindent.rkt

这里是一个解释:http://ds26gte.github.io/scmindent/index.html

+1

它不会工作。在阅读S表达式时,你会松开方括号,并且需要警惕第一个#! - 行。漂亮的打印机似乎不会将'let'和'define'视为特殊的,因此它们在新行开始时仍然会获得一个空间ident而不是两个。它不会停止在原型之后,因为它是它的格式化宽度而不是代码结构。即使DrRacket没有做所有这些事情,但人们通常会在自然的位置添加换行符,但是CTRL-i并不会清理那些没有的人。虽然这可能很简单。 – Sylwester

+0

我同意这不是一个理想的解决方案。如果使用读取语法,则可以使用属性来查看括号是否包含括号 - 但这会使输出复杂化。我不知道是否有办法从命令行重用DrRacket压头。如果可能的话,这将是很好的。 – soegaard

1

呼叫一个能够编辑程序。我预计Emacs可以做到这一点,也不过因为我知道Vim可以,这里是制作成一个简单的脚本示例:

% <scmindent.zsh # or generic-indent.zsh 
#! /usr/bin/env zsh 

scm=${1?Must provide code file} 

# Maybe not the most elegant invocation 
vim -c ':norm gg=G' -c ':wq' $scm 

% scmindent.zsh my-ugly-file.scm 

它运行的Vim从顶部(gg),以底部的='equalprg')(然后写入并退出。所以它就像sed就地(-i)模式。你可以调整它,而不是输出my-pretty-file.scm。还可以调整它以使其跨多个文件运行或者使脚本循环。

它实际上是完全通用的 - 对于任何需要缩进的文件来说,都需要Vim来处理。我还没有尝试过使用vanilla .vimrc设置,但编辑一个将相当于编辑indent.indent.pro配置文件。