mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
feat(health): checkhealth buffer can show in a split window (#26714)
:checkhealth now respects :vertical and :horizontal. For example: :vertical checkhealth foo bar will open the healthcheck buffer in a vertical split.
This commit is contained in:
parent
675522af18
commit
2ff2785c39
@ -366,6 +366,8 @@ The following changes to existing APIs or features add new behavior.
|
|||||||
• Attempting to set an invalid keycode option (e.g. `set t_foo=123`) no longer
|
• Attempting to set an invalid keycode option (e.g. `set t_foo=123`) no longer
|
||||||
gives an error.
|
gives an error.
|
||||||
|
|
||||||
|
• |:checkhealth| buffer can now be opened in a split window using |:vertical| or |:horizontal|.
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
REMOVED FEATURES *news-removed*
|
REMOVED FEATURES *news-removed*
|
||||||
|
|
||||||
|
@ -268,14 +268,27 @@ end
|
|||||||
|
|
||||||
-- Runs the specified healthchecks.
|
-- Runs the specified healthchecks.
|
||||||
-- Runs all discovered healthchecks if plugin_names is empty.
|
-- Runs all discovered healthchecks if plugin_names is empty.
|
||||||
function M._check(plugin_names)
|
-- splitmod controls how the healthcheck window opens: "vertical", "horizontal" or "tab"
|
||||||
|
function M._check(splitmod, plugin_names)
|
||||||
local healthchecks = plugin_names == '' and get_healthcheck('*') or get_healthcheck(plugin_names)
|
local healthchecks = plugin_names == '' and get_healthcheck('*') or get_healthcheck(plugin_names)
|
||||||
|
|
||||||
-- Create buffer and open in a tab, unless this is the default buffer when Nvim starts.
|
|
||||||
local emptybuf = vim.fn.bufnr('$') == 1 and vim.fn.getline(1) == '' and 1 == vim.fn.line('$')
|
local emptybuf = vim.fn.bufnr('$') == 1 and vim.fn.getline(1) == '' and 1 == vim.fn.line('$')
|
||||||
local mod = emptybuf and 'buffer' or 'tab sbuffer'
|
local mod = function()
|
||||||
|
if splitmod == 'vertical' then
|
||||||
|
return 'vertical sbuffer'
|
||||||
|
elseif splitmod == 'horizontal' then
|
||||||
|
return 'horizontal sbuffer'
|
||||||
|
elseif emptybuf then
|
||||||
|
-- if this is the default buffer when Nvim starts, open healthcheck directly
|
||||||
|
return 'buffer'
|
||||||
|
else
|
||||||
|
-- if not specified otherwise open healthcheck in a tab
|
||||||
|
return 'tab sbuffer'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
local bufnr = vim.api.nvim_create_buf(true, true)
|
local bufnr = vim.api.nvim_create_buf(true, true)
|
||||||
vim.cmd(mod .. ' ' .. bufnr)
|
vim.cmd(mod() .. ' ' .. bufnr)
|
||||||
|
|
||||||
if vim.fn.bufexists('health://') == 1 then
|
if vim.fn.bufexists('health://') == 1 then
|
||||||
vim.cmd.bwipe('health://')
|
vim.cmd.bwipe('health://')
|
||||||
|
@ -8814,7 +8814,14 @@ void eval_fmt_source_name_line(char *buf, size_t bufsize)
|
|||||||
void ex_checkhealth(exarg_T *eap)
|
void ex_checkhealth(exarg_T *eap)
|
||||||
{
|
{
|
||||||
Error err = ERROR_INIT;
|
Error err = ERROR_INIT;
|
||||||
MAXSIZE_TEMP_ARRAY(args, 1);
|
MAXSIZE_TEMP_ARRAY(args, 2);
|
||||||
|
if (cmdmod.cmod_split & WSP_VERT) {
|
||||||
|
ADD_C(args, CSTR_AS_OBJ("vertical"));
|
||||||
|
} else if (cmdmod.cmod_split & WSP_HOR) {
|
||||||
|
ADD_C(args, CSTR_AS_OBJ("horizontal"));
|
||||||
|
} else {
|
||||||
|
ADD_C(args, CSTR_AS_OBJ("tab"));
|
||||||
|
}
|
||||||
ADD_C(args, CSTR_AS_OBJ(eap->arg));
|
ADD_C(args, CSTR_AS_OBJ(eap->arg));
|
||||||
NLUA_EXEC_STATIC("return vim.health._check(...)", args, &err);
|
NLUA_EXEC_STATIC("return vim.health._check(...)", args, &err);
|
||||||
if (!ERROR_SET(&err)) {
|
if (!ERROR_SET(&err)) {
|
||||||
|
@ -6,6 +6,9 @@ local curbuf_contents = helpers.curbuf_contents
|
|||||||
local command = helpers.command
|
local command = helpers.command
|
||||||
local eq, neq, matches = helpers.eq, helpers.neq, helpers.matches
|
local eq, neq, matches = helpers.eq, helpers.neq, helpers.matches
|
||||||
local getcompletion = helpers.funcs.getcompletion
|
local getcompletion = helpers.funcs.getcompletion
|
||||||
|
local feed = helpers.feed
|
||||||
|
local source = helpers.source
|
||||||
|
local exec_lua = helpers.exec_lua
|
||||||
|
|
||||||
describe(':checkhealth', function()
|
describe(':checkhealth', function()
|
||||||
it("detects invalid $VIMRUNTIME", function()
|
it("detects invalid $VIMRUNTIME", function()
|
||||||
@ -200,3 +203,190 @@ describe(':checkhealth provider', function()
|
|||||||
eq(nil, string.match(curbuf_contents(), 'WRONG!!!'))
|
eq(nil, string.match(curbuf_contents(), 'WRONG!!!'))
|
||||||
end)
|
end)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
describe(':checkhealth window', function()
|
||||||
|
before_each(function()
|
||||||
|
clear{args={'-u', 'NORC'}}
|
||||||
|
-- Provides healthcheck functions
|
||||||
|
command("set runtimepath+=test/functional/fixtures")
|
||||||
|
command("set nofoldenable nowrap laststatus=0")
|
||||||
|
end)
|
||||||
|
|
||||||
|
it("opens directly if no buffer created", function()
|
||||||
|
local screen = Screen.new(50, 12)
|
||||||
|
screen:attach({ext_multigrid=true})
|
||||||
|
command("checkhealth success1")
|
||||||
|
screen:expect{grid=[[
|
||||||
|
## grid 1
|
||||||
|
[2:--------------------------------------------------]|*11
|
||||||
|
[3:--------------------------------------------------]|
|
||||||
|
## grid 2
|
||||||
|
^ |
|
||||||
|
──────────────────────────────────────────────────|
|
||||||
|
──────────────────────────── |
|
||||||
|
test_plug.success1: require("test_plug.success1. |
|
||||||
|
health").check() |
|
||||||
|
|
|
||||||
|
report 1 |
|
||||||
|
- OK everything is fine |
|
||||||
|
|
|
||||||
|
report 2 |
|
||||||
|
- OK nothing to see here |
|
||||||
|
## grid 3
|
||||||
|
|
|
||||||
|
]]}
|
||||||
|
end)
|
||||||
|
|
||||||
|
it("opens in vsplit window when no buffer created", function()
|
||||||
|
local screen = Screen.new(50, 20)
|
||||||
|
screen:attach({ext_multigrid=true})
|
||||||
|
command("vertical checkhealth success1")
|
||||||
|
screen:expect{grid=[[
|
||||||
|
## grid 1
|
||||||
|
[4:-------------------------]│[2:------------------------]|*19
|
||||||
|
[3:--------------------------------------------------]|
|
||||||
|
## grid 2
|
||||||
|
|
|
||||||
|
~ |*18
|
||||||
|
## grid 3
|
||||||
|
|
|
||||||
|
## grid 4
|
||||||
|
^ |
|
||||||
|
─────────────────────────|*3
|
||||||
|
─── |
|
||||||
|
test_plug.success1: |
|
||||||
|
require("test_plug. |
|
||||||
|
success1.health").check()|
|
||||||
|
|
|
||||||
|
report 1 |
|
||||||
|
- OK everything is fine |
|
||||||
|
|
|
||||||
|
report 2 |
|
||||||
|
- OK nothing to see here |
|
||||||
|
|
|
||||||
|
~ |*4
|
||||||
|
]]}
|
||||||
|
end)
|
||||||
|
|
||||||
|
it("opens in split window when no buffer created", function()
|
||||||
|
local screen = Screen.new(50, 25)
|
||||||
|
screen:attach({ext_multigrid=true})
|
||||||
|
command("horizontal checkhealth success1")
|
||||||
|
screen:expect{grid=[[
|
||||||
|
## grid 1
|
||||||
|
[4:--------------------------------------------------]|*12
|
||||||
|
health:// |
|
||||||
|
[2:--------------------------------------------------]|*11
|
||||||
|
[3:--------------------------------------------------]|
|
||||||
|
## grid 2
|
||||||
|
|
|
||||||
|
~ |*10
|
||||||
|
## grid 3
|
||||||
|
|
|
||||||
|
## grid 4
|
||||||
|
^ |
|
||||||
|
──────────────────────────────────────────────────|
|
||||||
|
──────────────────────────── |
|
||||||
|
test_plug.success1: require("test_plug.success1. |
|
||||||
|
health").check() |
|
||||||
|
|
|
||||||
|
report 1 |
|
||||||
|
- OK everything is fine |
|
||||||
|
|
|
||||||
|
report 2 |
|
||||||
|
- OK nothing to see here |
|
||||||
|
|
|
||||||
|
]]}
|
||||||
|
end)
|
||||||
|
|
||||||
|
it("opens in split window", function()
|
||||||
|
local screen = Screen.new(50, 25)
|
||||||
|
screen:attach({ext_multigrid=true})
|
||||||
|
feed('ihello')
|
||||||
|
feed('<esc>')
|
||||||
|
command("horizontal checkhealth success1")
|
||||||
|
screen:expect{grid=[[
|
||||||
|
## grid 1
|
||||||
|
[4:--------------------------------------------------]|*12
|
||||||
|
health:// |
|
||||||
|
[2:--------------------------------------------------]|*11
|
||||||
|
[3:--------------------------------------------------]|
|
||||||
|
## grid 2
|
||||||
|
hello |
|
||||||
|
~ |*10
|
||||||
|
## grid 3
|
||||||
|
|
|
||||||
|
## grid 4
|
||||||
|
^ |
|
||||||
|
──────────────────────────────────────────────────|
|
||||||
|
──────────────────────────── |
|
||||||
|
test_plug.success1: require("test_plug.success1. |
|
||||||
|
health").check() |
|
||||||
|
|
|
||||||
|
report 1 |
|
||||||
|
- OK everything is fine |
|
||||||
|
|
|
||||||
|
report 2 |
|
||||||
|
- OK nothing to see here |
|
||||||
|
|
|
||||||
|
]]}
|
||||||
|
end)
|
||||||
|
|
||||||
|
it("opens in vsplit window", function()
|
||||||
|
local screen = Screen.new(50, 25)
|
||||||
|
screen:attach({ext_multigrid=true})
|
||||||
|
feed('ihello')
|
||||||
|
feed('<esc>')
|
||||||
|
command("vertical checkhealth success1")
|
||||||
|
screen:expect{grid=[[
|
||||||
|
## grid 1
|
||||||
|
[4:-------------------------]│[2:------------------------]|*24
|
||||||
|
[3:--------------------------------------------------]|
|
||||||
|
## grid 2
|
||||||
|
hello |
|
||||||
|
~ |*23
|
||||||
|
## grid 3
|
||||||
|
|
|
||||||
|
## grid 4
|
||||||
|
^ |
|
||||||
|
─────────────────────────|*3
|
||||||
|
─── |
|
||||||
|
test_plug.success1: |
|
||||||
|
require("test_plug. |
|
||||||
|
success1.health").check()|
|
||||||
|
|
|
||||||
|
report 1 |
|
||||||
|
- OK everything is fine |
|
||||||
|
|
|
||||||
|
report 2 |
|
||||||
|
- OK nothing to see here |
|
||||||
|
|
|
||||||
|
~ |*9
|
||||||
|
]]}
|
||||||
|
end)
|
||||||
|
|
||||||
|
it("opens in tab", function()
|
||||||
|
-- create an empty buffer called "my_buff"
|
||||||
|
exec_lua 'vim.api.nvim_create_buf(false, true)'
|
||||||
|
command('file my_buff')
|
||||||
|
command("checkhealth success1")
|
||||||
|
-- define a function that collects all buffers in each tab
|
||||||
|
-- returns a dictionary like {tab1 = ["buf1", "buf2"], tab2 = ["buf3"]}
|
||||||
|
source([[
|
||||||
|
function CollectBuffersPerTab()
|
||||||
|
let buffs = {}
|
||||||
|
for i in range(tabpagenr('$'))
|
||||||
|
let key = 'tab' . (i + 1)
|
||||||
|
let value = []
|
||||||
|
for j in tabpagebuflist(i + 1)
|
||||||
|
call add(value, bufname(j))
|
||||||
|
endfor
|
||||||
|
let buffs[key] = value
|
||||||
|
endfor
|
||||||
|
return buffs
|
||||||
|
endfunction
|
||||||
|
]])
|
||||||
|
local buffers_per_tab = exec_lua("return vim.fn.CollectBuffersPerTab()")
|
||||||
|
eq(buffers_per_tab, {tab1 = { "my_buff" }, tab2 = {"health://"}})
|
||||||
|
end)
|
||||||
|
end)
|
||||||
|
Loading…
Reference in New Issue
Block a user