如何 apply/use Perl::Tidy 与现有的 Perl 项目?

How to apply/use Perl::Tidy with an existing Perl project?

这个问题与其说是技术问题,还不如寻求建议以找到不会造成伤害的正确方法。

假设如下:

  1. 我们有一个用 Perl 开发的大型应用程序。
  2. 我们想开始在命令行上使用 perltidy 来强制统一 style/rules 用于格式化
  3. 我们有很多分店,我们不知道确切的时间 合并到master分支。在合并之前或之后,它们也应该以某种方式进行整理
  4. 我们希望避免格式化引起的任何提交冲突。

我想开始在子程序级别格式化,但我在 perltidy 中没有找到这样的功能。还有另一个功能“Skipping Selected Sections of Code”,但现在我可能想要相反的——只格式化选定的代码部分。这个想法是当开发人员接触部分代码时 he/she 只会整理修改的部分。

最好的办法是找到一种在不中断开发周期的情况下一次性格式化整个项目的方法,并确保我们不会破坏代码的任何部分(在合并期间)。我们有单元测试,但部分代码可能仍未被发现。

我还要澄清一下,团队中的每个人都可能使用不同的编辑器。例如,我将 Sublime Text 3 与 SublimePerlTidy. Other people use Kate or Atom or VIM 一起使用。一种正确的方法似乎是按照@xxfelixxx(谢谢!)

所指出的那样只格式化我们接触的代码片段
  1. Define a coding standard and create a .perltidyrc to share with all of the developers.
  2. Have tidying be one of the tasks that teams perform for their projects (along with testing and code review), so they tidy/test/review code they touch.
  3. Test the code very well. Tidying can introduce subtle bugs, so it is better in small manageable amounts (as opposed to just tidying the whole codebase, and wondering why things stopped working...)
  4. Tidy commits should be on their own, with no other changes, so that regressions can be tied to code changes or tidy changes respectively. git bisect is great for finding the offending commits.

至于我自己的 perltidy 用法,使用 emacs,我倾向于通过突出显示一个区域(创建一个标记 C-space,导航以突出显示一个区域,然后 运行 M-p 我已将其映射到 perltidy-region。要使其正常工作,请安装 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)