¿Una herramienta de diferencias con reconocimiento de diseño de archivos C?

Me gustaría una herramienta similar a diff que, en archivos determinados o forzados a ser tratados como fuentes C, respete los límites de la función. Es decir, no intenta que las líneas de una sola función coincidan con las líneas de diferentes funciones en el otro archivo.

Requisitos:

  • Se ejecuta en Linux

Deseable:

  • Gratis
  • Gratis
  • Tiene una GUI interactiva (como meld, kdiff3, etc.)
  • se conecta a herramientas relacionadas con diff
¿Parece que te refieres a "nombre de función" consciente, y solo quieres que compare funciones con el mismo nombre?
@IraBaxter: Sí, así es.
Sin respuestas en 60 días. ¿Está interesado en una herramienta que compare el archivo fuente según las estructuras del lenguaje (en lugar de las líneas de texto) [que no coincida específicamente con las funciones]?
@IraBaxter: Claro, eso es lo suficientemente cercano como para ser interesante.

Respuestas (1)

Podría considerar la familia de Smart Differencers de Semantic Designs (mi empresa).

Smart Differencer analiza el texto de origen de dos archivos para compararlos usando un analizador preciso de idioma (e incluso dialecto, por ejemplo, VisualStudio 2010), construye un árbol y luego encuentra una edición de árbol de distancia mínima para explicar en qué se diferencian, en términos de la gramática. Esto significa informar deltas como "expresión modificada", "sentencia movida", "variable renombrada" utilizando información precisa de líneas y columnas. Debido a que usa un analizador, ignora los cambios en los espacios en blanco (aunque puede pedirle que considere los comentarios como una opción que no es un espacio en blanco).

Se ejecuta de forma nativa en Windows, sin problemas en Linux en Wine utilizando los scripts sh proporcionados. es comercial La salida es similar a una diferencia porque es una herramienta de diferencias, en lugar de tener una GUI.

Smart Differencer funciona con muchos idiomas. Para la versión C, tiene algunas dificultades para analizar la fuente C con macros colocadas de manera incómoda y/o condicionales de preprocesador; tenga en cuenta que está tratando de analizar los archivos fuente sin el contexto de la unidad de compilación completa que normalmente alimenta a un compilador. Los archivos de encabezado del sistema tienden a ser bastante malos aquí, pero rara vez uno quiere compararlos. Puede mejorarlos brindándole algunos consejos sobre cosas que son macros; si está dispuesto a modificar su código fuente un poco, una vez, al mover condicionales incómodos, puede resolver este problema.

No es exactamente lo que OP quiere, pero el núcleo parece coincidir.

... y puedes limitar las posibles operaciones? por ejemplo, "no mueva las declaraciones dentro o fuera de las funciones"?
Los Smart Differencers conocen la gramática pero no los límites de las funciones. Esa es una especie de solicitud de función interesante :-}