我非常喜欢记录 IDE 功能的正确行为,这些功能对编码流程有微妙但重要的影响——比如自动完成选择和注释/取消注释代码,你可能没有意识到你在利用,但在结束时那天你比你可能做的多一点。我这样做是希望我必须使用的其他语言服务包含这些功能,从而改善我的日常编码生活。“真正的”智能缩进,即 Visual Studio 2008 C# 编辑器,就是这些功能之一。
基本的块代码缩进相当简单,可以在合理的时间内组合在一起,足以完成工作。另一方面,真正的智能缩进很可能是迄今为止我必须在 IDE 中实现的最具技术挑战性的任务,而且我已经实现了我的公平份额。即使是成熟的即时自动代码重新格式化也更容易;它只是按照 Smart Indent 来完成繁重的工作。
我正在寻找有关通用智能缩进算法的高级讨论。特别是,我正在寻找关于智能缩进策略的研究,或者对所有正常和“边缘”案例的客观描述,这些案例可以被测试以确保可重复、无错误的结果。最终,我想提供功能的详细工作流程、实际实现该功能的具体基础,并最终从中组装一个特定于语言的版本并将其集成到我的语言服务中。
PS:Visual Studio 2010 的 C# 编辑器在此功能中有几个小错误。我自己实现了它,我对打磨它所需要的工作有了全新的尊重。
编辑(8/25):我设法写下了我认为当智能缩进在代码注释中时应该如何处理事情的规则草案。我可能会从 C++/C# 的角度研究规则,但稍后它们应该能够针对其他语言的各个方面进行参数化。