前二天在升级 Android Studio 到 1.3.1 之后,发现了一个奇怪的问题。由于更新后 Android Studio 需要重启,但在 Android Studio 重启后,所有 FIXME 及 TODO 的注释无法呈现 Highlight 的效果,同时在 TODO 的 Tool Window 中也搜寻不到任可的 TODO 项目。
在检查过相关的设定之后,发现 TODO 的 Pattern 设定都被清掉了,难怪没有办法显示 Highlight 的效果,也搜寻不到任何的 TODO 项目,甚至连原本设定的 Filter 都因为失效而显示红色。
因为原本就没有定义额外的 Pattern,所以依照官网的说明,将以下二个预设的 Pattern 加回去后就恢复正常了。
- \btodo\b.*
- \bfixme\b.*
如果是像我一样有自己新增 Filter 的设定,在加完 Pattern 后还是要再重新修改 Filter 的内容。
事情本来应该就这样结束了,但其实案情并不单纯,就在某个需要下重启 Android Studio 后,TODO 的所有 Pattern 设定内容又被清除了!
由于这个功能在我进行开发工作时扮演了重要的角色,只好先放下手边的工作研究一下。之所以重要是因为在开发的时候不一定可以完美地依照需求或设计的顺序输入源代码,有可能会需要把缮打到一半的源代码搁着,先去完成其他部份。或是有可能需求或设计还不确定,先以仿造的逻辑来输入源代码做为替代,等不确定的部份有明确的结果后再回来调整源代码。
然而,在此时如果没有一个有系统的方式来标注源代码,完全依靠记忆力来找到这些待修改的源代码,是一个非常不可靠的方式。就算是以重新检视全部源代码的方式,也有可能因为分神而漏看,再者程式的规模大到一定的程度,这种方式就变成了一种精神上的折磨。
故意让程式编译失败是一个方法,但程式就会一直处于无法借由执行来确认程式是否正常运作的状态。反之,如果当初搁下的源代码没有编译上的问题,就有可能因为开发的负责人忘了修改,造成程式上线一阵子了,才发现程式其实没有完成就交付给使用者、更严重的可能已经造成了大量资料的错误。这在一般的软体开发项目中并不罕见,因为很多的项目是没有足够的资源做后续的验证与测试,以简单的 UAT 做把关、没有明显的问题就放行了。
在注释中使用 FIXME 或 TODO 是解决这项问题的好方案,可以用文字来说明源代码有问题的地方或是待完成的工作,绝大部份的 IDE 也都提供了 Highlight 的功能。比故意让程式编译失败要有人性,不用费神去回想为何编译会失败、程式要如何改正。是可以有效地在开发阶段的初期发现问题、降低系统运作问题的风险。当然,这也是要负责源代码的人有养成良好的习惯才会有效果,所以这个习惯应做为建立团队文化的重要规则之一。
有了好习惯,一旦没有了 Highlight 的功能,就没有办法很直觉地找到还有问题的源代码片断,同时因为 Tool Window 也失效、列不出清单,只能以搜寻的功能来替代,对工作效率来说是有不小的影响。
印象中之前重启 Android Studio 时并没有出现同样的问题,这个情况似乎是在我设定 Filter 之后才发生。我习惯把在上线前一定要修改的项目以 FIXME 标注、可以等上线后再思考解决方案的项目以 TODO 来标注。所以会需要在 TODO 的 Tool Window 中过滤 FIXME 和 TODO,以便了解在上线前还有多少部份的源代码是没有完成的,让我可以专注在 FIXME 的项目上。
根据这个需求我设了二个 Filter 分别只勾取其中一个 Pattern,让我可以在 TODO 的 Tool Window 来切换不同的清单。为了确认是不是设定 Filter 所产生的问题,我就将 Filter 全数删除了之后重启 Android Studio,果不其然 Pattern 这次就没有被清除掉了,这应该是一个 Android Studio 的 Bug 吧!
但如果是为了解决重启 Android Studio 后不清除 TODO Pattern,那不就没有办法使用 Filter 了吗!? 好吧!秉持着研究的精神,就在 TODO 的设定画面中试了几个不同的 Pattern 及 Filter 的组合,总算发现了一个 Workaround!
原本如果只有预设的二项 Pattern,一旦设定了 Filter 就会有重启后被清除的现象。但是在预设的二项 Pattern 外再加上一项自订的 Pattern,依我原本的条件设定 Filter 就可以在重启 Android Studio 之后保有重启之前的 Pattern 设定。
目前我工作的环境是 OS X 10.10.4 及 Android Studio 1.3.1,有类似问题的朋友可以参考看看。