为什么IDE不支持动态格式化?

时间:2009-05-22 16:08:18

标签: ide formatting

鉴于围绕各种代码格式样式的所有神圣战争,以及许多公司严格的格式化要求,为什么IDE不允许动态重新格式化代码?
我的意思是让IDE格式化代码,就像每次用户想要的那样,并保存代码而不需要任何格式化。 (好吧也许换行,这样差异仍然很容易)
用户不必担心遵守编码标准,人们不会因为没有按照他们喜欢的方式格式化代码而变形,并且格式化更改不会显示在存储库差异中。登记/> 必须有一些关闭它的机制,所以它不会搞砸旧的,预先格式化的代码,但除此之外,是什么阻止它成为标准功能?

编辑:我知道有些IDE具有重新格式化功能,但这会导致几乎同样多的问题 - 源代码控制差异变得几乎无用,因为实际的更改会在无关紧要的格式更改中丢失,并且不同的标签字符宽度仍然会使事情失去对齐。此外,它不允许程序员使用他们首选格式的代码。

10 个答案:

答案 0 :(得分:9)

我认为Eclipse允许您根据自己的喜好格式化代码。

编辑:是的,Java Code Formatter根据您在项目中设置的规则进行格式化。

答案 1 :(得分:9)

因为大多数人都希望看到代码,因为它将被提交。除非您用来查看代码的所有工具(差异程序,grep,基于Web的源存储库查看器等)了解如何以相同的方式动态格式化代码,否则当您查看时,您将会被不同的格式混淆它在您的IDE与其他工具中。

我同意如果我们有更多的结构编程工具而不是固定宽度的文本工具会很好,但是它需要更新工具链中的所有内容才能真正使其工作。

答案 2 :(得分:2)

我认为这也是一个好主意,但是作为源控制软件而不是IDE的功能。

代码可以存储为令牌列表,然后在复制到开发机器时重新构建。这回答了aleemb的观点,因为没有存储任何空白区域。可能需要更复杂的格式规则来处理所有情况。

它也回应了Martin Harris的担忧 - 你机器上的代码不会包含任何特殊字符,只是代币之间的空格。

答案 3 :(得分:1)

我认为在大多数情况下,实际机器上的文件应采用通用文本格式,能够打开我在记事本或其他任何工作中处理的任何源代码文件是非常有用的。方便的文本编辑器。因此,我不希望我的本地副本包含IDE解释为“这是缩进的任何特殊字符,请在此处使用标签或空格,因为您认为合适”。我的意见是,进行这种格式化的最佳点是源控制系统,你按照自己的格式检查格式化的文件,我按照我喜欢的格式检查它。

前段时间我问this question有关源代码控制工具无法理解代码的问题,而ascalonx的答案则指向source control in database。令人遗憾的是,这个想法似乎没有更多的牵引力,因为它可以解决我们的问题和much more。我是.NET开发人员,所以我现在非常喜欢这个,但显然Java世界中的Eclipse和IntelliJ正在接近这个理想(我不知道有多接近,因为我'从未使用过)

答案 4 :(得分:1)

我认为最大的障碍是重建源代码注释,因为它们没有正式的语义 - 我不是在讨论JavaDocs之类的东西,而是与源代码内联的注释。如果没有源代码注释的语义规则,整个概念就会崩溃。

当然可以对AST进行版本控制,但是如何将注释映射到AST节点?

一种天真的方法是将评论与语言中的陈述相关联,但如果我有一条适用于“接下来的3行”的评论然后有人将其中一条线移动到其他地方,该怎么办?评论在哪里?

答案 5 :(得分:0)

我确信有可用的程序和脚本以您指定的方式格式化代码。

虽然一些IDE支持重新格式化代码(Eclipse,Intellij for Java,Wing for Python,VS2007?for .net),即使他们不这样做,也应该只是在源代码上运行这些脚本。< / p>

答案 6 :(得分:0)

如果您能够处理以下情况,我认为这是一个好主意,但我的预感是它不是微不足道的,这意味着它不直观且可预测,这对用户体验不利。

如果代码是:

if(value!=null)

和动态格式化程序显示:

if (value != null)

我将其修改为:

if ((value != null) && (value.Length > 0))

然后另一位开发人员将其动态格式化为:

if ( (value != null) && (value.Length > 0) )

并更改代码中的其他一行并保存。以上格式是否也会保存?如何协调两个开发人员的不同格式首选项,因为他的新增内容将采用不同的格式。

你必须以一种通用格式存储,但即便如此,线条长度也会不同,开发人员会在80或100个字符包装的不同位置断开线条,而且会非常混乱。

答案 7 :(得分:0)

抄袭很难察觉:)

答案 8 :(得分:-1)

因为大多数人不关心代码的外观,只要它是一致的。

答案 9 :(得分:-1)

我认为现在是时候IDE开始将代码存储为XML,然后使用用户定义的XSL样式表在演示时格式化代码。