【发布时间】:2022-02-14 11:16:16
【问题描述】:
我正在开发一个 git diff 解析器。主要任务是查找所有更改的函数签名。有时在带有@@@ ...的块行中。@@@ 包含这些信息,但有时不包含。 上次我在 greet() cout 消息中进行了更改,它在第一张图像上显示为更改的行并且它是正确的,但在 @@@... 行上方出现“void functOne() {”并且没有更改。 第二张图是关于测试 git diff 的虚拟 cpp 源代码。
主要问题是
如何列出所有更改的函数签名?
为什么有时会出现函数名不变?
为什么有时没有出现与@@@....一致的任何函数名称/签名?
【问题讨论】:
-
您确实注意到,如果不解析整个文件,您就无法确定没有 100% 的确定性? “函数”可能只是在多行注释或跨越多行的字符串文字中注释掉的东西......更不用说预处理器宏产生函数签名的可能性(甚至可能没有定义在您正在分析的文件中)...
-
另请注意,显示的代码似乎缺少分号。如果要解析的代码在语法上无效,那么解析过程肯定不会变得更容易。要正确执行此操作,您可能需要一个基于诸如 clang 的 libTooling 之类的工具,该工具可以解析正在比较的文件的版本并以合适的格式生成输出。
-
不要发布文字图片,尤其是代码!将文本作为文本复制粘贴到您的问题中。
-
我想到了一些关于解析的场景,但主要问题是那棵树以及关于 git diff 的所有内容,而不是关于解析。
标签: c++ git parsing diff signature