簡體   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