2009-06-17 2 views
6

svn에서 커밋주기를 수행 할 때마다 내 의견을 쓸 때 diff를 검사합니다. 나는 diff를 보여줄 때 수정 한 실제 함수를 보여주는 것이 정말 좋을 것이라고 생각했습니다.커밋 중에 C++ 함수를 표시하기 위해 svn diff 가져 오기

나는 -p 옵션이 변경 사항이있는 C 함수를 표시한다고 언급했는데, -p 옵션을 일부 C++ 코드와 함께 사용하려고했을 때 대개 액세스 지정자 (private , 공개, 보호 된 등), 끔찍하게 편리하지 않습니다.

-p와 동일하게 사용자 지정 정규식을 사용하는 diff에 -F 옵션이 있음을 확인했습니다. 궁금 해서요 : C++ 함수와 일치하는 간단한 정규식이 있습니까?이 작업을 수행하는 데 필요한 모든 것이있는 것처럼 보입니다.

나는 이것에 대해 약간의 시간을 보냈지 만, 작업은 위기 상황에 처해 있으며 많은 사람들이 유용하다고 생각하는 것처럼 보였으므로 여기에 게시 할 것이라고 생각했습니다.

편집 : 나는 슬램 - 덩크 잡기 - 모든 정규식을 찾고있는 것이 아니라 단순히 지역 diff 위의 가장 가까운 함수 정의를 찾을 수있는 뭔가가 표시됩니다. 그것이 완벽 할 곳이 거의 없을 것이라는 사실, 그리고 다소 버그가 있다는 것은 나에게 괜찮습니다. 바로 그것이 작동하는 한 아마 시간의 60 %가 중요한 생산성 향상 IMHO가 될 것입니다.

답변

3

있습니까? No.

C++과 일치하는 (복잡한) 정규식이 있습니까? 어쩌면 하나를 쓸 수도 있습니다.

하지만 정규식은 쉽게 그런 작업 (어떤 종류의 익살 맞은 성냥을 원한다는 것을 전제로)도 아니며 그러한 작업을위한 올바른 도구도 아닙니다.

그냥 case과 같은 생각. 이 물건들을 어떻게 처리할까요?

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

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

유일한 실제 해결책은 yacc/lex를 사용하는 파서를 사용하는 것입니다. 당연히 귀하의 유스 케이스에 대해서는 아무 것도하지 않습니다.

그래서 하나 함께 코드에서 대부분의 기능 서명에 맞는 몇 가지 불완전한 정규식을 해킹

당신은 나는이 의견을 커밋 추가하는 습관을 추천 할 것이 단지에 당신의 커밋을 적용 할 거라면
+0

흠 ... 나는 이것에 대한 해결책이 내가 생각했던 것보다 훨씬 복잡하다고 생각한다. –

1

TortoiseSVN을은 C++ 파일을 커밋 대화 상자에서 자동 완성 지원을 위해 다음과 같은 정규 표현식에를 사용

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

그래도, 그들이 얼마나 정확하게 모른다.

+0

이들은 s ** t입니다. 'void hallo() {'가 함수의 서명으로 인식되지 않는다. – jitter

+0

거기에 ::를 본 네임 스페이스 선언이 필요한 것처럼 보입니다. – Joey

+0

그러나 나는 어떤 것도 제공하지 않는다 :) namespace std; – jitter

1

나는이 작업을 수행 할 SVN의 옵션을 알고하지 않으며, 정규식 기반 솔루션 가능성이 다음 중 하나 이상이 될 것입니다 : 많은 코드에

  • 악몽 및 유지 관리 의 특별한 경우
  • 잘못된, 누락 된 몇 가지 유효한 C++ 기능 당신은 이것에 대한 파서의 일종이 필요

. 기술적으로 가능한 모든 정규식의 경우를 열거 할 수 있지만 구문 분석기를 작성하는 것이이 문제를 해결하는 올바른 방법입니다. 당신은 내가 ANTLR을 확인 거라고 자신 솔루션을 롤 할 시간이 있다면, 그들은 몇 가지 C/C++ 문법이 페이지에서 사용할 수 있습니다 :는 C++ 함수와 일치하는 간단한 정규식

ANTLR Grammar Lists

2

기능, 예를 들면 :

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

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

로는 당신에게 능 동안 표시됩니다 n 수정 사항에 대한 귀하의 의견입니다. 보너스로 다른 사람들이 당신이하고있는 것을 이해할 수 있습니다.

+0

+1, 좋은 out-of-the-box 응답; 어쨌든해야 할 일이 아닐까요? –

+0

네, 일반적으로 글로벌 커밋 코멘트의 중요성을 과대 평가하고 인라인 코멘트의 중요성을 과소 평가한다고 생각합니다. –

+0

좀 찾고 있었는데, 여전히 형태의 함수 호출을 잡을 간단한 정규식을 찾고 있었다 : :: (). 그와 일치하는 것을 생각해 낼 수 있습니까? –