繁体   English   中英

获取 svn diff 以在提交期间显示 C++ function

[英]Getting svn diff to show C++ function during commit

每当我在 svn 中执行提交周期时,我都会在编写评论时检查差异。 我认为在显示差异时显示我在其中进行修改的实际 function 会非常好。

我查看了此页面,其中提到 -p 选项将显示更改所在的 C function。当我尝试将 -p 选项与一些 C++ 代码一起使用时,它通常返回访问说明符(私有、公共、 protected 等),这不是很方便。

我确实注意到 diff 有一个 -F 选项,它的作用与 -p 相同,但采用用户指定的正则表达式。 我想知道:是否有一个简单的正则表达式来匹配 C++ function? 似乎这就是让它工作所必需的。

我会花一些时间自己看看这个,但工作处于紧缩模式,这似乎是很多人会觉得有用的东西,所以我想我会把它贴在这里。

编辑:我不是在寻找灌篮高手正则表达式的东西,而是会显示区域差异上方最接近的 function 定义的东西。 事实上,它远非完美,而且有点马车,我觉得没问题。 恕我直言,只要它能正常工作,大约 60% 的时间就可以显着提高生产力。

是否有一个简单的正则表达式来匹配 C++ function? 不。

是否有一个(复杂的)正则表达式来匹配 C++。也许或者可以写一个。

但我会说正则表达式既不容易完成这样的任务(假设你想要某种 excat 匹配)也不是完成这样任务的正确工具。

想想这样的案例 你会如何处理这些东西。

void (*function(int, void (*)(int)))(int);

func1(int), func2(double); double func3(int);

唯一真正的解决方案是使用使用 yacc/lex 的解析器。 对于您的用例,这当然什么都不做。

因此,要么将一些不完整的正则表达式组合在一起,这些正则表达式适合您代码中的大多数函数签名

如果您打算仅将此应用于您的提交,我建议您养成向 function 添加提交评论的习惯,例如:

void something () 
{
    ...
    some thing = 1;
    ...
}

void something () 
// last change by me: a better value for thing
{
    ...
    some thing = 2;
    ...
}

将为您显示 function您对编辑的评论。 作为奖励,其他人将能够理解您在做什么。

TortoiseSVN 在其 C++ 文件的提交对话框中使用以下正则表达式来支持自动完成:

.h, .hpp, .hxx = ^\s*(?:class|struct)\s+([\w_]+)|\W([\w_]+)\(
.cpp, .c, .cxx = \W(([\w_]+)::([\w_]+))|\W([\w_]+)\(

不过,我不知道它们有多准确。

我不知道 SVN 中的选项会执行此操作,基于正则表达式的解决方案可能是以下一项或多项:

  • 编码和维护的噩梦,有很多特殊情况
  • 不正确,并且缺少几个有效的 C++ 函数

为此,您需要某种解析器。 枚举所有可能的正则表达式情况在技术上是可行的,但编写解析器是解决此问题的正确方法。 如果您有时间推出自己的解决方案,我会查看 ANTLR,他们在此页面上提供了几种 C/C++ 语法:

ANTLR 语法列表

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM