diff - studio - ¿Existe una herramienta de diferencias(parche) que tenga en cuenta la sangría?
visual studio installer (4)
Estoy usando regularmente el parche gnu-utils y diff. Usando git, a menudo hago:
git diff
A menudo, los cambios simples crean un parche grande porque lo único que cambió fue, por ejemplo, agregar un bucle if / else y todo lo que está dentro está sangrado a la derecha.
Revisar un parche de este tipo puede ser engorroso porque solo la comparación manual línea por línea puede indicar si algo ha cambiado esencialmente dentro del código sangrado. Es posible que estemos hablando solo de unas pocas líneas de código, o de docenas (o mucho más) de código anidado. (Lo sé: tal función hipotéticamente grande sería mejor dividida en funciones más pequeñas, pero eso no viene al caso).
¿No puede GNU diff / patch tener en cuenta cuando el único cambio dentro de un bloque de código es la sangría y dejarle saber al desarrollador?
¿Hay alguna otra herramienta de diferencias que funcione de esta manera?
Edit: Ok, hay --ignore-space-change
pero luego estamos en una situación u otra: o tenemos un parche más legible por humanos o tenemos un parche completo que la máquina sabría cómo leer. ¿No podemos tener lo mejor de ambos mundos con una herramienta de diferencias más elaborada que muestre los cambios en el espacio humano por lo que son, a la vez que permite que la máquina aplique el parche completamente?
Con GNU diff puede pasar -b
o --ignore-space-change
para ignorar los cambios en la cantidad de espacio en blanco en un parche.
Si usa emacs y se le ha enviado un parche, también puede usar Mx diff-ignore-whitespace-hunk
para reformatear el parche para ignorar el espacio en blanco en un trozo en particular. O diff-refine-hunk
para resaltar cambios a nivel de personaje por personaje, lo que tiende a señalar la "carne" de un cambio.
En cuanto a la aplicación de parches, puede usar -l
o --ignore-whitespace
con el parche GNU para ignorar los cambios de tabulaciones y espacios. Solo ten cuidado con el código Python :-)
Intento no realizar cambios de sangría en todo el archivo en el mismo compromiso que otros cambios. Y confirmo los cambios de sangría en una confirmación por separado antes o después, con un mensaje de confirmación "Solo sangría modificada", para dejarlo claro de modo que no sea necesaria una inspección manual de diferencias, para ver si se cambió algo más.
No sé sobre git diff
. Pero una herramienta similar a la diferencia que comprende no solo la sangría sino que, de hecho, cualquier cambio de diseño en su idioma de destino es nuestro Smart Differencer .
Esta herramienta analiza las versiones anterior y posterior de su código de la misma forma que lo hace el compilador, y compara los árboles de sintaxis resultantes, por lo que no se ve afectada por los cambios en el espacio en blanco (excepto los espacios en blanco semánticamente importantes como la sangría de Python) de cualquier tipo, insertado o comentarios eliminados, o incluso cambio de radix en constantes.
El resultado es un informe en términos de acciones de edición del programador ("mover, insertar, eliminar, copiar, renombrar") sobre estructuras de lenguaje (expresiones, declaraciones, declaraciones, bloques, métodos, ...) en lugar de "insertar línea" o "eliminar línea".
Para lo que vale la pena, usar git difftool con una herramienta como xxdiff
o xxdiff
hace que el diff sea mucho más legible.