如何找到类似的代码片段?

Sum*_*uma 19 language-agnostic search maintenance code-duplication

有没有人有一些工具或一些推荐的练习如何找到一段与其他代码类似的代码?

我经常写一个函数或一个代码片段,我记得我之前已经编写了类似的东西,我想重用以前的实现,但是使用纯文本搜索并没有透露任何东西,因为我没有使用变量名称完全一样.

具有相似的代码片段会导致不必要的代码重复,但是如果代码库很大,则无法将所有代码保留在内存中.是否有任何工具可以对代码进行某些分析,并在功能方面标记片段或功能"相似"?

考虑以下示例:

  float xDistance = 0, zDistance = 0;
  if (camPos.X()<xgMin) xDistance = xgMin-camPos.X();
  if (camPos.X()>xgMax) xDistance = camPos.X()-xgMax;
  if (camPos.Z()<zgMin) zDistance = zgMin-camPos.Z();
  if (camPos.Z()>zgMax) zDistance = camPos.Z()-zgMax;
  float dist = sqrt(xDistance*xDistance+zDistance*zDistance);
Run Code Online (Sandbox Code Playgroud)

  float distX = 0, distZ = 0;
  if (cPos.X()<xgMin) distX = xgMin-cPos.X();
  if (cPos.X()>xgMax) distX = cPos.X()-xgMax;
  if (cPos.Z()<zgMin) distZ = zgMin-cPos.Z();
  if (cPos.Z()>zgMax) distZ = cPos.Z()-zgMax;
  float dist = sqrt(distX*distX +distZ*distZ);
Run Code Online (Sandbox Code Playgroud)

在我看来,这已经被多次询问和回答:

/sf/ask/14292421/

如何在开发过程中检测代码重复?

我建议在这里关闭重复.


实际上我认为这是一个更普遍的搜索问题,如:如何在StackOverflow上询问问题?

Raz*_*zie 10

你可以使用Simian.它是一个工具,可以检测Java,C#,C++,XML等中的重复代码(甚至是普通的txt文件).它甚至可以很好地集成在像CruiseControl这样的工具中.