3 pontos por GN⁺ 2024-03-22 | 1 comentários | Compartilhar no WhatsApp

Ferramenta de diferenças estruturais Difftastic

  • Difftastic é uma ferramenta de diff via CLI que entende sintaxe e compara arquivos com base na estrutura sintática, não por linha.
  • Ela fornece diferenças precisas e fáceis de ler por humanos.

Entendendo o que realmente mudou

  • O Difftastic usa o tree-sitter para fazer o parse do código.
  • Diferentemente de diffs de texto baseados em linhas, ele entende quando a representação interna não mudou.

Ignora mudanças de formatação

  • Quando um formatador de código decide quebrar em várias linhas, ele mostra apenas o que realmente foi alterado.

Visualização de mudanças de encapsulamento

  • Ao adicionar um wrapper, o Difftastic faz a correspondência exata dos delimitadores.
  • Mesmo ao alterar o conteúdo interno, ele pode mostrar o wrapper adicionado.

Números de linha reais

  • Mostra os números de linha reais do arquivo, tanto antes quanto depois da mudança.

Demo de 60 segundos

Suporte a linguagens de programação

  • Suporta várias linguagens, como C++, C#, Clojure, Dart e Erlang.
  • A lista detalhada de linguagens suportadas pode ser consultada no manual.

Suporte a formatos de arquivo

  • Suporta vários formatos de arquivo, como HCL, HTML, JSON e YAML.
  • A lista detalhada de formatos de arquivo suportados pode ser consultada no manual.

Compatível com Git

  • As instruções de configuração do Git podem ser consultadas no manual.

Totalmente open source

  • O Difftastic usa a licença MIT.
  • Pode ser baixado, modificado e compartilhado com amigos.

Criador

  • Feito por Wilfred Hughes com Emacs e café.

Opinião do GN⁺

  • O Difftastic ajuda desenvolvedores a entenderem mudanças com mais clareza ao identificar diferenças estruturais no código.
  • Em comparação com ferramentas de diff tradicionais baseadas em linhas, o Difftastic permite comparações mais sofisticadas com recursos como entender a sintaxe do código e ignorar mudanças de formatação.
  • Como ferramenta open source, ele pode continuar melhorando por meio das contribuições da comunidade e tem a vantagem de poder ser livremente modificado e expandido conforme a necessidade do usuário.
  • Outras ferramentas com funcionalidades parecidas incluem a ferramenta embutida do Git, git diff, ou as ferramentas de comparação embutidas em IDEs como o IntelliJ IDEA da JetBrains, mas o Difftastic oferece uma abordagem única baseada em sintaxe.
  • Ao adotar o Difftastic, pode ser necessário verificar as linguagens de programação e formatos de arquivo suportados, além de alinhar o uso da ferramenta dentro da equipe. Com isso, é possível aumentar a eficiência do code review e reduzir mal-entendidos no processo de colaboração.

1 comentários

 
GN⁺ 2024-03-22
Comentários do Hacker News
  • Introdução à tecnologia baseada em Tree-sitter

    • O Tree-sitter converte código em AST (Abstract Syntax Tree, árvore sintática abstrata) e fornece uma interface padrão para clientes como editores ou ferramentas de diff.
    • Com isso, as ferramentas não precisam dar suporte direto a dezenas de linguagens; ao oferecer suporte ao Tree-sitter, passam automaticamente a lidar com todas as linguagens compatíveis com ele.
    • Ao desenvolver uma nova linguagem, basta criar um parser Tree-sitter para que todas as ferramentas que o suportam também passem a oferecer suporte a essa linguagem.
    • Essa inovação está reduzindo trabalho duplicado no desenvolvimento de ferramentas com suporte a várias linguagens e criando um ecossistema de ferramentas melhor.
  • Como instalar e atualizar projetos e ferramentas em Rust

    • É apresentado um método para instalar e atualizar projetos baseados em Rust por meio do cargo.
    • mise-en-place é uma alternativa ao asdf, sendo mais rápida e flexível.
    • zoxide é uma alternativa ao comando cd, lembrando os diretórios visitados pelo usuário e permitindo navegação rápida por busca com correspondência parcial.
    • dust complementa o du, mostrando quais diretórios usam mais espaço em disco.
  • Experiência de uso e opiniões sobre o Difftastic

    • É compartilhada a experiência de uso do Difftastic, com a observação de que outras ferramentas de diff passam a parecer incômodas depois disso.
    • Também se explora a possibilidade de uma ferramenta de diff "semântica" capaz de comparar casos em que a sintaxe muda, mas o significado permanece o mesmo.
  • A praticidade do Difftastic

    • Destaca-se o recurso do Difftastic de mostrar os números de linha reais dos arquivos, algo muito útil quando usado junto com git diff.
  • Ferramenta relacionada: diff2html

    • O diff2html é uma ferramenta que exibe diffs em HTML em uma aba do navegador por meio de uma CLI (Command Line Interface).
  • Experiência com a biblioteca Augeas

    • É relatada uma experiência usando a biblioteca Augeas para detectar diferenças em arquivos de configuração e permitir que usuários escrevam listas de permissões detalhadas que não sejam sensíveis à sintaxe.
  • Comparação com o Semantic Merge

    • O Semantic Merge não era open source, enquanto o Difftastic é open source e oferece um diff melhor.
    • Também é levantada a dúvida sobre a existência de planos para expandir o Difftastic com recursos de merge.
  • Retorno ao icdiff

    • Há o relato de alguém que testou o Difftastic, mas voltou para o icdiff por problemas como formatação estranha aplicada até a trechos não modificados.
  • Problemas visuais do Difftastic

    • Aponta-se que, ao inspecionar arquivos XML grandes, é difícil distinguir visualmente linhas e atributos modificados, além da necessidade de documentação sobre como alterar o estilo.
  • Tamanho da instalação do Difftastic

    • Menciona-se que o pacote no Arch Linux tem 7 MB, mas cresce para 80 MB após a instalação, e que o binário difft em si tem 78 MB.
    • Em um dataset ZFS com compressão LZ4, ele aparece com 17 MB, levantando a dúvida sobre por que conteúdos altamente compressíveis foram incluídos no binário.