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 :: forall a. JavaScript a -> JavaScript a -> String
jsDiff JavaScript a
js1 JavaScript a
js2 =
let plines :: JavaScript a -> [String]
plines = String -> [String]
lines forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. Show a => a -> String
show forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. Pretty a => a -> Doc
prettyPrint
diff :: [Diff [String]]
diff = 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