Español

Herramientas de desarrollo · Comparación de texto

Lo que 'Ignorar espacios en blanco' realmente ignora en una diferencia de texto línea por línea

· Cómo funciona

diferencia de texto flujo de trabajo del desarrollador espacio en blanco

Dos revisiones de texto alineadas con cambios de sangría atenuados pero ediciones de contenido preservadas
Ilustración original del vector ToolAcre

Desglosa los tipos de espacios en blanco que una comparación puede normalizar, desde sangría inicial hasta ejecuciones internas, y advierte dónde los espacios en blanco tienen significado y no deben ignorarse.

Cada línea cambió, pero nada realmente cambió: se abre con un archivo con nueva sangría de pestañas a espacios que se muestra como un muro de diferencias.

Un formateador cambia la sangría de cuatro espacios a dos espacios y una diferencia de línea pinta todo el archivo tal como ha cambiado. El cambio puede ser ruido visual, por lo que una vista que no tenga en cuenta los espacios en blanco puede ayudar al revisor a encontrar ediciones reales. Pero "el mismo texto sin espacios en blanco" no es lo mismo que "el mismo programa". Compare las vistas ordinaria y normalizada antes de aprobar una configuración o un archivo fuente.

Cuatro tipos de diferencia de espacios en blanco: separa la sangría inicial, los espacios finales, los tramos internos y las líneas en blanco, ya que cada uno es causado por una herramienta o hábito diferente.

Los cambios de espacios en blanco ocurren en varios lugares. La sangría inicial a menudo proviene del formato; espacios finales de copiar/pegar; los espacios repetidos o tabulaciones dentro de una línea pueden separar palabras o columnas; una línea en blanco puede dividir bloques. La opción Ignorar espacios en blanco de ToolAcre recorta cada línea y colapsa cada ejecución interna de espacios en blanco en un espacio para comparar. No elimina simplemente todos los espacios en blanco ni trata los diferentes recuentos de líneas como idénticos: dos líneas en blanco siguen siendo dos unidades de comparación a menos que otra operación las elimine.

Cómo ocurre la normalización antes de comparar: explica que la opción transforma cada línea a una forma canónica para hacer coincidir, mientras que el texto original es lo que lees.

Una clave de línea se calcula a partir del texto original antes de hacer coincidir: trim() elimina los espacios en blanco iniciales/finales y una expresión regular reemplaza las ejecuciones internas con un espacio. El algoritmo de diferenciación compara claves pero mantiene el texto original en las filas mostradas. Los prefijos y sufijos comunes se descartan antes de crear su tabla LCS, por lo que las pequeñas ediciones en documentos grandes no necesariamente requieren comparar cada línea entre sí. Hay un límite de 2000 líneas diferentes, porque una tabla de programación dinámica crece con la longitud de ambos lados.

Ejemplo resuelto: una función de Python con nueva sangría y un archivo YAML: muestra la opción de limpiar la vista de Python y luego ocultar un cambio de sangría de YAML que realmente altera la estructura del documento.

Imagine una función de Python cuyo cuerpo completo cambia de cuatro espacios a dos mientras permanece en el mismo nivel de anidamiento. Ignorar la sangría puede ocultar ese ruido de formato. En YAML, mover una clave debajo de services.web a debajo de los servicios cambia su mapeo principal aunque los caracteres de cada línea sean idénticos una vez que se recortan los espacios en blanco. Ejecute la opción en ambos fragmentos: la vista de Python puede volverse más fácil de revisar, mientras que el cambio de YAML puede desaparecer a pesar de cambiar el árbol de datos. Nunca utilice únicamente resultados que no tengan en cuenta los espacios en blanco para aprobar formatos que tengan en cuenta las sangrías.

Cuando los espacios en blanco son datos: enumera formatos donde los espacios tienen significado: YAML, Makefiles, bloques de código Markdown, exportaciones de ancho fijo y cadenas literales.

Los espacios son datos en sangría YAML, recetas Makefile, bloques de código Markdown y exportaciones de ancho fijo. Dentro de los literales de cadena, reemplazar varios espacios puede cambiar el texto visible para el usuario o un valor que está firmado o codificado. Incluso el código con formato generalmente flexible tiene contextos donde los espacios en blanco son importantes: los bloques de Python y los documentos aquí del shell son ejemplos obvios. La opción no puede inferir esos contextos porque ve líneas simples, no la gramática del idioma. Elíjalo sólo cuando comprenda el archivo que se está comparando.

Combinar las opciones de espacios en blanco y mayúsculas y minúsculas: describe cómo habilitar ambas reduce la comparación a las mismas letras en el mismo orden y lo que eso oculta.

La combinación de Ignorar espacios en blanco con Ignorar mayúsculas y minúsculas reduce la coincidencia a líneas cuyas letras y puntuación restantes coinciden sin tener en cuenta las mayúsculas y minúsculas o el espaciado. Esto puede hacer que un documento con mucho formato sea silencioso, pero también puede ocultar un identificador modificado que distingue entre mayúsculas y minúsculas, una clave de encabezado o una ruta del sistema de archivos. ToolAcre pone en minúsculas la clave de comparación sólo cuando activas esa segunda opción; todavía muestra el texto de la línea original. Cambie las opciones una a la vez para que pueda ver qué cambios se eliminaron.

Lo que esto no cubre: la opción compara líneas después de la normalización; no redistribuye párrafos, no detecta bloques movidos ni compara formatos en documentos enriquecidos

La función no redistribuye párrafos, detecta bloques movidos, compara la representación HTML ni decide si dos AST de programa son equivalentes. La diferencia de ToolAcre es programación dinámica LCS basada en líneas con recorte de prefijos/sufijos comunes, no el algoritmo de Myers descrito en algunos tutoriales de diferencias generales. En archivos pegados de gran tamaño, se detendrá en lugar de asignar una matriz ilimitada. Utilice un analizador que tenga en cuenta el idioma o una revisión de control de versiones para reclamos estructurales.

Conclusión: cámbielo, no lo establezca de forma predeterminada: recomienda ejecutar ambas comparaciones y muestra cómo la comparación de texto de ToolAcre le permite activar y desactivar la opción de espacios en blanco para el mismo par de textos.

Alternar Ignorar espacios en blanco como vista, no como verdad predeterminada. La comparación de texto mantiene todo lo que pega en el navegador, lo que le permite comparar ambas vistas de las mismas revisiones sin cargar un contrato o un archivo de configuración. Si un cambio desaparece en la vista normalizada, pregunte si el formato subyacente da significado a los espacios en blanco antes de decidir que era inofensivo.