Outils de développement

Omnidiff apporte la comparaison structurelle et binaire au terminal

Un nouvel outil basé sur Rust, Omnidiff, propose une comparaison de code structurelle rapide et des diffs binaires au niveau pixel pour les images, les polices et les archives directement dans le terminal.

Interface de terminal affichant côte à côte des diffs de code et d'images binaires
Illustration générée pour cet article

Traduit automatiquement depuis l'original anglais.

Marko Ivankovic a publié Omnidiff, un utilitaire de comparaison (diff) haute performance écrit en Rust qui va au-delà de la comparaison traditionnelle de texte. Publié le 1er novembre 2026, l'outil vise à fournir des différences robustes et précises tant pour le code source que pour les ressources binaires telles que les images, les polices et les archives.

Ce qui s'est passé

La version introduit une interface en ligne de commande et une interface utilisateur de terminal (TUI) conçues pour gérer vingt types de modifications de code réelles et divers formats binaires. Contrairement aux outils diff Unix standards qui traitent les fichiers comme des lignes de texte, Omnidiff analyse le contenu selon son type. Il prend en charge la comparaison structurelle pour vingt-cinq langages de programmation et fournit des comparaisons visuelles pour les fichiers binaires, incluant une analyse pixel par pixel pour les images et une inspection glyphe par glyphe pour les polices.

La performance est un axe central du projet. Les benchmarks effectués sur un ordinateur portable T14s équipé d'un processeur Intel Core i7-1370P et de 32 Go de RAM ciblent un temps médian de diff inférieur à 100 millisecondes. La latence au 99e percentile est plafonnée à 1000 millisecondes. L'outil est disponible via des binaires précompilés pour Linux, macOS et Windows, ainsi que via des gestionnaires de paquets tels que Homebrew, Nix et apt.

Comment cela fonctionne

Omnidiff détecte les types de fichiers en utilisant les extensions pour le texte et les signatures de bytes pour les données binaires. Pour le code source, il emploie les grammaires tree-sitter pour analyser vingt-cinq langages, dont Rust, Python, JavaScript et C++. Cela lui permet de comprendre la structure du code, en identifiant les changements au sein des fonctions, classes ou structures plutôt que de simplement signaler les décalages de lignes. Lorsqu'un changement se produit profondément dans un grand fichier, l'outil préfixe le bloc de diff avec la définition englobante la plus proche pour fournir du contexte.

Pour les fichiers binaires, l'approche varie selon le format. Les images aux formats PNG, JPEG, GIF et autres sont comparées pixel par pixel ou image par image pour les animations. Les archives comme zip et tar sont inspectées membre par membre, permettant de traverser les archives imbriquées. Les polices sont analysées glyphe par glyphe, ne montrant que les caractères spécifiques ayant changé. La TUI rend ces visuels en utilisant des protocoles graphiques de terminal comme kitty ou sixel lorsqu'ils sont disponibles, recourant autrement aux demi-blocs Unicode.

Détails clés

  • Analyse structurelle : Prend en charge vingt-cinq langages via tree-sitter, y compris C, Go, Java et TypeScript, offrant des diffs sensibles au contexte.
  • Prise en charge binaire : Gère les images, les polices, les archives, les PDF et les catalogues de messages en comparant leurs structures internes plutôt que les octets bruts.
  • Objectifs de performance : Vise un temps médian de diff de 100 ms et un temps au 99e percentile de 1000 ms sur du matériel moderne.
  • Intégration : Fonctionne comme backend pour git difftool et jj diff, avec des assistants de configuration pour les systèmes de contrôle de version Git et Jujutsu.
  • Modes de sortie : Offre une TUI interactive, un mode batch sans interface graphique (headless) pour les scripts, et une sortie JSON pour une consommation programmatique.
  • Licence : Publiée sous la licence GNU Affero General Public License version 3, avec une option d'abonnement commercial disponible via GitHub Sponsors.

Pourquoi c'est important

Pour les ingénieurs logiciels, la limitation des outils diff traditionnels réside dans leur incapacité à comparer significativement les ressources non textuelles. Les changements dans les icônes, les polices ou les ressources compilées nécessitent souvent l'ouverture d'outils graphiques distincts pour vérification. Omnidiff consolide ce flux de travail dans le terminal, permettant aux développeurs de passer en revue les changements visuels parallèlement aux changements de code dans une interface unique. Cela réduit le changement de contexte et accélère le processus de revue pour les applications full-stack incluant des ressources de design.

La conscience structurelle de l'outil améliore également la précision de la revue de code. En comprenant la syntaxe du langage, il peut ignorer les espaces blancs ou les changements de mise en forme non pertinents qui encombrent souvent les diffs standards. Cela aide les relecteurs à se concentrer sur les changements logiques plutôt que sur le bruit stylistique. De plus, l'intégration avec des systèmes de contrôle de version modernes comme Jujutsu garantit que les utilisateurs d'outils émergents peuvent maintenir une expérience de revue cohérente.

Ce que vous pouvez faire

  • Installez Omnidiff en utilisant votre gestionnaire de paquets système, tel que brew install ivankovic/omnidiff/omnidiff sur macOS ou le dépôt apt fourni pour Debian.
  • Configurez-le comme votre git difftool par défaut en exécutant omnidiff git configure pour activer les revues interactives pour les dépôts Git.
  • Utilisez le mode headless avec omnidiff --headless BEFORE AFTER dans les pipelines CI pour générer des diffs en texte brut pour les vérifications automatisées.
  • Explorez les changements binaires en passant des fichiers d'image ou de police à la TUI pour voir les différences au niveau pixel ou glyphe sans quitter le terminal.
  • Définissez la variable d'environnement COLORTERM=truecolor si votre terminal supporte la couleur 24 bits mais ne l'annonce pas, assurant ainsi une fidélité visuelle optimale.
  • Consultez le schéma JSON dans src/tui/json_output.schema.json si vous prévoyez d'intégrer la sortie d'Omnidiff dans des outils personnalisés ou des tableaux de bord.
  • #rust
  • #developer-tools
  • #version-control
  • #diffing
  • #cli

Outils de la Boutique Bytechap

Continuer la lecture

Tous les articles