mirror of
https://github.com/kristoferssolo/telescope-frecency.nvim.git
synced 2025-10-21 20:10:38 +00:00
feat: add JSON output for query() (#262)
This makes it be enable to do this.
```bash
$ nvim --headless +'=require("frecency").query { limit = 3, json = true }' +q | jq .
[
"/path/to/most/opened/file",
"/path/to/second/file",
"/path/to/third/file"
]
```
* chore: add `debug_timer` option to log in timer
* fix: wait synchronously for DB not in coroutine
* feat: add `json` option to dump JSON for DB
This commit is contained in:
parent
dbca328c59
commit
3c5b61cda1
@ -9,6 +9,7 @@ local os_util = require "frecency.os_util"
|
|||||||
---@field db_safe_mode? boolean default: true
|
---@field db_safe_mode? boolean default: true
|
||||||
---@field db_validate_threshold? integer default: 10
|
---@field db_validate_threshold? integer default: 10
|
||||||
---@field debug? boolean default: false
|
---@field debug? boolean default: false
|
||||||
|
---@field debug_timer? boolean default: false
|
||||||
---@field default_workspace? string default: nil
|
---@field default_workspace? string default: nil
|
||||||
---@field disable_devicons? boolean default: false
|
---@field disable_devicons? boolean default: false
|
||||||
---@field filter_delimiter? string default: ":"
|
---@field filter_delimiter? string default: ":"
|
||||||
@ -39,6 +40,7 @@ local Config = {}
|
|||||||
---@field db_safe_mode boolean default: true
|
---@field db_safe_mode boolean default: true
|
||||||
---@field db_validate_threshold integer default: 10
|
---@field db_validate_threshold integer default: 10
|
||||||
---@field debug boolean default: false
|
---@field debug boolean default: false
|
||||||
|
---@field debug_timer boolean default: false
|
||||||
---@field default_workspace? string default: nil
|
---@field default_workspace? string default: nil
|
||||||
---@field disable_devicons boolean default: false
|
---@field disable_devicons boolean default: false
|
||||||
---@field filter_delimiter string default: ":"
|
---@field filter_delimiter string default: ":"
|
||||||
@ -66,6 +68,7 @@ Config.new = function()
|
|||||||
db_safe_mode = true,
|
db_safe_mode = true,
|
||||||
db_validate_threshold = true,
|
db_validate_threshold = true,
|
||||||
debug = true,
|
debug = true,
|
||||||
|
debug_timer = true,
|
||||||
default_workspace = true,
|
default_workspace = true,
|
||||||
disable_devicons = true,
|
disable_devicons = true,
|
||||||
filter_delimiter = true,
|
filter_delimiter = true,
|
||||||
@ -106,6 +109,7 @@ Config.default_values = {
|
|||||||
db_safe_mode = true,
|
db_safe_mode = true,
|
||||||
db_validate_threshold = 10,
|
db_validate_threshold = 10,
|
||||||
debug = false,
|
debug = false,
|
||||||
|
debug_timer = false,
|
||||||
default_workspace = nil,
|
default_workspace = nil,
|
||||||
disable_devicons = false,
|
disable_devicons = false,
|
||||||
filter_delimiter = ":",
|
filter_delimiter = ":",
|
||||||
|
|||||||
@ -1,4 +1,6 @@
|
|||||||
|
local log = require "frecency.log"
|
||||||
local timer = require "frecency.timer"
|
local timer = require "frecency.timer"
|
||||||
|
local wait = require "frecency.wait"
|
||||||
local lazy_require = require "frecency.lazy_require"
|
local lazy_require = require "frecency.lazy_require"
|
||||||
local async = lazy_require "plenary.async" --[[@as FrecencyPlenaryAsync]]
|
local async = lazy_require "plenary.async" --[[@as FrecencyPlenaryAsync]]
|
||||||
|
|
||||||
@ -24,7 +26,15 @@ end
|
|||||||
---@param key string
|
---@param key string
|
||||||
function Table:__index(key)
|
function Table:__index(key)
|
||||||
if key == "records" and not rawget(self, "is_ready") then
|
if key == "records" and not rawget(self, "is_ready") then
|
||||||
Table.wait_ready(self)
|
local is_async = not not coroutine.running()
|
||||||
|
if is_async then
|
||||||
|
Table.wait_ready(self)
|
||||||
|
else
|
||||||
|
log.debug "need wait() for wait_ready()"
|
||||||
|
wait(function()
|
||||||
|
Table.wait_ready(self)
|
||||||
|
end)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
return vim.F.if_nil(rawget(self, key), Table[key])
|
return vim.F.if_nil(rawget(self, key), Table[key])
|
||||||
end
|
end
|
||||||
|
|||||||
@ -200,6 +200,7 @@ end
|
|||||||
|
|
||||||
---@class FrecencyQueryOpts
|
---@class FrecencyQueryOpts
|
||||||
---@field direction? "asc"|"desc" default: "desc"
|
---@field direction? "asc"|"desc" default: "desc"
|
||||||
|
---@field json? boolean default: false
|
||||||
---@field limit? integer default: 100
|
---@field limit? integer default: 100
|
||||||
---@field order? FrecencyQueryOrder default: "score"
|
---@field order? FrecencyQueryOrder default: "score"
|
||||||
---@field record? boolean default: false
|
---@field record? boolean default: false
|
||||||
@ -213,10 +214,11 @@ end
|
|||||||
|
|
||||||
---@param opts? FrecencyQueryOpts
|
---@param opts? FrecencyQueryOpts
|
||||||
---@param epoch? integer
|
---@param epoch? integer
|
||||||
---@return FrecencyQueryEntry[]|string[]
|
---@return string|FrecencyQueryEntry[]|string[]
|
||||||
function Frecency:query(opts, epoch)
|
function Frecency:query(opts, epoch)
|
||||||
opts = vim.tbl_extend("force", {
|
opts = vim.tbl_extend("force", {
|
||||||
direction = "desc",
|
direction = "desc",
|
||||||
|
json = false,
|
||||||
limit = 100,
|
limit = 100,
|
||||||
order = "score",
|
order = "score",
|
||||||
record = false,
|
record = false,
|
||||||
@ -235,9 +237,9 @@ function Frecency:query(opts, epoch)
|
|||||||
return entry.path
|
return entry.path
|
||||||
end, entries)
|
end, entries)
|
||||||
if #results > opts.limit then
|
if #results > opts.limit then
|
||||||
return vim.list_slice(results, 1, opts.limit)
|
results = vim.list_slice(results, 1, opts.limit)
|
||||||
end
|
end
|
||||||
return results
|
return opts.json and vim.json.encode(results) or results
|
||||||
end
|
end
|
||||||
|
|
||||||
---@private
|
---@private
|
||||||
|
|||||||
@ -23,6 +23,9 @@ function M.track(event)
|
|||||||
return stats._stats.times[key] and make_key((num or 1) + 1) or key
|
return stats._stats.times[key] and make_key((num or 1) + 1) or key
|
||||||
end
|
end
|
||||||
stats.track(make_key())
|
stats.track(make_key())
|
||||||
|
if config.debug_timer then
|
||||||
|
log.debug(event)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user