local config = require('gitsigns.config').config

--- @alias Gitsigns.Difffn fun(fa: string[], fb: string[], linematch?: integer): Gitsigns.Hunk.Hunk[]

--- @param a string[]
--- @param b string[]
--- @param linematch? boolean
--- @return Gitsigns.Hunk.Hunk[] hunks
return function(a, b, linematch)
  -- -- Short circuit optimization
  -- if not a or #a == 0 then
  --   local Hunks = require('gitsigns.hunks')
  --   local hunk = Hunks.create_hunk(0, 0, 1, #b)
  --   hunk.added.lines = b
  --   return { hunk }
  -- end

  local diff_opts = config.diff_opts
  local f --- @type Gitsigns.Difffn
  if diff_opts.internal then
    f = require('gitsigns.diff_int').run_diff
  else
    f = require('gitsigns.diff_ext').run_diff
  end

  local linematch0 --- @type integer?
  if linematch ~= false then
    linematch0 = diff_opts.linematch
  end

  return f(a, b, linematch0)
end