是否有自动花括号格式或间距的IDE /插件?

时间:2012-03-30 19:30:20

标签: code-formatting programming-tools

我在考虑旧的holy war that is curly brace placement,并认为程序员与IDE的问题确实不是一个问题。

大多数C风格的编程语言*支持程序员想要的任何间距和对齐的混搭:

foo(bar, baz) {
  fizz();
  buzz();
}

在功能上与:

相同
foo(bar, baz)
{
    fizz();
    buzz();
}

在功能上与:

相同
foo(bar,baz){fizz();buzz();}

没有人质疑这一点,但程序员仍然不同意正确的格式。

因为它是这样的用户偏好,我认为如果有一个IDE会自动将编写的代码重新转换为用户首选项指定的格式,同时将其保留为书面形式,这将是方便的:

foo
(
bar
,
baz
)
{
fizz();
buzz();
}

将自动格式化为:

foo(bar, baz)
{
    fizz();
    buzz();
}

或您喜欢的任何内容而不更改原始代码(或者在保存时自动将其转换为其他格式)...

然后我意识到我不太可能有一个原创的想法。

所以问题的关键在于这个功能是否已经存在,而我根本没有找到它,或者它是否存在而且我需要制作它。


*我通常用JavaScript,CSS,C#和PHP编写;显然这对于​​像Python这样的语言来说是无用的。

1 个答案:

答案 0 :(得分:3)

它们被称为(代码)“格式化程序”或“美化器”,并且有一些,甚至可以内置到您喜欢的IDE中。

他们遭受的最大问题是那些坚持微观格式化特性的人,以及程序员对于良好布局的几乎宗教战争的分歧。我称之为“艺术”问题:每个人都喜欢他,不喜欢别人的口味。

通常这意味着该组无法就格式达成一致,因此格式化不会发生,并且您最终会得到格式错误的代码。我个人认为这令人惊讶;选择几乎任何风格供组织使用我认为是一个胜利,因为现在每个人都知道会发生什么。考虑到程序员花费50%的时间阅读代码,这在我看来就像是一种严重的浪费。

AStyle被广泛使用。它有很多选项,所以即使是胡思乱想的人也可以获得他们想要的格式。

其中大多数是基于特殊的字符串黑客技巧,例如,使用正则表达式来查找关键字和特殊语法,例如花括号。以这种方式构建基本格式化器非常容易。在某种程度上,这种字符串黑客不能完全理解语言语法(如果大括号在字符串文字或某些字符串中被转义),它们可能会损坏您的代码(通常通过插入虚假的语法错误,有时通过破坏代码以更微妙的方式),因此格式化后重新编译和验证格式化模块非常重要。

我的公司制作unusual variety of formatters for programming languages based on parsing and regenerating the language text。这些工具具有不会破坏代码的属性(除非我们在构建解析器前端时出错,这比使用正则表达式的人少得多)。因此,您可以在完整的代码库中运行它们,而不必担心会破坏任何内容。

我们倾向于选择比Astyle更少的选项,尽管其中许多选项会让您在各种“典型”场所放置大括号(如果在该语言中很重要,例如PHP或Java)。但是即使像Python这样的无支撑语言也可以有关于大括号之外的其他内容的布局规则,例如如何缩进复合条件表达式等等。我们的工具通常都有这些。