每当我在svn中执行提交循环时,我会在编写注释时检查差异。我认为在显示差异时显示我进行修改的实际功能真的很棒。
我检查了this page,其中提到-p选项将显示更改所在的C函数。但是,当我尝试将-p选项与某些C ++代码一起使用时,它通常会返回访问权限说明符(私人,公共,受保护等),这不是非常方便。
我注意到diff的-F选项与-p相同,但是使用了用户指定的正则表达式。 我想知道:是否有一个简单的正则表达式来匹配C ++函数?似乎只需要这一切就可以实现这一点。
我会花一些时间自己看这个,但是工作处于紧缩模式,这似乎是很多人会觉得有用的东西,所以我想我会在这里发布。
编辑:我不是在寻找一个满贯扣篮的正则表达式,但是只需在区域差异上方找到最近函数定义的东西就会显示出来。事实上它不会完美,而且有些马车对我来说没问题。只要它正常工作,就像60%的时间可以显着提高生产力恕我直言。
答案 0 :(得分:3)
是否有一个简单的正则表达式来匹配C ++函数?否。
是否存在匹配C ++的(复杂)正则表达式。也许或者可以写一个。
但我会说正则表达式既不容易达到这样的任务(假设你需要某种匹配),它们也不适合这样的任务。
想想case就像这样。你会怎么处理这些东西。
void (*function(int, void (*)(int)))(int);
func1(int), func2(double); double func3(int);
唯一真正的解决方案是使用yacc / lex的解析器。对于您的用例当然不会做任何事情。
所以要么修复一些不完整的正则表达式,它适合代码中的大多数函数签名
答案 1 :(得分:2)
如果您要将此仅应用于您的提交,我建议养成向该函数添加提交注释的习惯,例如:
void something ()
{
...
some thing = 1;
...
}
到
void something ()
// last change by me: a better value for thing
{
...
some thing = 2;
...
}
将显示您的评论功能和。作为奖励,其他人将能够理解你在做什么。
答案 2 :(得分:1)
TortoiseSVN在其C ++文件的提交对话框中使用以下正则表达式来自动完成支持:
.h, .hpp, .hxx = ^\s*(?:class|struct)\s+([\w_]+)|\W([\w_]+)\(
.cpp, .c, .cxx = \W(([\w_]+)::([\w_]+))|\W([\w_]+)\(
我不知道他们有多准确。
答案 3 :(得分:1)
我不知道SVN中会有这样做的选项,基于正则表达式的解决方案可能是以下一种或多种:
你需要某种解析器。从技术上讲,可以枚举所有可能的正则表达式案例,但编写解析器是解决此问题的正确方法。如果你有时间推出自己的解决方案,我会查看ANTLR,他们在这个页面上有几个C / C ++语法: