-- | Simple textual diffing of JavaScript programs for inspecting test
-- failures
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