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
68
69
70
71
72
73
74
75
76
77
78
|
local Result = require "nvim-lsp-installer.core.result"
local npm = require "nvim-lsp-installer.core.managers.npm"
local cargo = require "nvim-lsp-installer.core.managers.cargo"
local pip3 = require "nvim-lsp-installer.core.managers.pip3"
local gem = require "nvim-lsp-installer.core.managers.gem"
local go = require "nvim-lsp-installer.core.managers.go"
local luarocks = require "nvim-lsp-installer.core.managers.luarocks"
local git = require "nvim-lsp-installer.core.managers.git"
local composer = require "nvim-lsp-installer.core.managers.composer"
local M = {}
local ServerVersion = {}
ServerVersion.__index = ServerVersion
---@param field_name string
local function version_in_receipt(field_name)
---@param receipt InstallReceipt
---@return Result
return function(_, receipt)
return Result.success(receipt.primary_source[field_name])
end
end
local function noop()
return Result.failure "Unable to detect version."
end
---@type table<InstallReceiptSourceType, async fun(server: Server, receipt: InstallReceipt): Result>
local version_checker = {
["npm"] = function(server, receipt)
return npm.get_installed_primary_package_version(receipt, server.root_dir)
end,
["pip3"] = function(server, receipt)
return pip3.get_installed_primary_package_version(receipt, server.root_dir)
end,
["gem"] = function(server, receipt)
return gem.get_installed_primary_package_version(receipt, server.root_dir)
end,
["cargo"] = function(server, receipt)
return cargo.get_installed_primary_package_version(receipt, server.root_dir)
end,
["composer"] = function(server, receipt)
return composer.get_installed_primary_package_version(receipt, server.root_dir)
end,
["git"] = function(server)
return git.get_installed_revision(server.root_dir)
end,
["go"] = function(server, receipt)
return go.get_installed_primary_package_version(receipt, server.root_dir)
end,
["luarocks"] = function(server, receipt)
return luarocks.get_installed_primary_package_version(receipt, server.root_dir)
end,
["github_release_file"] = version_in_receipt "release",
["github_release"] = version_in_receipt "release",
["github_tag"] = version_in_receipt "tag",
["jdtls"] = version_in_receipt "version",
}
---@async
---@param server Server
---@return Result
function M.check_server_version(server)
local receipt = server:get_receipt()
if not receipt then
return Result.failure "Unable to retrieve installation receipt."
end
local version_check = version_checker[receipt.primary_source.type] or noop
local ok, result = pcall(version_check, server, receipt)
if ok then
return result
else
return Result.failure(result)
end
end
return M
|