[英]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 中的选项会执行此操作,基于正则表达式的解决方案可能是以下一项或多项:
为此,您需要某种解析器。 枚举所有可能的正则表达式情况在技术上是可行的,但编写解析器是解决此问题的正确方法。 如果您有时间推出自己的解决方案,我会查看 ANTLR,他们在此页面上提供了几种 C/C++ 语法:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.