--[[ Copyright 2023 Oscar Wallberg Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at https://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ]] local M = {} M.os_name = vim.loop.os_uname().sysname --- Check that an executable is available --- @param exe string: Array to look for --- @return boolean function M.is_available(exe) return vim.fn.executable(exe) == 1 end --- Check that at least one executable is available --- @param exes table: Array of exes --- @return boolean function M.any_available(exes) for _, e in ipairs(exes) do if M.is_available(e) then return true end end return false end --- Asserts that an executable is available --- Raises error if missing. --- @param exe string: Array to look for function M.assert_available(exe) if not M.is_available(exe) then error("Missing executable '" .. exe .. "'.") end end --- Asserts that at least one executable is available --- Raises error if missing. --- @param exes table: Array of exes function M.assert_any_available(exes) if not M.any_available(exes) then error("At least one of the following is required:\n" .. table.concat(exes, ", ")) end end --- Asserts that a python module is installed ---@param mod string: The python module to check function M.assert_python3_module(mod) local resp = vim.system({ "python3", "-m", "pip", "show", mod, }):wait() if not resp.code == 0 then error("Python3 module " .. mod .. " not installed:\n" .. resp.stdout .. "\n" .. resp.stderr) end end return M