mirror of
https://github.com/ThePrimeagen/harpoon.git
synced 2025-07-14 10:00:29 +00:00
feat: I am going to marry that data and that list
This commit is contained in:
parent
9e60c39057
commit
543f3a16e1
@ -88,3 +88,7 @@ frecency = later feature likely, but great idea
|
||||
// i don't understand this one
|
||||
harpoon -> qfix : qfix -> harpoon
|
||||
|
||||
|
||||
harpoon.list("notehu") -> HarpoonList
|
||||
harpoon.list().add()
|
||||
|
||||
|
100
lua/harpoon/data.lua
Normal file
100
lua/harpoon/data.lua
Normal file
@ -0,0 +1,100 @@
|
||||
local Path = require("plenary.path")
|
||||
|
||||
local data_path = vim.fn.stdpath("data")
|
||||
local full_data_path = string.format("%s/harpoon2.json", data_path)
|
||||
|
||||
local M = {}
|
||||
|
||||
function M.set_data_path(path)
|
||||
full_data_path = path
|
||||
end
|
||||
|
||||
local function has_keys(t)
|
||||
for _ in pairs(t) do
|
||||
return true
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
--- @alias RawData {[string]: string[]}
|
||||
|
||||
--- @class Data
|
||||
--- @field seen {[string]: boolean}
|
||||
--- @field _data RawData
|
||||
--- @field has_error boolean
|
||||
|
||||
|
||||
-- 1. load the data
|
||||
-- 2. keep track of the lists requested
|
||||
-- 3. sync save
|
||||
|
||||
local Data = {}
|
||||
|
||||
Data.__index = Data
|
||||
|
||||
---@param data any
|
||||
local function write_data(data)
|
||||
Path:new(full_data_path):write_data(vim.json.encode(data))
|
||||
end
|
||||
|
||||
---@return RawData
|
||||
local function read_data()
|
||||
return vim.json.decode(Path:new(full_data_path):read())
|
||||
end
|
||||
|
||||
---@return Harpoon
|
||||
function Data:new()
|
||||
local ok, data = pcall(read_data)
|
||||
|
||||
return setmetatable({
|
||||
_data = data,
|
||||
has_error = not ok,
|
||||
seen = {}
|
||||
}, self)
|
||||
end
|
||||
|
||||
---@param name string
|
||||
---@return string[]
|
||||
function Data:data(name)
|
||||
if self.has_error then
|
||||
error("Harpoon: there was an error reading the data file, cannot read data")
|
||||
end
|
||||
return self._data[name] or {}
|
||||
end
|
||||
|
||||
---@param name string
|
||||
---@param values string[]
|
||||
function Data:update(name, values)
|
||||
if self.has_error then
|
||||
error("Harpoon: there was an error reading the data file, cannot update")
|
||||
end
|
||||
self.seen[name] = true
|
||||
self._data[name] = values
|
||||
end
|
||||
|
||||
function Data:sync()
|
||||
if self.has_error then
|
||||
return
|
||||
end
|
||||
|
||||
if not has_keys(self.seen) then
|
||||
return
|
||||
end
|
||||
|
||||
local ok, data = pcall(read_data)
|
||||
if not ok then
|
||||
error("Harpoon: unable to sync data, error reading data file")
|
||||
end
|
||||
|
||||
for k, v in pairs(self._data) do
|
||||
data[k] = v
|
||||
end
|
||||
|
||||
pcall(write_data, data)
|
||||
end
|
||||
|
||||
|
||||
M.Data = Data
|
||||
|
||||
return M
|
||||
|
@ -1,13 +1,41 @@
|
||||
local Data = require("harpoon.data")
|
||||
local Config = require("harpoon.config")
|
||||
|
||||
-- setup
|
||||
-- read from a config file
|
||||
--
|
||||
|
||||
local M = {}
|
||||
local DEFAULT_LIST = "__harpoon_files"
|
||||
|
||||
---@param c HarpoonConfig
|
||||
function config(c)
|
||||
---@class Harpoon
|
||||
---@field config HarpoonConfig
|
||||
---@field data Data
|
||||
local Harpoon = {}
|
||||
|
||||
Harpoon.__index = Harpoon
|
||||
|
||||
---@return Harpoon
|
||||
function Harpoon:new()
|
||||
local config = Config.get_default_config()
|
||||
|
||||
return setmetatable({
|
||||
config = config,
|
||||
data = Data:new()
|
||||
}, self)
|
||||
end
|
||||
|
||||
return M
|
||||
---@param partial_config HarpoonPartialConfig
|
||||
---@return Harpoon
|
||||
function Harpoon:setup(partial_config)
|
||||
self.config = Config.merge_config(partial_config, self.config)
|
||||
return self
|
||||
end
|
||||
|
||||
---@param list string?
|
||||
---@return HarpoonList
|
||||
function Harpoon:list(name)
|
||||
name = name or DEFAULT_LIST
|
||||
end
|
||||
|
||||
return Harpoon:new()
|
||||
|
||||
|
@ -52,12 +52,15 @@ end
|
||||
function HarpoonList:resolve_displayed(displayed)
|
||||
local not_found = {}
|
||||
local config = get_config(self.config, self.name)
|
||||
|
||||
for _, v in ipairs(displayed) do
|
||||
local found = false
|
||||
for _, in_table in ipairs(self.items) do
|
||||
found = config.display(in_table, v)
|
||||
if config.display(in_table) == v then
|
||||
found = true
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
if not found then
|
||||
table.insert(not_found, v)
|
||||
|
228
lua/harpoon/some.json
Normal file
228
lua/harpoon/some.json
Normal file
@ -0,0 +1,228 @@
|
||||
{
|
||||
"key": [
|
||||
|
||||
nothuntoehuntoehuntoehuntoehuntoehun
|
||||
oentuhnoteuhntoehuouenhtuoenhtuonhtuoenhtuoenht 0,nthouenhtouenthoue
|
||||
1,
|
||||
2,
|
||||
3,
|
||||
4,
|
||||
5,
|
||||
6,
|
||||
7,
|
||||
8,
|
||||
9,
|
||||
10,
|
||||
11,
|
||||
|
||||
1,
|
||||
3,
|
||||
5,
|
||||
7,
|
||||
9,
|
||||
11,
|
||||
13,
|
||||
15,
|
||||
17,
|
||||
19,
|
||||
21,
|
||||
23,
|
||||
|
||||
2,
|
||||
5,
|
||||
8,
|
||||
11,
|
||||
14,
|
||||
17,
|
||||
20,
|
||||
23,
|
||||
26,
|
||||
29,
|
||||
32,
|
||||
35,
|
||||
|
||||
3,
|
||||
7,
|
||||
11,
|
||||
15,
|
||||
19,
|
||||
23,
|
||||
27,
|
||||
31,
|
||||
35,
|
||||
39,
|
||||
43,
|
||||
47,
|
||||
|
||||
4,
|
||||
9,
|
||||
14,
|
||||
19,
|
||||
24,
|
||||
29,
|
||||
34,
|
||||
39,
|
||||
44,
|
||||
49,
|
||||
54,
|
||||
59,
|
||||
|
||||
5,
|
||||
11,
|
||||
17,
|
||||
23,
|
||||
29,
|
||||
35,
|
||||
41,
|
||||
47,
|
||||
53,
|
||||
59,
|
||||
65,
|
||||
71,
|
||||
|
||||
6,
|
||||
13,
|
||||
20,
|
||||
27,
|
||||
34,
|
||||
41,
|
||||
48,
|
||||
55,
|
||||
62,
|
||||
69,
|
||||
76,
|
||||
83,
|
||||
|
||||
7,
|
||||
15,
|
||||
23,
|
||||
31,
|
||||
39,
|
||||
47,
|
||||
55,
|
||||
63,
|
||||
71,
|
||||
79,
|
||||
87,
|
||||
95,
|
||||
|
||||
8,
|
||||
17,
|
||||
26,
|
||||
35,
|
||||
44,
|
||||
53,
|
||||
62,
|
||||
71,
|
||||
80,
|
||||
89,
|
||||
98,
|
||||
107,
|
||||
|
||||
9,
|
||||
19,
|
||||
29,
|
||||
39,
|
||||
49,
|
||||
59,
|
||||
69,
|
||||
79,
|
||||
89,
|
||||
99,
|
||||
109,
|
||||
119,
|
||||
|
||||
10,
|
||||
21,
|
||||
32,
|
||||
43,
|
||||
54,
|
||||
65,
|
||||
76,
|
||||
87,
|
||||
98,
|
||||
109,
|
||||
120,
|
||||
131,
|
||||
|
||||
11,
|
||||
23,
|
||||
35,
|
||||
47,
|
||||
59,
|
||||
71,
|
||||
83,
|
||||
95,
|
||||
107,
|
||||
119,
|
||||
131,
|
||||
143,
|
||||
|
||||
12,
|
||||
25,
|
||||
38,
|
||||
51,
|
||||
64,
|
||||
77,
|
||||
90,
|
||||
103,
|
||||
116,
|
||||
129,
|
||||
142,
|
||||
155,
|
||||
|
||||
13,
|
||||
27,
|
||||
41,
|
||||
55,
|
||||
69,
|
||||
83,
|
||||
97,
|
||||
111,
|
||||
125,
|
||||
139,
|
||||
153,
|
||||
167,
|
||||
|
||||
14,
|
||||
29,
|
||||
44,
|
||||
59,
|
||||
74,
|
||||
89,
|
||||
104,
|
||||
119,
|
||||
134,
|
||||
149,
|
||||
164,
|
||||
179,
|
||||
|
||||
15,
|
||||
31,
|
||||
47,
|
||||
63,
|
||||
79,
|
||||
95,
|
||||
111,
|
||||
127,
|
||||
143,
|
||||
159,
|
||||
175,
|
||||
191,
|
||||
|
||||
16,
|
||||
33,
|
||||
50,
|
||||
67,
|
||||
84,
|
||||
101,
|
||||
118,
|
||||
135,
|
||||
152,
|
||||
169,
|
||||
186,
|
||||
203,
|
||||
|
||||
]
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user