3 puntos por GN⁺ 2024-03-22 | 1 comentarios | Compartir por WhatsApp

Herramienta de diferencias estructurales Difftastic

  • Difftastic es una herramienta CLI de diferencias que entiende la sintaxis y compara archivos con base en la sintaxis en lugar de hacerlo línea por línea.
  • Ofrece diferencias precisas y fáciles de leer para las personas.

Entender qué cambió realmente

  • Difftastic usa tree-sitter para analizar el código.
  • A diferencia de las diferencias de texto basadas en líneas, entiende cuando la representación interna no ha cambiado.

Ignorar cambios de formato

  • Cuando un formateador de código decide dividir algo en varias líneas, muestra solo lo que realmente cambió.

Visualización de cambios de envoltura

  • Si se agregó un wrapper, Difftastic hace coincidir con precisión los delimitadores.
  • Incluso si se modifica el contenido interno, puede mostrar el wrapper agregado.

Números de línea reales

  • Muestra los números de línea reales del archivo tanto antes como después del cambio.

Demo de 60 segundos

Compatibilidad con lenguajes de programación

  • Compatible con muchos lenguajes, como C++, C#, Clojure, Dart y Erlang.
  • La lista detallada de lenguajes compatibles puede consultarse en el manual.

Compatibilidad con formatos de archivo

  • Compatible con varios formatos de archivo, como HCL, HTML, JSON y YAML.
  • La lista detallada de formatos de archivo compatibles puede consultarse en el manual.

Compatible con Git

  • Las instrucciones de configuración para Git pueden consultarse en el manual.

Completamente de código abierto

  • Difftastic tiene licencia MIT.
  • Se puede descargar, modificar y compartir con amigos.

Autor

  • Creado por Wilfred Hughes con Emacs y café.

Opinión de GN⁺

  • Difftastic ayuda a que los desarrolladores comprendan con mayor claridad los cambios al identificar diferencias estructurales en el código.
  • En comparación con las herramientas diff tradicionales basadas en líneas, Difftastic permite comparaciones más sofisticadas gracias a funciones como entender la sintaxis del código e ignorar cambios de formato.
  • Como herramienta de código abierto, tiene el potencial de seguir mejorando mediante aportes de la comunidad, y ofrece la ventaja de poder modificarse y ampliarse libremente según las necesidades del usuario.
  • Otras herramientas con funciones similares incluyen git diff, la herramienta integrada de Git, o las herramientas de comparación integradas en IDE como IntelliJ IDEA de JetBrains, pero Difftastic ofrece un enfoque distintivo basado en la sintaxis.
  • Al adoptar Difftastic, puede ser necesario revisar los lenguajes de programación y formatos de archivo compatibles, así como llegar a un acuerdo dentro del equipo sobre el uso de la herramienta. Su uso puede mejorar la eficiencia de las revisiones de código y reducir malentendidos durante la colaboración.

1 comentarios

 
GN⁺ 2024-03-22
Comentarios de Hacker News
  • Introducción a la tecnología basada en Tree-sitter

    • Tree-sitter convierte el código en un AST (Abstract Syntax Tree, árbol de sintaxis abstracta) y proporciona una interfaz estándar para entregarlo a clientes como editores o herramientas de diff.
    • Gracias a esto, las herramientas no necesitan admitir directamente decenas de lenguajes; al soportar Tree-sitter pueden manejar automáticamente todos los lenguajes que Tree-sitter ya soporta.
    • Al desarrollar un nuevo lenguaje, si se crea un parser de Tree-sitter, todas las herramientas compatibles con Tree-sitter pasarán a soportar ese lenguaje.
    • Esta innovación está reduciendo trabajo duplicado en el desarrollo de herramientas compatibles con múltiples lenguajes y está creando un ecosistema de herramientas mejorado.
  • Cómo instalar y actualizar proyectos y herramientas de Rust

    • Se presenta una forma de instalar y actualizar proyectos basados en Rust mediante cargo.
    • mise-en-place es una alternativa a asdf, más rápida y flexible.
    • zoxide es una alternativa al comando cd; recuerda los directorios visitados por el usuario y permite moverse rápidamente mediante búsquedas por coincidencia parcial.
    • dust complementa a du y muestra qué directorios están usando más espacio en disco.
  • Experiencia de uso y opiniones sobre Difftastic

    • Se comparte la experiencia de usar Difftastic y se menciona que usar otras herramientas de diff resulta incómodo después.
    • También se explora la posibilidad de una herramienta de diff "semántico" que pueda comparar casos donde cambia la sintaxis pero el significado sigue siendo el mismo.
  • La practicidad de Difftastic

    • Se destaca que Difftastic muestra los números de línea reales de los archivos, y se menciona que esto es muy útil al usarlo junto con git diff.
  • Herramienta relacionada: diff2html

    • diff2html es una herramienta que muestra diffs en formato HTML en una pestaña del navegador mediante una CLI (Command Line Interface).
  • Experiencia usando la biblioteca Augeas

    • Se comparte una experiencia usando la biblioteca Augeas para detectar diferencias en archivos de configuración y permitir que los usuarios escriban listas de permitidos detalladas que no sean sensibles a la sintaxis.
  • Comparación con Semantic Merge

    • Semantic Merge no era open source, pero Difftastic sí lo es y ofrece un mejor diff.
    • Se expresa curiosidad sobre si existe algún plan de extender Difftastic con funciones de merge.
  • Regreso a icdiff

    • Se comenta que se probó Difftastic, pero se volvió a icdiff debido a problemas como aplicar un formato extraño a partes que no habían cambiado.
  • Problemas visuales de Difftastic

    • Se señala que al revisar archivos XML grandes es difícil distinguir visualmente las líneas y atributos modificados, y se menciona que hace falta documentación sobre cómo cambiar el estilo.
  • Tamaño de instalación de Difftastic

    • Se menciona que el paquete de Arch Linux pesa 7 MB, pero al instalarse aumenta a 80 MB, y que el binario difft por sí solo ocupa 78 MB.
    • En un dataset de ZFS que usa compresión LZ4 aparece como 17 MB, y se plantea la duda de por qué se incluye en el binario contenido que podría comprimirse.