mirror of
https://github.com/kristoferssolo/telescope-frecency.nvim.git
synced 2025-10-21 20:10:38 +00:00
feat: add an command to delete an entry from DB (#152)
* feat: add an command to delete an entry from DB Fix #151 * test: add tests for frecency:delete() * docs: add note for FrecencyDB
This commit is contained in:
parent
daf59744f6
commit
ca5fa5326f
13
README.md
13
README.md
@ -263,6 +263,19 @@ The command `FrecencyValidate` can be used to clean the database when
|
|||||||
:FrecencyValidate!
|
:FrecencyValidate!
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Delete entries
|
||||||
|
|
||||||
|
You can delete entries from DB by `FrecencyDelete` command. This command does
|
||||||
|
not remove the file itself, only from DB.
|
||||||
|
|
||||||
|
```vim
|
||||||
|
" delete the current opened file
|
||||||
|
:FrecencyDelete
|
||||||
|
|
||||||
|
" delete the supplied path
|
||||||
|
:FrecencyDelete /full/path/to/the/file
|
||||||
|
```
|
||||||
|
|
||||||
### Remove dependency for [sqlite.lua][]
|
### Remove dependency for [sqlite.lua][]
|
||||||
|
|
||||||
The former version of this plugin has used SQLite3 library to store data. When
|
The former version of this plugin has used SQLite3 library to store data. When
|
||||||
|
|||||||
@ -25,6 +25,10 @@ function Database:unlinked_entries() end
|
|||||||
---@return nil
|
---@return nil
|
||||||
function Database:remove_files(files) end
|
function Database:remove_files(files) end
|
||||||
|
|
||||||
|
---@param path string
|
||||||
|
---@return boolean
|
||||||
|
function Database:remove_entry(path) end
|
||||||
|
|
||||||
---@param path string
|
---@param path string
|
||||||
---@param max_count integer
|
---@param max_count integer
|
||||||
---@param datetime string?
|
---@param datetime string?
|
||||||
|
|||||||
@ -196,4 +196,17 @@ function Native:raw_save(tbl)
|
|||||||
assert(not async.uv.fs_close(fd))
|
assert(not async.uv.fs_close(fd))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
---@param path string
|
||||||
|
---@return boolean
|
||||||
|
function Native:remove_entry(path)
|
||||||
|
if not self.table.records[path] then
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
self.table.records[path] = nil
|
||||||
|
wait(function()
|
||||||
|
self:save()
|
||||||
|
end)
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
return Native
|
return Native
|
||||||
|
|||||||
@ -145,4 +145,11 @@ function Sqlite:remove_files(ids)
|
|||||||
self.sqlite.files:remove { id = ids }
|
self.sqlite.files:remove { id = ids }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
---@param path string
|
||||||
|
---@return boolean
|
||||||
|
function Sqlite:remove_entry(path)
|
||||||
|
local exists = not not self.sqlite.files:get({ where = { path = path } })[1]
|
||||||
|
return exists and self.sqlite.files:remove { path = path } or false
|
||||||
|
end
|
||||||
|
|
||||||
return Sqlite
|
return Sqlite
|
||||||
|
|||||||
@ -104,6 +104,12 @@ function Frecency:setup()
|
|||||||
self:migrate_database()
|
self:migrate_database()
|
||||||
end, { desc = "Migrate DB telescope-frecency to native code" })
|
end, { desc = "Migrate DB telescope-frecency to native code" })
|
||||||
|
|
||||||
|
vim.api.nvim_create_user_command("FrecencyDelete", function(info)
|
||||||
|
local path_string = info.args == "" and "%:p" or info.args
|
||||||
|
local path = vim.fn.expand(path_string) --[[@as string]]
|
||||||
|
self:delete(path)
|
||||||
|
end, { nargs = "?", complete = "file", desc = "Delete entry from telescope-frecency" })
|
||||||
|
|
||||||
local group = vim.api.nvim_create_augroup("TelescopeFrecency", {})
|
local group = vim.api.nvim_create_augroup("TelescopeFrecency", {})
|
||||||
vim.api.nvim_create_autocmd({ "BufWinEnter", "BufWritePost" }, {
|
vim.api.nvim_create_autocmd({ "BufWinEnter", "BufWritePost" }, {
|
||||||
desc = "Update database for telescope-frecency",
|
desc = "Update database for telescope-frecency",
|
||||||
@ -238,6 +244,16 @@ function Frecency:migrate_database(to_sqlite, silently)
|
|||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
---@param path string
|
||||||
|
---@return nil
|
||||||
|
function Frecency:delete(path)
|
||||||
|
if self.database:remove_entry(path) then
|
||||||
|
self:notify("successfully deleted: %s", path)
|
||||||
|
else
|
||||||
|
self:warn("failed to delete: %s", path)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
---@private
|
---@private
|
||||||
---@param fmt string
|
---@param fmt string
|
||||||
---@param ... any?
|
---@param ... any?
|
||||||
|
|||||||
@ -394,6 +394,35 @@ describe("frecency", function()
|
|||||||
end)
|
end)
|
||||||
end)
|
end)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
describe("delete", function()
|
||||||
|
describe("when file exists", function()
|
||||||
|
with_files({ "hoge1.txt", "hoge2.txt" }, function(frecency, finder, dir)
|
||||||
|
local register = make_register(frecency, dir)
|
||||||
|
register("hoge1.txt", "2023-07-29T00:00:00+09:00")
|
||||||
|
register("hoge2.txt", "2023-07-29T00:01:00+09:00")
|
||||||
|
|
||||||
|
it("deletes the file successfully", function()
|
||||||
|
local path = filepath(dir, "hoge2.txt")
|
||||||
|
local result
|
||||||
|
---@diagnostic disable-next-line: duplicate-set-field
|
||||||
|
frecency.notify = function(self, fmt, ...)
|
||||||
|
vim.notify(self:message(fmt, ...))
|
||||||
|
result = true
|
||||||
|
end
|
||||||
|
frecency:delete(path)
|
||||||
|
assert.are.same(result, true)
|
||||||
|
end)
|
||||||
|
|
||||||
|
it("returns valid results", function()
|
||||||
|
local results = finder:get_results(nil, "2023-07-29T02:00:00+09:00")
|
||||||
|
assert.are.same({
|
||||||
|
{ count = 1, path = filepath(dir, "hoge1.txt"), score = 10 },
|
||||||
|
}, results)
|
||||||
|
end)
|
||||||
|
end)
|
||||||
|
end)
|
||||||
|
end)
|
||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user