2010-08-10 18 views
16

¿Hay alguna herramienta de diferenciación (idealmente GUI) que tenga en cuenta la sintaxis?syntax aware diff tools?

Como un ejemplo del tipo de cosas que estoy buscando, sigo encontrando que mi señorita herramienta actual se alinea código repetitivo:

Foo = { 'hello': 'world', | Foo = { 'hello': 'world', 
     'goodnight': 'moon' |   'goodnight': 'moon' 
     }      < 
           < 
Bar = { 'picture': 1000,  < 
     }      |   } 

Me gustaría tener una herramienta que tratar de hacer aparatos que emparejan en un lado, alinear con los apoyos coincidentes en el otro.


Editar: Estoy buscando una herramienta que pueda detectar automáticamente esa condición y corregir su alineación.

+0

"arreglar"? ¿Quieres decir identificar las llaves correctamente o de alguna manera modificar el código fuente? –

+0

@Ira: Estoy buscando el primero. – BCS

+0

Basado en la discusión en otras respuestas, BCS parece querer solo una solución a BeyondCompare, o una herramienta de diferencia de concientización de sintaxis basada en GUI. –

Respuesta

0

Beyond Compare le permitirá volver a alinear las líneas que los desajustes. Por lo general, tengo buena suerte con las líneas correspondientes.

+0

Estoy usando BC y estoy buscando algo automático. – BCS

0

me gusta DiffMerge de Fuente del engranaje.

+0

De acuerdo, uso esto también, es una gran herramienta. –

+0

No veo ninguna indicación en los documentos de lo que estoy buscando. Puede definir elementos coincidentes pero no parece que les permita anidar y no dice que los use como sugerencias de alineación. – BCS

3

No GUI basada, pero completamente sintaxis impulsado: Smart Differencer herramientas de mi empresa desde hace muchos langauges (incluiding Java, C#, C++, PHP, Python, JavaScript, HTML, XML, COBOL, ...)

El Smart diferenciador un análisis sintáctico del texto original como el compilador, por lo que entiende que la sintaxis del lenguaje y las estructuras de la forma en que el compilador hace. Compara estas estructuras (utilizando AST) para determinar la "menor distancia de edición" en términos de acciones de edición (mover, copiar, eliminar, reemplazar, renombrar-identificador-en-bloque) en estas estructuras y reportarlas.

En el ejemplo, sería conocer la llave de cierre a la derecha pertenece a foo, no bar, y habría que decir que toda la declaración que implica bar fue suprimido simplemente.

estilo La salida se Diff-al igual que si se quiere alimentar el resultado a otra herramienta, o leer más humano si se desea examinar directamente.

+0

Suena realmente limpio, pero tanto sobre matar como no exactamente en la dirección correcta. – BCS

+2

@BCS: No sé sobre el exceso.Si no recoge las estructuras del lenguaje, no puede hacerlas coincidir; No conozco ninguna alternativa que pueda acercarse, a menos que lo único que desee sea solo la coincidencia de grupos. ¿Cuál no es la parte correcta de la dirección? –

+1

@Ira: coincidencia de corchetes y (reglas de alineación de alineación similares) es todo lo que quiero (supongo que "sintaxis consciente" es un poco fuerte para lo que estoy buscando) y estoy queriendo una diferencia de texto, solo una que hace un mejor trabajo de averiguar qué hay de nuevo frente a viejo. – BCS

0

La herramienta se Pretty Diff sintaxis cuenta automáticamente. El proceso que utiliza es minificar el código para eliminar comentarios y luego embellecer el código para normalizar el formato y el espacio en blanco. Sin embargo, solo admite algunos lenguajes web del lado del cliente. Esta herramienta funciona en el lado del cliente para que pueda probarla en su navegador y hay una página de muestra que contiene algunas demostraciones.