From 80ce51f88d842b73d8d8f97dc95da7665561803e Mon Sep 17 00:00:00 2001 From: Brandon Conway Date: Tue, 16 Mar 2021 17:52:48 -0700 Subject: [PATCH 1/2] Improve checking if marks exist --- lua/harpoon/mark.lua | 35 +++++++++++++++++++++++++---------- 1 file changed, 25 insertions(+), 10 deletions(-) diff --git a/lua/harpoon/mark.lua b/lua/harpoon/mark.lua index 3d28595..d898f4f 100644 --- a/lua/harpoon/mark.lua +++ b/lua/harpoon/mark.lua @@ -31,6 +31,25 @@ local function get_buf_name(id) return "" end +local function mark_exists(buf_name) + local marks = harpoon.get_mark_config().marks + + for idx = 1, #marks do + if marks[idx] == buf_name then + return true + end + end + + return false +end + +local function validate_buf_name(buf_name) + if buf_name == "" or buf_name == nil then + error("Couldn't find a valid file name to mark, sorry.") + return + end +end + M.get_index_of = function(item) if item == nil then error("You have provided a nil value to Harpoon, please provide a string rep of the file or the file idx.") @@ -73,10 +92,7 @@ M.add_file = function(file_name_or_buf_id) return end - if buf_name == "" or buf_name == nil then - error("Couldn't find a valid file name to mark, sorry.") - return - end + validate_buf_name(buf_name) local config = harpoon.get_mark_config() for idx = 1, M.get_length() do @@ -178,16 +194,15 @@ M.set_mark_list = function(new_list) end M.toggle_file = function(file_name_or_buf_id) - local mark_count_before = #harpoon.get_mark_config().marks + local buf_name = get_buf_name(file_name_or_buf_id) - M.add_file(file_name_or_buf_id) + validate_buf_name(buf_name) - local mark_count_after = #harpoon.get_mark_config().marks - - if (mark_count_before == mark_count_after) then - M.rm_file(file_name_or_buf_id) + if (mark_exists(buf_name)) then + M.rm_file(buf_name) print("Mark removed") else + M.add_file(buf_name) print("Mark Added") end end From a889d819374f1684ff0814d98de8d3713e080687 Mon Sep 17 00:00:00 2001 From: Brandon Conway Date: Wed, 17 Mar 2021 08:56:08 -0700 Subject: [PATCH 2/2] Use .get_length() to support sparse arrays --- lua/harpoon/mark.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/harpoon/mark.lua b/lua/harpoon/mark.lua index d898f4f..466e54a 100644 --- a/lua/harpoon/mark.lua +++ b/lua/harpoon/mark.lua @@ -34,7 +34,7 @@ end local function mark_exists(buf_name) local marks = harpoon.get_mark_config().marks - for idx = 1, #marks do + for idx = 1, M.get_length() do if marks[idx] == buf_name then return true end