aboutsummaryrefslogtreecommitdiffstats
path: root/lua/nvim-lsp-installer/installers/init.lua
diff options
context:
space:
mode:
Diffstat (limited to 'lua/nvim-lsp-installer/installers/init.lua')
-rw-r--r--lua/nvim-lsp-installer/installers/init.lua41
1 files changed, 34 insertions, 7 deletions
diff --git a/lua/nvim-lsp-installer/installers/init.lua b/lua/nvim-lsp-installer/installers/init.lua
index 83b46a1b..f8490586 100644
--- a/lua/nvim-lsp-installer/installers/init.lua
+++ b/lua/nvim-lsp-installer/installers/init.lua
@@ -4,6 +4,18 @@ local Data = require "nvim-lsp-installer.data"
local M = {}
+---@alias ServerInstallCallback fun(success: boolean)
+
+---@class ServerInstallContext
+---@field requested_server_version string|nil @The version requested by the user.
+---@field stdio_sink StdioSink
+---@field github_release_file string|nil @Only available if context.use_github_release_file has been called.
+
+---@alias ServerInstallerFunction fun(server: Server, callback: ServerInstallCallback, context: ServerInstallContext)
+
+--- Composes multiple installer functions into one.
+---@param installers ServerInstallerFunction[]
+---@return ServerInstallerFunction
function M.pipe(installers)
if #installers == 0 then
error "No installers to pipe."
@@ -33,6 +45,14 @@ function M.pipe(installers)
end
end
+--- Composes multiple installer function into one - in reversed order.
+---@param installers ServerInstallerFunction[]
+function M.compose(installers)
+ return M.pipe(Data.list_reverse(installers))
+end
+
+---@param installers ServerInstallerFunction[]
+---@return ServerInstallerFunction @An installer function that will serially execute the provided installers, until the first one succeeds.
function M.first_successful(installers)
if #installers == 0 then
error "No installers to pipe."
@@ -64,11 +84,9 @@ function M.first_successful(installers)
end
end
--- much fp, very wow
-function M.compose(installers)
- return M.pipe(Data.list_reverse(installers))
-end
-
+--- Wraps the provided server installer to always succeeds.
+---@param installer ServerInstallerFunction
+---@return ServerInstallerFunction
function M.always_succeed(installer)
return function(server, callback, context)
installer(server, function()
@@ -77,8 +95,11 @@ function M.always_succeed(installer)
end
end
+---@param platform_table table<Platform, ServerInstallerFunction>
+---@return ServerInstallerFunction | nil
local function get_by_platform(platform_table)
if platform.is_mac then
+ platform_table.mac()
return platform_table.mac or platform_table.unix
elseif platform.is_linux then
return platform_table.linux or platform_table.unix
@@ -91,7 +112,10 @@ local function get_by_platform(platform_table)
end
end
--- non-exhaustive
+--- Creates a server installer that executes the given installer for the current platform.
+--- If there is no server installer provided for the current platform, the installer will instantly exit successfully.
+---@param platform_table table<Platform, ServerInstallerFunction>
+---@return ServerInstallerFunction
function M.on(platform_table)
return function(server, callback, context)
local installer = get_by_platform(platform_table)
@@ -107,7 +131,10 @@ function M.on(platform_table)
end
end
--- exhaustive
+--- Creates a server installer that executes the given installer for the current platform.
+--- If there is no server installer provided for the current platform, the installer will instantly exit with a failure.
+---@param platform_table table<Platform, ServerInstallerFunction>
+---@return ServerInstallerFunction
function M.when(platform_table)
return function(server, callback, context)
local installer = get_by_platform(platform_table)