[英]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.