265 lines
7.3 KiB
Lua
265 lines
7.3 KiB
Lua
-- Command to check if you have the required dependencies to use NormalNvim.
|
|
|
|
-- DESCRIPTION:
|
|
-- To use it run the command :checkhealth base
|
|
|
|
local M = {}
|
|
|
|
function M.check()
|
|
-- Get normalnvim_version from the plugin distroupdate, if present.
|
|
local success, git_utils = pcall(require, "distroupdate.utils.git")
|
|
success = success and vim.fn.executable("git") == 1
|
|
local normalnvim_version = success and git_utils.current_version(false) or "unknown"
|
|
local distroupdate_config = vim.g.distroupdate_config or {}
|
|
|
|
if distroupdate_config.branch == "nightly" then
|
|
normalnvim_version = ("nightly (%s)"):format(normalnvim_version)
|
|
end
|
|
|
|
-- Title
|
|
vim.health.start("NormalNvim health stats:")
|
|
|
|
-- Print NormalNvim version
|
|
vim.health.info("NormalNvim Version: " .. normalnvim_version)
|
|
vim.health.info(
|
|
"Neovim Version: v"
|
|
.. vim.fn.matchstr(vim.fn.execute("version"), "NVIM v\\zs[^\n]*")
|
|
)
|
|
|
|
-- Print Neovim version
|
|
if vim.version().prerelease then
|
|
vim.health.warn(
|
|
"Neovim nightly is not officially supported and may have breaking changes"
|
|
)
|
|
elseif vim.fn.has("nvim-0.10") == 1 then
|
|
vim.health.ok("Using stable Neovim >= 0.10.0")
|
|
else
|
|
vim.health.error("Neovim >= 0.10.0 is required")
|
|
end
|
|
|
|
-- Checks to perform.
|
|
local programs = {
|
|
{
|
|
cmd = { "git" },
|
|
type = "error",
|
|
msg = "Used for core functionality such as updater and plugin management.",
|
|
},
|
|
{
|
|
cmd = { "luarocks" },
|
|
type = "error",
|
|
msg = "Used for core functionality such as updater and plugin management.",
|
|
},
|
|
{
|
|
cmd = { "node" },
|
|
type = "error",
|
|
msg = "Used for core functionality such as updater and plugin management.",
|
|
},
|
|
{
|
|
cmd = { "yarn" },
|
|
type = "error",
|
|
msg = "Used for core functionality such as updater and plugin management.",
|
|
},
|
|
{
|
|
cmd = { "cargo" },
|
|
type = "error",
|
|
msg = "Used by nvim-spectre to install oxi. Also by dooku.nvim to generate rust html docs.",
|
|
},
|
|
{
|
|
cmd = { "yazi" },
|
|
type = "error",
|
|
msg = "Used to enable yazi file browser.",
|
|
},
|
|
{
|
|
cmd = { "markmap" },
|
|
type = "warn",
|
|
msg = "Used by markmap.nvim. Make sure yarn is in your PATH. To learn how check markmap.nvim github page.",
|
|
},
|
|
{
|
|
cmd = { "fd" },
|
|
type = "error",
|
|
msg = "Used for nvim-spectre to find using fd.",
|
|
},
|
|
{
|
|
cmd = { "lazygit" },
|
|
type = "warn",
|
|
msg = "Used for mappings to pull up git TUI (Optional)",
|
|
},
|
|
{
|
|
cmd = { "gitui" },
|
|
type = "warn",
|
|
msg = "Used for mappings to pull up git TUI (Optional)",
|
|
},
|
|
{
|
|
cmd = { "delta" },
|
|
type = "warn",
|
|
msg = "Used by undotree to show a diff (Optional)",
|
|
},
|
|
{
|
|
cmd = { "grcov" },
|
|
type = "warn",
|
|
msg = "Used to show code coverage (Optional)",
|
|
},
|
|
{
|
|
cmd = { "grcov" },
|
|
type = "warn",
|
|
msg = "Used to show code coverage (Optional)",
|
|
},
|
|
{
|
|
cmd = { "jest" },
|
|
type = "warn",
|
|
msg = "Used to run typescript and javascript tests (Optional)",
|
|
},
|
|
{
|
|
cmd = { "pytest" },
|
|
type = "warn",
|
|
msg = "Used to run python tests (Optional)",
|
|
},
|
|
{
|
|
cmd = { "cargo nextest" },
|
|
type = "warn",
|
|
msg = "Used to run rust tests (optional)\nNOTE: checkhealth won't detect this correctly, but you can confirm it works correctly with 'cargo nextest'.",
|
|
},
|
|
{
|
|
cmd = { "nunit" },
|
|
type = "warn",
|
|
msg = "Used to run C# tests (optional)\nNOTE: There is no way to install this system wide. To use it you must add it to your dotnet C# project: 'dotnet add package NUnit NUnit3TestAdapter'.",
|
|
},
|
|
{
|
|
cmd = { "csc" },
|
|
type = "warn",
|
|
msg = "Used by compiler.nvim to compile non dotnet C# files (Optional)",
|
|
},
|
|
{
|
|
cmd = { "mono" },
|
|
type = "warn",
|
|
msg = "Used by compiler.nvim to run non dotnet C# files. (Optional)",
|
|
},
|
|
{
|
|
cmd = { "dotnet" },
|
|
type = "warn",
|
|
msg = "Used by compiler.nvim and DAP to operate with dotnet projects (optional)\nNOTE: Make sure you also have the system package dotnet-sdk installed.",
|
|
},
|
|
{
|
|
cmd = { "java" },
|
|
type = "warn",
|
|
msg = "Used by compiler.nvim and dap to operate with java (Optional)",
|
|
},
|
|
{
|
|
cmd = { "javac" },
|
|
type = "warn",
|
|
msg = "Used by compiler.nvim to compile java (Optional)",
|
|
},
|
|
{
|
|
cmd = { "nasm" },
|
|
type = "warn",
|
|
msg = "Used by compiler.nvim to compile assembly x86_64 (Optional)",
|
|
},
|
|
|
|
{
|
|
cmd = { "gcc" },
|
|
type = "warn",
|
|
msg = "Used by compiler.nvim to compile C (Optional)",
|
|
},
|
|
{
|
|
cmd = { "g++" },
|
|
type = "warn",
|
|
msg = "Used by compiler.nvim to compile C++ (Optional)",
|
|
},
|
|
{
|
|
cmd = { "elixir" },
|
|
type = "warn",
|
|
msg = "Used by compiler.nvim to compile elixir (optional)",
|
|
},
|
|
{
|
|
cmd = { "Rscript" },
|
|
type = "warn",
|
|
msg = "Used by compiler.nvim to interpretate R (Optional)",
|
|
},
|
|
{
|
|
cmd = { "python" },
|
|
type = "warn",
|
|
msg = "Used by compiler.nvim to interpretate python (Optional)",
|
|
},
|
|
{
|
|
cmd = { "nuitka" },
|
|
type = "warn",
|
|
msg = "Used by compiler.nvim to compile python to machine code (Optional)",
|
|
},
|
|
{
|
|
cmd = { "pyinstaller" },
|
|
type = "warn",
|
|
msg = "Used by compiler.nvim to compile python to bytecode (Optional)",
|
|
},
|
|
{
|
|
cmd = { "ruby" },
|
|
type = "warn",
|
|
msg = "Used by compiler.nvim to interpretate ruby (optional)",
|
|
},
|
|
{
|
|
cmd = { "perl" },
|
|
type = "warn",
|
|
msg = "Used by compiler.nvim to interpretate perl (optional)",
|
|
},
|
|
{
|
|
cmd = { "swiftc" },
|
|
type = "warn",
|
|
msg = "Used by compiler.nvim to compile swift (optional)",
|
|
},
|
|
{
|
|
cmd = { "swift" },
|
|
type = "warn",
|
|
msg = "Used by compiler.nvim to compile swift (optional)",
|
|
},
|
|
{
|
|
cmd = { "gfortran" },
|
|
type = "warn",
|
|
msg = "Used by compiler.nvim to compile fortran (optional)",
|
|
},
|
|
{
|
|
cmd = { "fpm" },
|
|
type = "warn",
|
|
msg = "Used by compiler.nvim to compile fortran (optional)",
|
|
},
|
|
{
|
|
cmd = { "go" },
|
|
type = "warn",
|
|
msg = "Used by compiler.nvim to compile go (optional)",
|
|
},
|
|
{
|
|
cmd = { "godoc" },
|
|
type = "warn",
|
|
msg = "Used by dooku.nvim to generate go html docs\nNOTE: If you have it installed but you can't run it on the terminal, ensure you have added 'go' to your OS path (optional)",
|
|
},
|
|
{
|
|
cmd = { "doxygen" },
|
|
type = "warn",
|
|
msg = "Used by dooku.nvim to generate c/c++/python/java html docs (optional)",
|
|
},
|
|
}
|
|
|
|
-- Actually perform the checks we defined above.
|
|
for _, program in ipairs(programs) do
|
|
if type(program.cmd) == "string" then program.cmd = { program.cmd } end
|
|
local name = table.concat(program.cmd, "/")
|
|
local found = false
|
|
for _, cmd in ipairs(program.cmd) do
|
|
if vim.fn.executable(cmd) == 1 then
|
|
name = cmd
|
|
found = true
|
|
break
|
|
end
|
|
end
|
|
|
|
if found then
|
|
vim.health.ok(("`%s` is installed: %s"):format(name, program.msg))
|
|
else
|
|
vim.health[program.type](
|
|
("`%s` is not installed: %s"):format(name, program.msg)
|
|
)
|
|
end
|
|
end
|
|
vim.health.info("")
|
|
vim.health.info("Write `:bw` to close `:checkhealth` gracefully.")
|
|
end
|
|
|
|
return M
|