这个问题与其说是技术问题,不如说是寻求建议,找到合适的方法,而不会造成伤害。
假设如下:
- 我们有一个用Perl开发的大应用程序。
- 我们想开始在命令行上使用perltidy来强制统一 格式的样式/规则
- 我们有很多分支,我们不知道确切的时间合并到主分支。它们也应该在合并之前或之后进行整理
- 我们想要避免任何由于格式化导致的提交冲突。
我想在子程序级别开始格式化,但我没有在perltidy中找到这样的功能。还有另一个功能"跳过选定的代码部分",但现在我可能想要相反的功能——只格式化选定的代码部分。这个想法是,当开发人员触及部分代码时,他/她将只整理修改过的部分。
最好是找到一种方法,在不破坏开发周期的情况下格式化整个项目,并确保我们不会破坏代码的任何部分(在合并期间)。我们有单元测试,但代码的某些部分可能仍然未被发现。
让我也澄清一下,团队中的每个人都可能使用不同的编辑器。例如,我使用Sublime Text 3和SublimePerlTidy。其他人则使用Kate、Atom或VIM。一种正确的方法似乎是只格式化我们所触及的代码片段@xxfelixxx(谢谢!)
- 定义编码标准并创建
.perltidyrc
与所有开发人员共享。- 让整理成为团队为其项目执行的任务之一(以及测试和代码审查),因此他们整理/测试/审查他们接触的代码。
- 测试代码非常好。整理可能会引入微妙的bug,所以最好是少量的可管理的(而不是只是整理整个代码库,然后想知道为什么事情停止工作…)
- 整齐的提交应该是独立的,没有其他的更改,这样回归就可以分别与代码更改或整齐的更改绑定在一起。git bisect对于发现错误的提交非常有用。
对于我自己的perltidy使用,使用emacs,我倾向于通过突出显示一个区域(使用C-space
创建标记,导航以突出显示一个区域,然后运行我映射到perltidy-region
的M-p
)来一次整理小块代码。要使其工作,安装perltidy
并将以下内容添加到.emacs
文件中:
(defun perltidy-region ()
"Run perltidy on the current region."
(interactive)
(save-excursion
(shell-command-on-region (point) (mark) "perltidy -q" nil t)))
(defun perltidy-defun ()
"Run perltidy on the current defun."
(interactive)
(save-excursion (mark-defun)
(perltidy-region)))
(global-set-key "M-p" 'perltidy-region)