Estou tentando encontrar alguns bons exemplos de utilitários de diff / merge semântico. O paradigma tradicional de comparação de arquivos de código-fonte funciona comparando linhas e caracteres ... mas há algum utilitário por aí (para qualquer linguagem) que realmente considere a estrutura do código ao comparar arquivos?
Por exemplo, programas diff existentes reportarão "diferença encontrada no caractere 2 da linha 125. Arquivo x contém void, onde o arquivo y contém bool". Uma ferramenta especializada deve ser capaz de relatar "Tipo de retorno do método doSomething () alterado de void para bool".
Eu diria que esse tipo de informação semântica é na verdade o que o usuário está procurando ao comparar o código e deve ser o objetivo das ferramentas de programação de próxima geração. Existem exemplos disso nas ferramentas disponíveis?