diff options
| author | William Boman <william@redwill.se> | 2021-09-10 13:38:39 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-09-10 13:38:39 +0200 |
| commit | d2ec0c0070c01ba0e3e8926031cfe848a016df44 (patch) | |
| tree | bf57f20725e11125ed51caac547c483d4e642831 /lua/nvim-lsp-installer/installers/init.lua | |
| parent | CUSTOM_SERVERS.md: update docs (diff) | |
| download | mason-d2ec0c0070c01ba0e3e8926031cfe848a016df44.tar mason-d2ec0c0070c01ba0e3e8926031cfe848a016df44.tar.gz mason-d2ec0c0070c01ba0e3e8926031cfe848a016df44.tar.bz2 mason-d2ec0c0070c01ba0e3e8926031cfe848a016df44.tar.lz mason-d2ec0c0070c01ba0e3e8926031cfe848a016df44.tar.xz mason-d2ec0c0070c01ba0e3e8926031cfe848a016df44.tar.zst mason-d2ec0c0070c01ba0e3e8926031cfe848a016df44.zip | |
rewrite some installers for broader cross-platform support (#85)
- Remove all usage of zx in favour of native Lua (via libuv)
- Introduce new set of `std` installers
The following servers will have to be reinstalled due to this change:
1. clangd
2. solargraph
3. sumneko_lua
4. tailwindcss
Diffstat (limited to 'lua/nvim-lsp-installer/installers/init.lua')
| -rw-r--r-- | lua/nvim-lsp-installer/installers/init.lua | 58 |
1 files changed, 40 insertions, 18 deletions
diff --git a/lua/nvim-lsp-installer/installers/init.lua b/lua/nvim-lsp-installer/installers/init.lua index 98bb78bc..7698e900 100644 --- a/lua/nvim-lsp-installer/installers/init.lua +++ b/lua/nvim-lsp-installer/installers/init.lua @@ -3,9 +3,9 @@ local Data = require "nvim-lsp-installer.data" local M = {} -function M.join(installers) +function M.pipe(installers) if #installers == 0 then - error "No installers to join." + error "No installers to pipe." end return function(server, callback, context) @@ -30,27 +30,49 @@ end -- much fp, very wow function M.compose(installers) - return M.join(Data.list_reverse(installers)) + return M.pipe(Data.list_reverse(installers)) end +function M.always_succeed(installer) + return function(server, callback, context) + installer(server, function() + callback(true) + end, context) + end +end + +local function get_by_platform(platform_table) + if platform.is_unix then + return platform_table.unix + elseif platform.is_win then + return platform_table.win + else + return nil + end +end + +-- non-exhaustive +function M.on(platform_table) + return function(server, callback, context) + local installer = get_by_platform(platform_table) + if installer then + installer(server, callback, context) + else + callback(true) + end + end +end + +-- exhaustive function M.when(platform_table) return function(server, callback, context) - if platform.is_unix then - if platform_table.unix then - platform_table.unix(server, callback, context) - else - context.stdio_sink.stderr(("Unix is not yet supported for server %q."):format(server.name)) - callback(false) - end - elseif platform.is_win then - if platform_table.win then - platform_table.win(server, callback, context) - else - context.stdio_sink.stderr(("Windows is not yet supported for server %q."):format(server.name)) - callback(false) - end + local installer = get_by_platform(platform_table) + if installer then + installer(server, callback, context) else - context.sdtio_sink.stderr "installers.when: Could not find installer for current platform." + context.stdio_sink.stderr( + ("Current operating system is not yet supported for server %q."):format(server.name) + ) callback(false) end end |
