Skip to content

Commit

Permalink
Feat: add replace function
Browse files Browse the repository at this point in the history
  • Loading branch information
th-herve committed Dec 11, 2023
1 parent a314382 commit 96fb609
Showing 1 changed file with 51 additions and 0 deletions.
51 changes: 51 additions & 0 deletions lua/harpoon/list.lua
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,57 @@ function HarpoonList:remove(item)
return self
end

---@return HarpoonList
function HarpoonList:replace(index, item)
item = item or self.config.create_list_item(self.config)

local item_index = index_of(self.items, item, self.config)
local old_item = self:get(index)

if item_index == index then
return self
end

if item_index and old_item then
Logger:log(
"HarpoonList:replace",
{ item = item, index = index },
"and",
{ item = old_item, index = item_index }
)
Listeners.listeners:emit(
Listeners.event_names.REORDER,
{ list = self, item = item, idx = index }
)
Listeners.listeners:emit(
Listeners.event_names.REORDER,
{ list = self, item = old_item, idx = item_index }
)
self.items[index], self.items[item_index] = item, old_item
elseif old_item then
Logger:log(
"HarpoonList:replace",
{ item = old_item, index = index },
"with",
{ item = item, index = index }
)
Listeners.listeners:emit(
Listeners.event_names.REMOVE,
{ list = self, item = old_item, idx = index }
)
Listeners.listeners:emit(
Listeners.event_names.ADD,
{ list = self, item = item, idx = index }
)

self.items[index] = item
else
self:append(item)
end

return self
end

---@return HarpoonList
function HarpoonList:removeAt(index)
if self.items[index] then
Expand Down

0 comments on commit 96fb609

Please sign in to comment.