【问题标题】:Find TODOs with file names and line numbers in git diff在 git diff 中查找带有文件名和行号的 TODO
【发布时间】:2021-10-20 05:25:36
【问题描述】:

我想要一个简单的 shell 命令来查找我当前分支和存储库主分支之间差异中的 TODO。

在我们的团队中,我们达成了一项协议,即我们不会向代码库添加新的待办事项,但我们的存储库中仍然有几个较旧的待办事项。然而,当我工作时,我喜欢在代码中留下一个待办事项,这样我就不会忘记查看或清理东西。

我已经可以实现的是使用grep 在差异中显示TODO 项目。例如,如果主分支称为develop(但老实说,它与mainmaster 的工作方式相同:

# command
git diff develop HEAD | grep TODO

# output
+      // TODO: How to handle when summary is missing?
+      // TODO: How to handle this error? Exception?
+          // TODO: add function to build basket, maybe?
+        // TODO: Find a better place to set up this mock

这是一个好的开始,但如果文件名(包括这些待办事项)也被打印出来会更好。我当前方法的另一个问题是,如果在 TODO 之后没有消息,我就无法在我的项目中真正搜索它(如果代码库有之前添加的 TODO(并且是主分支的一部分)

【问题讨论】:

  • 使用 git grep 在每个文件的已提交(HEAD 副本)中为 TODO 运行 grep(带有行号和文件名)。使用 git grep 在每个文件的工作副本中为 TODO 运行另一个 grep(带有 #s 行和文件名)。比较两个结果并查找插入(新的 TODO)和删除(现在消失的旧 TODO)。
  • @LMC 谢谢你的链接,但这是一个不同的问题......
  • 使用 git diff 的起点可以是:git diff -U0 -G TODO。这应该将您的差异缩小到包含单词 TODO 的部分

标签: bash git shell


【解决方案1】:

Torek's suggestion 看起来有点像这样:

# print TODOs from HEAD that are not in develop
comm -23 \
  <(git grep -nFw TODO develop | sed 's/[^:]*://' | sort) \
  <(git grep -nFw TODO HEAD | sed 's/[^:]*://' | sort)

这有一些问题。由于grep -n 以行号为每行前缀,因此也会列出通过删除/插入行移动的develop 中的现有TODO。此外,带有换行符的文件名没有正确处理,但这可能无关紧要。

我认为最好的选择是解析git diff的输出:

# print TODOs from HEAD that are not in develop
git diff develop HEAD | awk '
  /^diff / {f="?"; next}
  f=="?" {if (/^\+\+\+ /) f=$0"\n"; next}
  /^@@/ {n=$3; sub(/,.*/,"",n); n=0+$3; next}
  /^\+.*TODO/ {print f n ":" substr($0,2); f=""}
  substr($0,1,1)~/[ +]/ {n++}'

过滤后的输出如下所示:

+++ b/someFile
5:    // TODO: implement this
+++ "b/another file with spaces and a new\nline"
123:TODO in block comment
126:// multiple TODOs in same file

b/ 来自git diff,其中b 代表第二棵树(此处为HEAD)。所有行号均来自HEAD

如果您有很多更改但几乎没有TODOs,则使用git diff -U0 -G TODO 可以大大加快速度

【讨论】:

  • 是的,您必须在进行“新功能”更改时去掉行号,然后在显示新功能部分时将它们放回原处。那个 awk 脚本可能更好,尤其是在 TODO 行不多的情况下。
猜你喜欢
  • 2014-08-18
  • 1970-01-01
  • 2020-09-07
  • 2012-01-23
  • 2014-04-03
  • 2012-04-08
  • 2019-03-01
  • 2011-12-07
相关资源
最近更新 更多