Diff
Copyright(c) David Fox (2015)
LicenseBSD 3 Clause
Maintainers.clover@gmail.com
Stabilityexperimental
Portabilityportable
Safe HaskellSafe-Inferred
LanguageHaskell2010

Data.Algorithm.DiffContext

Description

Generates a grouped diff with merged runs, and outputs them in the manner of diff -u.

Synopsis

Documentation

type ContextDiff c = [Hunk c] Source #

A diff consisting of disjoint Hunks.

type Hunk c = [Diff [c]] Source #

A Hunk is a list of adjacent Diffs.

No two consecutive elements in a Hunk are both applications of First, Second, or Both, i.e. the list does not stutter on Diff constructors.

getContextDiff Source #

Arguments

:: Eq a 
=> Maybe ContextSize

Context size. Nothing means returning a whole-diff Hunk.

-> [a] 
-> [a] 
-> ContextDiff (Numbered a) 
> let textA = ["a","b","c","d","e","f","g","h","i","j","k"]
> let textB = ["a","b","d","e","f","g","h","i","j"]
> let diff = getContextDiff (Just 2) textA textB
> prettyContextDiff (text "file1") (text "file2") (text . unnumber) diff
--- file1
+++ file2
@@ -1,5 +1,4 @@
 a
 b
-c
 d
 e
@@ -9,3 +8,2 @@
 i
 j
-k

prettyContextDiff Source #

Arguments

:: Doc

Document 1 name

-> Doc

Document 2 name

-> (Numbered c -> Doc)

Element pretty printer

-> ContextDiff (Numbered c) 
-> Doc 

Pretty print a ContextDiff in the manner of diff -u.

prettyContextDiffOld Source #

Arguments

:: Doc

Document 1 name

-> Doc

Document 2 name

-> (c -> Doc)

Element pretty printer

-> ContextDiff c 
-> Doc 

Pretty print without line numbers.

getContextDiffNumbered Source #

Arguments

:: Eq a 
=> Maybe ContextSize

Context size. Nothing means returning a whole-diff Hunk.

-> [Numbered a] 
-> [Numbered a] 
-> ContextDiff (Numbered a) 

Create a diff of separate Hunks, each containing a sequence of differing elements surrounded by common elements for context.

The context size determines when to merge adjacent hunks: two hunks are merged when the number of common elements between them does not exceed twice the context size. Furthermore, if contextSize is Nothing a single hunk with the whole diff is produced.

data Numbered a Source #

Constructors

Numbered Int a 

Instances

Instances details
Show a => Show (Numbered a) Source # 
Instance details

Defined in Data.Algorithm.DiffContext

Methods

showsPrec :: Int -> Numbered a -> ShowS

show :: Numbered a -> String

showList :: [Numbered a] -> ShowS

Eq a => Eq (Numbered a) Source # 
Instance details

Defined in Data.Algorithm.DiffContext

Methods

(==) :: Numbered a -> Numbered a -> Bool

(/=) :: Numbered a -> Numbered a -> Bool

Ord a => Ord (Numbered a) Source # 
Instance details

Defined in Data.Algorithm.DiffContext

Methods

compare :: Numbered a -> Numbered a -> Ordering

(<) :: Numbered a -> Numbered a -> Bool

(<=) :: Numbered a -> Numbered a -> Bool

(>) :: Numbered a -> Numbered a -> Bool

(>=) :: Numbered a -> Numbered a -> Bool

max :: Numbered a -> Numbered a -> Numbered a

min :: Numbered a -> Numbered a -> Numbered a

numbered :: [a] -> [Numbered a] Source #

unNumberContextDiff :: ContextDiff (Numbered a) -> ContextDiff a Source #

If for some reason you need the line numbers stripped from the result of getContextDiff for backwards compatibility.