aboutsummaryrefslogtreecommitdiff
path: root/runtime/lua/vim/_meta/diff.lua
blob: 8e8aaf8b6440b49be25f3a1d9f941746824dc804 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
---@meta

--- Run diff on strings {a} and {b}. Any indices returned by this function,
--- either directly or via callback arguments, are 1-based.
---
--- Examples:
--- <pre>lua
---     vim.diff('a\\n', 'b\\nc\\n')
---     -- =>
---     -- @@ -1 +1,2 @@
---     -- -a
---     -- +b
---     -- +c
---
---     vim.diff('a\\n', 'b\\nc\\n', {result_type = 'indices'})
---     -- =>
---     -- {
---     --   {1, 1, 1, 2}
---     -- }
--- </pre>
---
--- @param a string First string to compare
--- @param b string Second string to compare
--- @param opts table<string,any> Optional parameters:
---     - `on_hunk` (callback):
---       Invoked for each hunk in the diff. Return a negative number
---       to cancel the callback for any remaining hunks.
---       Args:
---       - `start_a` (integer): Start line of hunk in {a}.
---       - `count_a` (integer): Hunk size in {a}.
---       - `start_b` (integer): Start line of hunk in {b}.
---       - `count_b` (integer): Hunk size in {b}.
---     - `result_type` (string): Form of the returned diff:
---       - "unified": (default) String in unified format.
---       - "indices": Array of hunk locations.
---       Note: This option is ignored if `on_hunk` is used.
---     - `linematch` (boolean|integer): Run linematch on the resulting hunks
---       from xdiff. When integer, only hunks upto this size in
---       lines are run through linematch. Requires `result_type = indices`,
---       ignored otherwise.
---     - `algorithm` (string):
---       Diff algorithm to use. Values:
---       - "myers"      the default algorithm
---       - "minimal"    spend extra time to generate the
---                      smallest possible diff
---       - "patience"   patience diff algorithm
---       - "histogram"  histogram diff algorithm
---     - `ctxlen` (integer): Context length
---     - `interhunkctxlen` (integer):
---       Inter hunk context length
---     - `ignore_whitespace` (boolean):
---       Ignore whitespace
---     - `ignore_whitespace_change` (boolean):
---       Ignore whitespace change
---     - `ignore_whitespace_change_at_eol` (boolean)
---       Ignore whitespace change at end-of-line.
---     - `ignore_cr_at_eol` (boolean)
---       Ignore carriage return at end-of-line
---     - `ignore_blank_lines` (boolean)
---       Ignore blank lines
---     - `indent_heuristic` (boolean):
---       Use the indent heuristic for the internal
---       diff library.
---
--- @return string|table|nil
---     See {opts.result_type}. `nil` if {opts.on_hunk} is given.
function vim.diff(a, b, opts) end