32 votos

Conscientes del contexto de mezcla?

¿Hay alguna herramienta de comparación y combinación de lenguajes de programación, que trabaja en una sintaxis consciente de la forma (como XML, Herramienta de comparación), haciendo más que comparar la línea-por-línea (y, opcionalmente, ignorando los espacios en blanco).

Estoy interesado en un programa siguiendo la sintaxis del lenguaje y delimeters, lo que sugiere cambios sin romper la corrección sintáctica, o de agrupación de instrucciones separadas a través de varias líneas. Ejemplo de comportamiento sería:

*en caso de encontrar a un if(){ que presenta un extra de nivel de anidamiento automáticamente el paquete de la llave de cierre, } varias líneas de abajo con ella.)

*mantener la coincidencia de los elementos de la sintaxis juntos, evitar la estupidez como la eliminación de un bloque tiende a crear:

 int function_A()
 { 
     int ret;
     ret = something;
     ret += something_else;

      return ret;
  }

  int function_B()
  { 
     if(valid)
     {
         int ret;
         ret = something;
         ret += something_else;

          return ret;
      }

       else return -1;
  }

Personalmente, me encantaría encontrar un software capaz de manejar sintaxis de C++, pero saber acerca de las soluciones para otros idiomas sería interesante también.

20voto

Myster Puntos 3842

Una "nueva" participante en este espacio Semántico de Mezcla.
Idiomas soportados, desde el sitio web:

Empezamos con C#, luego VB.Net y más tarde se lanzó Java. Después de que C, C++, Objective-C, JavaScript, Delphi... El orden depende de usuario comentarios

14voto

hlovdal Puntos 11039

Mientras KDiff3 no se compara elementos de sintaxis en una gramática de contexto, que tiene un mayor granularidad que "toda la línea ha cambiado" y destacando exactamente qué partes dentro de una línea que está cambiado.

Y en mi experiencia, tiene muy buena algoritmo para la detección de cambios. Dado su ejemplo anterior, correctamente compara function_A y function_B fuera de la caja:

Comparision of function_A and function_B

Y aún así, en caso de que el algoritmo no coincide con lo que usted desea, por ejemplo, como la siguiente:

Comparision of old and new function_A

siempre se pueden reemplazar de forma manual mediante la colocación de marcas de sincronización donde se quiere realizar la comparación.

Alternativa 1:

Comparision of old and new function_A with sync1

Alternativa 2:

Comparision of old and new function_A with sync2

11voto

typo.pl Puntos 5906

Suena como que usted estaría interesado en Bram Cohen (creador de BitTorrent) Paciencia Diff (algoritmo que se utiliza en el bazar sistema de control de versiones).

Ver El diff problema ha sido resuelto y, especialmente, la Paciencia Diff Ventajas:

Extracto de segundo enlace:

Otra de las ventajas de la paciencia diff es que con frecuencia no coincide con las líneas que simplemente no podía comparar. Por ejemplo, si usted ha reescrito por completo de una sección de código que no debería coincidir las líneas en blanco en cada versión, como este ejemplo muestra. Por último, hay un ejemplo:

 void func1() {
     x += 1
 }

+void functhreehalves() {
+    x += 1.5
+}
+
 void func2() {
     x += 2
 }

Que es sencillo y obvio, pero con frecuencia diff algoritmos se interpretan como este:

 void func1() {
     x += 1
+}
+
+void functhreehalves() {
+    x += 1.5
 }

 void func2() {
     x += 2
 }

9voto

Josh Kelley Puntos 24438

Más allá de Comparar con algunos de lo que estás preguntando. No mantener la corrección sintáctica o comparar el lenguaje de bloques en un tiempo, pero se puede hacer lo siguiente:

  • Algunos comprensión de la sintaxis del lenguaje, por lo que puede hacer el resaltado de sintaxis de comparación de archivos, y también puede reconocer y, opcionalmente, ignorar la importancia de las diferencias (como comentarios, incluyendo los comentarios multilínea).
  • Soporte para el uso externo de los programas de conversión para cargar y guardar los datos. Fuera de la caja, se admite el uso de este embellecer XML y HTML antes de comparar. Se podría configurar GNU Guión para estandarizar la sintaxis antes de comparar dos C archivos.
  • Opcional línea de pesos que le dan un mayor peso a la coincidencia, por ejemplo, llaves de cierre. Yo no he probado esta característica.
  • Los reemplazos, para omitir para una única sesión cada lugar donde old_variable_name de la izquierda fue reemplazado con new_variable_name a la derecha.

Es por lejos el mejor diff y combinación de la herramienta que he utilizado. Es también la plataforma de la cruz, barato ($30 para el estándar, $50 para pro), y tiene un muy generoso período de evaluación, por lo que vale la pena intentarlo.

6voto

Ira Baxter Puntos 48153

Consulte nuestros SmartDifferencer herramientas.

SmartDifferencers son específicos de cada idioma, impulsado por la calidad de la producción del lenguaje de los analizadores, construir ASTs, y comparar los árboles. Esto los hace completamente independiente de la disposición del texto y las observaciones formuladas; sorprendentemente, son inmunes a los cambios en el texto de los literales (radix, mueva el punto decimal+cambio exponente, diferentes secuencias de escape) si el valor real representada por la literal no es diferente. El resultado es reportado en la sintaxis del lenguaje de términos, y plausible edición de acciones (mover, copiar, insertar, eliminar, cambiar el nombre del identificador dentro del bloque).

Hay versiones para C#, Java, C++, Python, y una variedad de otros idiomas. Hay ejemplos de cada uno de estos en el sitio web.

Un SmartDifferencer existe para C, pero el análisis de C archivos sin la completa línea de comandos del compilador es a veces problemática, por lo que a veces falla y tienes que retroceder hasta los más primitivos comparar herramientas, como diff. Estamos trabajando para mejorar esta situación.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X