fix: Fixed some off by one errors for ascending strategy
This commit is contained in:
@@ -191,23 +191,25 @@ function Picker:get_window_options(max_columns, max_lines, prompt_title)
|
|||||||
return getter(self, max_columns, max_lines, prompt_title)
|
return getter(self, max_columns, max_lines, prompt_title)
|
||||||
end
|
end
|
||||||
|
|
||||||
--- Take a row and get an index
|
--- Take a row and get an index.
|
||||||
|
---@note: Rows are 0-indexed, and `index` is 1 indexed (table index)
|
||||||
---@param index number: The row being displayed
|
---@param index number: The row being displayed
|
||||||
---@return number The row for the picker to display in
|
---@return number The row for the picker to display in
|
||||||
function Picker:get_row(index)
|
function Picker:get_row(index)
|
||||||
if self.sorting_strategy == 'ascending' then
|
if self.sorting_strategy == 'ascending' then
|
||||||
return index
|
return index - 1
|
||||||
else
|
else
|
||||||
return self.max_results - index + 1
|
return self.max_results - index + 1
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
--- Take a row and get an index
|
--- Take a row and get an index
|
||||||
|
---@note: Rows are 0-indexed, and `index` is 1 indexed (table index)
|
||||||
---@param row number: The row being displayed
|
---@param row number: The row being displayed
|
||||||
---@return number The index in line_manager
|
---@return number The index in line_manager
|
||||||
function Picker:get_index(row)
|
function Picker:get_index(row)
|
||||||
if self.sorting_strategy == 'ascending' then
|
if self.sorting_strategy == 'ascending' then
|
||||||
return row
|
return row + 1
|
||||||
else
|
else
|
||||||
return self.max_results - row + 1
|
return self.max_results - row + 1
|
||||||
end
|
end
|
||||||
@@ -215,7 +217,7 @@ end
|
|||||||
|
|
||||||
function Picker:get_reset_row()
|
function Picker:get_reset_row()
|
||||||
if self.sorting_strategy == 'ascending' then
|
if self.sorting_strategy == 'ascending' then
|
||||||
return 1
|
return 0
|
||||||
else
|
else
|
||||||
return self.max_results
|
return self.max_results
|
||||||
end
|
end
|
||||||
@@ -225,6 +227,7 @@ function Picker:clear_extra_rows(results_bufnr)
|
|||||||
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()
|
||||||
local worst_line = self.max_results - num_results
|
local worst_line = self.max_results - num_results
|
||||||
|
log.info(self.max_results, num_results, worst_line)
|
||||||
|
|
||||||
if worst_line <= 0 then
|
if worst_line <= 0 then
|
||||||
return
|
return
|
||||||
@@ -247,7 +250,6 @@ function Picker:highlight_displayed_rows(results_bufnr, prompt)
|
|||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
vim.api.nvim_buf_clear_namespace(results_bufnr, ns_telescope_matching, 0, -1)
|
vim.api.nvim_buf_clear_namespace(results_bufnr, ns_telescope_matching, 0, -1)
|
||||||
|
|
||||||
local displayed_rows = vim.api.nvim_buf_get_lines(results_bufnr, 0, -1, false)
|
local displayed_rows = vim.api.nvim_buf_get_lines(results_bufnr, 0, -1, false)
|
||||||
@@ -616,8 +618,8 @@ function Picker:set_selection(row)
|
|||||||
-- TODO: Scrolling past max results
|
-- TODO: Scrolling past max results
|
||||||
if row > self.max_results then
|
if row > self.max_results then
|
||||||
row = self.max_results
|
row = self.max_results
|
||||||
elseif row < 1 then
|
elseif row < 0 then
|
||||||
row = 1
|
row = 0
|
||||||
end
|
end
|
||||||
|
|
||||||
if not self:can_select_row(row) then
|
if not self:can_select_row(row) then
|
||||||
@@ -721,6 +723,7 @@ pickers.entry_manager = function(max_results, set_entry, info)
|
|||||||
|
|
||||||
set_entry = set_entry or function() end
|
set_entry = set_entry or function() end
|
||||||
|
|
||||||
|
local should_save_result = function(index) return index <= max_results + 1 end
|
||||||
local worst_acceptable_score = math.huge
|
local worst_acceptable_score = math.huge
|
||||||
|
|
||||||
return setmetatable({
|
return setmetatable({
|
||||||
@@ -742,7 +745,7 @@ pickers.entry_manager = function(max_results, set_entry, info)
|
|||||||
end
|
end
|
||||||
|
|
||||||
-- Don't add results that are too bad.
|
-- Don't add results that are too bad.
|
||||||
if index >= max_results then
|
if not should_save_result(index) then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -774,9 +777,9 @@ pickers.entry_manager = function(max_results, set_entry, info)
|
|||||||
index = index + 1
|
index = index + 1
|
||||||
entry = next_entry
|
entry = next_entry
|
||||||
|
|
||||||
until not next_entry or index > max_results
|
until not next_entry or not should_save_result(index)
|
||||||
|
|
||||||
if index > max_results then
|
if not should_save_result(index) then
|
||||||
worst_acceptable_score = last_score
|
worst_acceptable_score = last_score
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
|
|||||||
Reference in New Issue
Block a user