3 Punkte von GN⁺ 2024-03-22 | 1 Kommentare | Auf WhatsApp teilen

Difftastic: ein strukturelles Diff-Tool

  • Difftastic ist ein syntaxbewusstes CLI-Diff-Tool, das Dateien nicht zeilenweise, sondern auf Basis ihrer Syntax vergleicht.
  • Es liefert präzise Unterschiede, die für Menschen leicht lesbar sind.

Tatsächlich geänderte Inhalte verstehen

  • Difftastic verwendet tree-sitter, um Code zu parsen.
  • Anders als zeilenbasierte Text-Diffs versteht es, dass sich die interne Darstellung nicht geändert hat.

Formatierungsänderungen ignorieren

  • Wenn ein Code-Formatter entscheidet, Inhalte auf mehrere Zeilen aufzuteilen, zeigt es nur die tatsächlich geänderten Inhalte an.

Änderungen bei Umhüllungen visualisieren

  • Wenn ein Wrapper hinzugefügt wurde, ordnet Difftastic die Trennzeichen exakt zu.
  • Auch wenn der innere Inhalt geändert wird, kann es den hinzugefügten Wrapper anzeigen.

Echte Zeilennummern

  • Es zeigt die tatsächlichen Zeilennummern der Datei sowohl vor als auch nach der Änderung an.

60-Sekunden-Demo

Unterstützung für Programmiersprachen

  • Unterstützt viele verschiedene Sprachen, darunter C++, C#, Clojure, Dart und Erlang.
  • Eine detaillierte Liste der unterstützten Sprachen ist im Handbuch zu finden.

Unterstützung für Dateiformate

  • Unterstützt verschiedene Dateiformate wie HCL, HTML, JSON und YAML.
  • Eine detaillierte Liste der unterstützten Dateiformate ist im Handbuch zu finden.

Kompatibel mit Git

  • Hinweise zur Git-Konfiguration sind im Handbuch zu finden.

Vollständig Open Source

  • Difftastic steht unter der MIT-Lizenz.
  • Es kann heruntergeladen, verändert und mit Freunden geteilt werden.

Autor

  • Erstellt von Wilfred Hughes mit Emacs und Kaffee.

Meinung von GN⁺

  • Difftastic hilft Entwicklerinnen und Entwicklern, Änderungen klarer zu verstehen, indem es strukturelle Unterschiede im Code erkennt.
  • Im Vergleich zu klassischen zeilenbasierten Diff-Tools ermöglicht Difftastic durch das Verständnis von Code-Syntax und das Ignorieren von Formatierungsänderungen einen deutlich präziseren Vergleich.
  • Als Open-Source-Tool hat es das Potenzial, durch Beiträge aus der Community kontinuierlich verbessert zu werden, und bietet den Vorteil, dass Nutzer es bei Bedarf frei anpassen und erweitern können.
  • Andere Werkzeuge mit ähnlichen Funktionen sind etwa das integrierte git diff von Git oder Vergleichstools in IDEs wie JetBrains IntelliJ IDEA, doch Difftastic bietet mit syntaxbasierten Vergleichen einen eigenständigen Ansatz.
  • Bei der Einführung von Difftastic sollte geprüft werden, welche Programmiersprachen und Dateiformate unterstützt werden, und es kann nötig sein, sich im Team auf den Einsatz des Tools zu verständigen. Der Einsatz kann Code-Reviews effizienter machen und Missverständnisse in der Zusammenarbeit verringern.

1 Kommentare

 
GN⁺ 2024-03-22
Hacker-News-Kommentare
  • Einführung in die Tree-sitter-basierte Technik

    • Tree-sitter wandelt Code in einen AST (Abstract Syntax Tree, abstrakter Syntaxbaum) um und bietet eine Standardschnittstelle, über die dieser Clients wie Editoren oder Diff-Tools bereitgestellt wird.
    • Dadurch müssen Tools nicht mehr Dutzende Sprachen direkt unterstützen, sondern können durch die Unterstützung von Tree-sitter automatisch mit allen von Tree-sitter unterstützten Sprachen arbeiten.
    • Wird für eine neue Sprache ein Tree-sitter-Parser erstellt, unterstützen automatisch auch alle Tools mit Tree-sitter-Unterstützung diese Sprache.
    • Diese Innovation verringert doppelte Arbeit bei der Entwicklung sprachübergreifender Tools und schafft ein verbessertes Tool-Ökosystem.
  • Methoden zum Installieren und Aktualisieren von Rust-Projekten und -Tools

    • Es werden Wege vorgestellt, Rust-basierte Projekte über cargo zu installieren und zu aktualisieren.
    • mise-en-place ist eine schnelle und flexible Alternative zu asdf.
    • zoxide ist ein Ersatz für den Befehl cd, merkt sich Verzeichnisse, in die der Nutzer gewechselt ist, und ermöglicht schnelles Navigieren per Teiltreffer-Suche.
    • dust ergänzt du, indem es die Verzeichnisse mit dem größten Speicherplatzverbrauch anzeigt.
  • Nutzungserfahrungen und Meinungen zu Difftastic

    • Es werden Erfahrungen mit Difftastic geteilt, verbunden mit dem Hinweis, dass andere Diff-Tools dadurch unbequemer wirken.
    • Zudem wird das Potenzial eines „semantischen“ Diff-Tools ausgelotet, das Fälle vergleichen kann, in denen sich die Syntax ändert, die Bedeutung aber gleich bleibt.
  • Der praktische Nutzen von Difftastic

    • Hervorgehoben wird, dass Difftastic die Zeilennummern der tatsächlichen Dateien anzeigt, was zusammen mit git diff sehr nützlich ist.
  • Verwandtes Tool: diff2html

    • diff2html ist ein Tool, das über eine CLI Diffs im HTML-Format in einem Browser-Tab anzeigt.
  • Erfahrungen mit der Augeas-Bibliothek

    • Es wird von Erfahrungen mit der Augeas-Bibliothek berichtet, bei denen Unterschiede in Konfigurationsdateien erkannt werden konnten und Nutzer fein granulare Allowlists schreiben konnten, die nicht empfindlich auf Syntax reagieren.
  • Vergleich mit Semantic Merge

    • Semantic Merge war nicht Open Source, Difftastic hingegen ist Open Source und liefert bessere Diffs.
    • Es wird die Frage aufgeworfen, ob geplant ist, Difftastic um eine Merge-Funktion zu erweitern.
  • Rückkehr zu icdiff

    • Jemand berichtet, Difftastic ausprobiert zu haben, aber wegen Problemen wie merkwürdiger Formatierung in unveränderten Bereichen wieder zu icdiff zurückgekehrt zu sein.
  • Visuelle Probleme von Difftastic

    • Es wird angemerkt, dass sich bei der Prüfung großer XML-Dateien geänderte Zeilen und Attribute visuell schwer unterscheiden lassen, und dass eine Dokumentation zu Möglichkeiten der Stil-Anpassung nötig wäre.
  • Die Installationsgröße von Difftastic

    • Es wird erwähnt, dass das Arch-Linux-Paket 7 MB groß ist, bei der Installation aber auf 80 MB anwächst und die difft-Binärdatei selbst 78 MB groß ist.
    • Auf einem ZFS-Dataset mit LZ4-Komprimierung werden 17 MB angezeigt, und es wird die Frage gestellt, warum komprimierbare Inhalte nicht aus der Binärdatei herausgehalten wurden.