aboutsummaryrefslogtreecommitdiff
path: root/runtime/lua/vim/deprecated/health.lua
blob: 0f6b1f578c186d2adc58eba43e3355167c76853b (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
local M = {}
local health = vim.health

local deprecated = {}

function M.check()
  if next(deprecated) == nil then
    health.ok('No deprecated functions detected')
    return
  end

  for name, v in vim.spairs(deprecated) do
    health.start('')

    local version, backtraces, alternative = v[1], v[2], v[3]
    local major, minor = version:match('(%d+)%.(%d+)')
    major, minor = tonumber(major), tonumber(minor)
    local removal_version = string.format('nvim-%d.%d', major, minor)
    local will_be_removed = vim.fn.has(removal_version) == 1 and 'was removed' or 'will be removed'

    local msg = ('%s is deprecated. Feature %s in Nvim %s'):format(name, will_be_removed, version)
    local msg_alternative = alternative and ('use %s instead.'):format(alternative)
    local advice = { msg_alternative }
    table.insert(advice, backtraces)
    advice = vim.iter(advice):flatten():totable()
    health.warn(msg, advice)
  end
end

function M.add(name, version, backtrace, alternative)
  if deprecated[name] == nil then
    deprecated[name] = { version, { backtrace }, alternative }
    return
  end

  local it = vim.iter(deprecated[name][2])
  if it:find(backtrace) == nil then
    table.insert(deprecated[name][2], backtrace)
  end
end

return M