Skip to content

Repository files navigation

Diff

VersionBuild StatusCarthage compatible

Simple diffing library in pure Swift.

Installing

You can use Carthage or Swift Package Manager to install Diff.

Usage

Start by importing the package:

import Diff

Same

If there is no difference, the diff will be nil.

diff("Hello","Hello") // nil

For the sake of brevity, we'll ! the rest of the examples since we know they're different.

Insert

let(range, string)=diff("Hello world","Hello there world")!
// range: 6..<6
// string: "there "

Remove

let(range, string)=diff("Hello there world","Hello world")!
// range: 6..<12
// string: ""

Other Types

Diff can diff any array. Here's an array of things that conform to Equatable:

let(range, replacement)=diff([1,2,3],[1,2,3,4])!
// range: 3..<3
// replacement: [4]

You can even use arrays of anything as long as you can compare them:

letbefore:[Foo]=[a, b]letafter:[Foo]=[b]let(range, replacement)=diff(before, after, compare:Foo.compare)!
// range: 0..<1
// replacement: []

Development

If you want to contribute to Diff, please write a test.

Building and running the tests locally with SPM is easy:

$ git clone https://github.com/soffes/Diff
$ cd Diff
$ swift build
$ swift test

Thanks

Thanks to Jonathan Clem for the original algorithm and Caleb Davenport for inspiration for the generics implementation and help debugging a few edge cases!

About

Simple diff library in pure Swift

Topics

Resources

Stars

122 stars

Watchers

4 watching

Forks

Releases

Packages

Used by

Contributors

Languages