lambdaisland / lambdaisland/deep-diff2
Prettyprinted diff mangled when using advanced compilation in cljs
Nessuno ha ancora preso questa issue.
- Lingua principale
- Clojure
- Stelle
- 326
- Fork
- 18
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Descrizione
Thanks for the awesome tool! We are currently using it in an internal web-based integration testing tool. It's working great right up until trying to display a pretty printed version of diffs.
It seems the pretty printer messes up the diff when compiled with advanced optimizations.
Here is a shell session demonstrating the problem:
❯ tree
.
├── deps.edn
└── src
└── ddiff_bug
└── core.cljs
3 directories, 2 files
❯ bat deps.edn
1 {:paths ["src"]
2 :deps { org.clojure/clojurescript {:mvn/version "1.11.132"}
3 lambdaisland/deep-diff2 {:mvn/version "2.11.216"}}}
❯ bat src/ddiff_bug/core.cljs
1 (ns ddiff-bug.core
2 (:require [lambdaisland.deep-diff2 :as ddiff]))
3
4
5 (enable-console-print!)
6
7 (defn diff-view
8 [a b]
9 (let [diff (ddiff/diff a b)
10 diffstr (with-out-str (ddiff/pretty-print diff))]
11 (println "\nDocument A")
12 (println a)
13 (println "\nDocument B")
14 (println b)
15 (println "\nDiff")
16 (println diff)
17 (println "\nPretty printed diff")
18 (println diffstr)))
19
20 (defn -main
21 [& args]
22 (diff-view {"Hi" {:foo 424128, :bar 22140, :baz 243000}}
23 {"Ho" {:foo 424128, :bar 22140, :baz 243000}}))
24
25
26 (-main)
27
❯ clj -M --main cljs.main --target node --output-to main-dev.js --optimizations none --compile ddiff-bug.core
❯ clj -M --main cljs.main --target node --output-to main-prod.js --optimizations advanced --compile ddiff-bug.core
❯ node main-dev.js
Document A
{Hi {:foo 424128, :bar 22140, :baz 243000}}
Document B
{Ho {:foo 424128, :bar 22140, :baz 243000}}
Diff
{#lambdaisland.deep-diff2.diff-impl.Deletion{:- Hi} {:foo 424128, :bar 22140, :baz 243000}, #lambdaisland.deep-diff2.diff-impl.Insertion{:+ Ho} {:foo 424128, :bar 22140, :baz 243000}}
Pretty printed diff
{+"Ho" {:bar 22140, :baz 243000, :foo 424128}, -"Hi" {:bar 22140, :baz 243000, :foo 424128}}
❯ node main-prod.js
Document A
{Hi {:foo 424128, :bar 22140, :baz 243000}}
Document B
{Ho {:foo 424128, :bar 22140, :baz 243000}}
Diff
{#lambdaisland.deep-diff2.diff-impl.Deletion{:- Hi} {:foo 424128, :bar 22140, :baz 243000}, #lambdaisland.deep-diff2.diff-impl.Insertion{:+ Ho} {:foo 424128, :bar 22140, :baz 243000}}
Pretty printed diff
{#Xo {:+ "Ho"} {:bar 22140, :baz 243000, :foo 424128},
#Wo {:- "Hi"} {:bar 22140, :baz 243000, :foo 424128}}
It seems minimized names (as seen in the Xo and Wo tags here) are confusing the printer. The two tags seen here are minimized versions of $lambdaisland$deep_diff2$diff_impl$Insertion$$ and $lambdaisland$deep_diff2$diff_impl$Deletion$$
Guida per i contributori
Nessuna guida per i contributori indicizzata per questo repository
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Direzione di ricerca
Inizia da src/ddiff_bug/core.cljs e deps.edn, quindi riproduci la differenza eseguendo i due comandi cljs.main con --optimizations none e advanced. Segui il punto di ingresso di ddiff/pretty-print e confronta l’output risultante. È completato quando la build advanced stampa gli stessi tag leggibili di inserimento ed eliminazione della build non ottimizzata.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- clojure
- Ambito
- tooling
- Tipo di issue
- Bug
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Stato di attività
- Ferma
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 35/100