fix(pickers): sorting_strategy=asc stale result clearing (#3298)

With `sorting_strategy='ascending'`, the results buffer should never
have lines beyond the `max_results` count OR the number of available
results, whichever is smaller.

closes #3282
This commit is contained in:
James Trew
2024-09-23 02:02:08 +00:00
committed by GitHub
parent 2ffcfc0d93
commit b324469959
3 changed files with 64 additions and 9 deletions

View File

@@ -431,13 +431,8 @@ function Picker:clear_extra_rows(results_bufnr)
local worst_line, ok, msg local worst_line, ok, msg
if self.sorting_strategy == "ascending" then if self.sorting_strategy == "ascending" then
local num_results = self.manager:num_results() local num_results = self.manager:num_results()
worst_line = self.max_results - num_results worst_line = math.min(num_results, self.max_results)
ok, msg = pcall(vim.api.nvim_buf_set_lines, results_bufnr, worst_line, -1, false, {})
if worst_line <= 0 then
return
end
ok, msg = pcall(vim.api.nvim_buf_set_lines, results_bufnr, num_results, -1, false, {})
else else
worst_line = self:get_row(self.manager:num_results()) worst_line = self:get_row(self.manager:num_results())
if worst_line <= 0 then if worst_line <= 0 then
@@ -1452,10 +1447,10 @@ end
--- Handles updating the picker after all the entries are scored/processed. --- Handles updating the picker after all the entries are scored/processed.
---@param results_bufnr number ---@param results_bufnr number
---@param find_id number ---@param _ number
---@param prompt string ---@param prompt string
---@param status_updater function ---@param status_updater function
function Picker:get_result_completor(results_bufnr, find_id, prompt, status_updater) function Picker:get_result_completor(results_bufnr, _, prompt, status_updater)
return vim.schedule_wrap(function() return vim.schedule_wrap(function()
if self.closed == true or self:is_done() then if self.closed == true or self:is_done() then
return return

View File

@@ -0,0 +1,46 @@
if vim.fn.has "mac" == 1 or require("telescope.utils").iswin then
return
end
local tester = require "telescope.testharness"
local disp = function(val)
return vim.inspect(val, { newline = " ", indent = "" })
end
describe("builtin.live_grep", function()
for _, configuration in ipairs {
{ sorting_strategy = "descending" },
{ sorting_strategy = "ascending" },
} do
it("clears results correctly when " .. disp(configuration), function()
tester.run_string(string.format(
[[
runner.picker(
"live_grep",
"abcd<esc>G",
{
post_typed = {
{
5,
function()
return #vim.tbl_filter(function(line)
return line ~= ""
end, GetResults())
end,
},
},
},
vim.tbl_extend("force", {
sorter = require("telescope.sorters").get_fzy_sorter(),
layout_strategy = "center",
cwd = "./lua/tests/fixtures/live_grep",
temp__scrolling_limit = 5,
}, vim.json.decode [==[%s]==])
)
]],
vim.json.encode(configuration)
))
end)
end
end)

14
lua/tests/fixtures/live_grep/a.txt vendored Normal file
View File

@@ -0,0 +1,14 @@
abc
abc
abc
abc
abc
abcd
abcd
abcd
abcd
abcd
abcde