* refactor: simplify logic to load web_devicons
* refactor: make register() asynchronous
* fix: load lazily modules outside this plugin
* refactor: simplify logic to wait initialization
* refactor: use uv.hrtime() instead of os.clock()
* fix: avoid errors in calling plenary.log in async
* test: store elapsed time to check in tests
* test: fix module names
This becomes a problem only in Ubuntu because macOS and Windows does not
care cases in filenames.
* test: fix types and unused modules
* style: fix by stylua
* refactor: make recency / entry_maker loaded lazily
Now it uses realpath for registering and validating DB. This means, if you have entries that has filenames differing only for case, it can deal with them as they exist.
Before this, it has miscalculated scores for such cases. For example, in case you have `/path/to/foo.lua` and `/path/to/Foo.lua`, it registers entries for each file. Now it detects accurate filename for the specified one, and removes it in validation.
* test: separate logic for utils
* fix!: register realpath for consistency
* refactor: convert fs module from class
* refactor: move db initialization phase to start()
* fix: run database:start() truly asynchronously
* fix: call each functions with async wrapping
* refactor: add types for args in command
* fix: run register() synchronously
Because vim.api.nvim_* cannot be used in asynchronous functions.
* docs: add note for calling setup() twice
* fix: run non-fast logic on next tick
* feat: call init process before telescope loading
Fix#231
This changes enable to load frecency without telescope's loading itself.
This is needed when you want to load telescope lazily, but want to start
registering process as soon as Neovim has started.
```lua
{
"nvim-telescope/telescope-frecency.nvim",
main = "frecency",
---@type FrecencyOpts
opts = {
db_safe_mode = false,
},
},
{
"nvim-telescope/telescope.nvim",
-- `cmd` opts makes lazy.nvim load telescope.nvim lazily.
cmd = { "Telescope" },
config = function()
local telescope = require "telescope"
telescope.setup {
extensions = {
other_extension = {
foo_bar = true,
},
-- Here you need no configuration opts for frecency because
-- you've already done.
}
}
-- This is still needed.
telescope.load_extension "frecency"
end,
},
```
* docs: add note for loading telescope.nvim lazily
* refactor: use vim.pesc instead of implementing
* feat: add optional func to ignore in registering
* test: add tests for ignore_register function
* docs: add note for `ignore_register` option
* docs: add note for use case of `ignore_patterns`
* feat: add function to query the DB
* docs: add documentation for frecency.query()
* test: fix tests to run with `timestamps` property
* test: add tests for frecency.query()
* chore: change the position of `?`
* fix: use config module to simplify code
* test: fix tests to use frecency.config
* test: remove macOS with nightly Neovim temporarily
* fix: fix prop attributes and names
* feat: load DB as lazily as possible
* fix: move util function to test module
* feat: use one coroutine to access DB
* test: fix to wait the table to be ready
* fix: avoid race conditions
Before this, it can run require("frecency").new() duplicatedly to wait
until frecency:setup() finishes.
* fix!: change timing for initialization
fix#109fix#59
This fixes problems below.
* Auto-validation feature is called at Neovim starting.
- → Now it starts at `:Telescope frecency` called at the first time.
* `frecency.setup()` is called every when `:Telescope frecency` is
called.
- → Now it is called only once.
* `telescope.setup()` calls `frecency.new()` and it reads the database.
This causes time in executing `init.lua`.
- → Now it reads the database lazily. It reads at the first time when
needed.
* test: change logic to initialize config
* test: make Neovim version newer in CI
* feat!: remove code for SQLite
ref [Introduce revised telescope-frecency.nvim : neovim](https://www.reddit.com/r/neovim/comments/174m8zu/introduce_revised_telescopefrecencynvim/)
I have deprecated SQLite features 4 months ago. It is the time to remove
code for them.
* test: fix test to load telescope validly
* test: remove sqlite.lua from CI settings
* test: test database as native
* fix: add lacked type from old database/sqlite.lua
* docs: remove description for SQLite3 logic
* chore: fix types
* chore: add types for Database:raw_table
* refactor: unite logic for finder & async_finder
* chore: fix types
* chore: add sleep to show results at first
* refactor: fix to find results separatedly
* test: remove unnecessary ones and fix others
* test: add matrix for 0.9.x & Windows
* test: use forked plenary.log for Windows
* test: fix to use strptime in Windows
* test: run again if segmentation fault in Windows
* test: loosen timeout for Perl
* test: use the latest plenary.nvim again
* chore: fix types
* chore: change variable name
* feat: watch changes of DB to reload
* chore: add comments to steps
* test: copy whole modules for testing in Windows
* fix: make valid paths for Windows
* test: add tests for Native
* test: use robust way to calculate time
vim.fn.strptime cannot be used in Lua loop
* chore: fix comments
* refactor: simplify the code
* test: loosen condition to detect failures
* test: disable some logging
Many loggings make the test fail.
* test: run tests sequentially in Windows
* test: loosen timeout not to fail on Windows
* refactor: make logic for Database be abstract
* feat: add logic for DB by string.dump
* fix: run with async.void to run synchronously
* test: add tests for native feature
* feat!: sort candidates by path when score is same
This is needed because candidates from SQLite is sorted by id, but ones from native is sorted by path.
* chore: clean up types
* feat: add lock/unlock feature to access DB
* test: use async version of busted
And disable benchmark tests (fix later)
* test: add tests for file_lock
* chore: use more explicit names
* chore: use plenary.log instead
* fix: wait async functions definitely
* feat: add migrator
* chore: fix logging
* fix: detect emptiness of the table
* fix: deal with buffer with no names
* test: loosen the condition temporarily
* test: add tests for migrator
* fix: return true when the table is not empty
* feat: load sqlite lazily not to require in start
* chore: add logging to calculate time for fetching
* feat: add converter from native code to SQLite
* feat: warn when sqlite.lua is not available
* feat: add FrecencyMigrateDB to migrate DB
* docs: add note for native code logic
* test: ignore type bug
* test: add tests for removing timestamps
I had a doubt when removing entries from timestamps, it could remove
ones for other files. I added tests but it was a needless fear.
* fix: deal with files that have no timestamps
I do not know why this case occurs. But care it.
* I did an overhall for all codes and added typing by Lua-language-server and tests. It also works on CI.
* Now it searches files on the workspace completely asynchronously. It does not block your text input. (Fix#106)
Make count = 1 when you open a file you've never opened (Fix#107)