sexp-diff
Vincent St-Amour <[email protected]>
This package provides an S-expression-aware diffing tool based on
Levenshtein-like tree edit distance.
(sexp-diff e1 e2) → sexp? |
e1 : sexp? |
e2 : sexp? |
Produces a tree that corresponds to the common structure of e1 and
e2, with e1-specific parts tagged with #:old and
e2-specific parts tagged with #:new.
Examples: |
> (sexp-diff | '(define (f x) (+ (* x 2) 1)) | '(define (f x) (- (* x 2) 3 1))) |
| '((define (f x) (#:new - #:old + (* x 2) #:new 3 1))) | > (sexp-diff | '(define (f x) (+ (* x 2) 4 1)) | '(define (f x) (- (* x 2) 5 3 1))) |
| '((define (f x) (#:new - #:old + (* x 2) #:new 5 #:new 3 #:old 4 1))) | > (sexp-diff | '(define (f x) (+ (* x 2) 4 4 1)) | '(define (f x) (- (* x 2) 5 5 3 1))) |
| '((define (f x) (#:new - #:old + (* x 2) #:new 5 #:new 5 #:new 3 #:old 4 #:old 4 1))) |
|