我在考虑旧的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这样的语言来说是无用的。
答案 0 :(得分:3)
它们被称为(代码)“格式化程序”或“美化器”,并且有一些,甚至可以内置到您喜欢的IDE中。
他们遭受的最大问题是那些坚持微观格式化特性的人,以及程序员对于良好布局的几乎宗教战争的分歧。我称之为“艺术”问题:每个人都喜欢他,不喜欢别人的口味。
通常这意味着该组无法就格式达成一致,因此格式化不会发生,并且您最终会得到格式错误的代码。我个人认为这令人惊讶;选择几乎任何风格供组织使用我认为是一个胜利,因为现在每个人都知道会发生什么。考虑到程序员花费50%的时间阅读代码,这在我看来就像是一种严重的浪费。
AStyle被广泛使用。它有很多选项,所以即使是胡思乱想的人也可以获得他们想要的格式。
其中大多数是基于特殊的字符串黑客技巧,例如,使用正则表达式来查找关键字和特殊语法,例如花括号。以这种方式构建基本格式化器非常容易。在某种程度上,这种字符串黑客不能完全理解语言语法(如果大括号在字符串文字或某些字符串中被转义),它们可能会损坏您的代码(通常通过插入虚假的语法错误,有时通过破坏代码以更微妙的方式),因此格式化后重新编译和验证格式化模块非常重要。
我的公司制作unusual variety of formatters for programming languages based on parsing and regenerating the language text。这些工具具有不会破坏代码的属性(除非我们在构建解析器前端时出错,这比使用正则表达式的人少得多)。因此,您可以在完整的代码库中运行它们,而不必担心会破坏任何内容。
我们倾向于选择比Astyle更少的选项,尽管其中许多选项会让您在各种“典型”场所放置大括号(如果在该语言中很重要,例如PHP或Java)。但是即使像Python这样的无支撑语言也可以有关于大括号之外的其他内容的布局规则,例如如何缩进复合条件表达式等等。我们的工具通常都有这些。