module Language.ECMAScript3.SourceDiff where
import Data.Algorithm.Diff
import Data.Algorithm.DiffOutput
import Language.ECMAScript3.Syntax
import Language.ECMAScript3.PrettyPrint
import Data.List (intersperse, intercalate)
jsDiff :: JavaScript a -> JavaScript a -> String
jsDiff :: JavaScript a -> JavaScript a -> String
jsDiff JavaScript a
js1 JavaScript a
js2 =
let plines :: JavaScript a -> [String]
plines = String -> [String]
lines (String -> [String])
-> (JavaScript a -> String) -> JavaScript a -> [String]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Doc -> String
forall a. Show a => a -> String
show (Doc -> String) -> (JavaScript a -> Doc) -> JavaScript a -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. JavaScript a -> Doc
forall a. Pretty a => a -> Doc
prettyPrint
diff :: [Diff [String]]
diff = [String] -> [String] -> [Diff [String]]
forall a. Eq a => [a] -> [a] -> [Diff [a]]
getGroupedDiff (JavaScript a -> [String]
plines JavaScript a
js1) (JavaScript a -> [String]
plines JavaScript a
js2)
in [Diff [String]] -> String
ppDiff [Diff [String]]
diff