Description
I have been thinking about making a push to get this to v1.0. The main problem is the API. The current API is unwieldy: it is a blend of high level helpers and low level data structures, and doing anything useful with it requires a half dozen lines.
I propose to break this up into multiple packages.
The top level package (github.com/pkg/diff) will contain at most a few functions that do the most commonly requested operations, such as read two files and emit a unified diff. It may also contain a bunch of options that can be passed to those functions. The implementation will be mostly glue.
The subpackages will contain lower level data structures, algorithms, and helpers. These can be used by people who want fine-grained control over everything or who want to do something unusual (like me).
Here's a very rough, incomplete sketch of packages and exported funcs/types/vars, to give a flavor:
diff
Files
Readers
diff/edit
Script
Range
Op
diff/myers
Diff
Pair
diff/write
Options
Color
Names
WriterToA etc
diff/unified
Write
diff/sidebyside (new, WIP)
Write
diff/header (new, WIP, names are just placeholder mnemonics for me)
Regexp
LSP
GNU
Opinions on this general direction, @mvdan?