From e7c9dee1e70aba53ddc52f4129f198ae2883af08 Mon Sep 17 00:00:00 2001 From: Senghan Bright Date: Wed, 4 Aug 2021 09:16:33 +0200 Subject: [PATCH] feat: allow user to disable database validation safe_mode (#20) * feat: allow user to disable database validation safe_mode * fix safe_mode logic * fix: fix user confirmation * feat: allow disabling of auto-validation --- lua/telescope/_extensions/frecency.lua | 3 +- .../_extensions/frecency/db_client.lua | 38 ++++++++++++------- plugin/frecency.vim | 5 +-- 3 files changed, 28 insertions(+), 18 deletions(-) diff --git a/lua/telescope/_extensions/frecency.lua b/lua/telescope/_extensions/frecency.lua index 6a3e4c2..2d21a07 100644 --- a/lua/telescope/_extensions/frecency.lua +++ b/lua/telescope/_extensions/frecency.lua @@ -268,11 +268,12 @@ return telescope.register_extension { set_config_state('user_workspaces', ext_config.workspaces, {}) -- start the database client - db_client.init(ext_config.ignore_patterns) + db_client.init(ext_config.ignore_patterns, ext_config.db_safe_mode or true, ext_config.auto_validate or true) end, exports = { frecency = frecency, get_workspace_tags = get_workspace_tags, + validate_db = db_client.validate, health = checkhealth, }, } diff --git a/lua/telescope/_extensions/frecency/db_client.lua b/lua/telescope/_extensions/frecency/db_client.lua index 68bdb9f..f8fb6dd 100644 --- a/lua/telescope/_extensions/frecency/db_client.lua +++ b/lua/telescope/_extensions/frecency/db_client.lua @@ -43,7 +43,7 @@ local function file_is_ignored(filepath) return is_ignored end -local function validate_db() +local function validate_db(safe_mode) if not sql_wrapper then return {} end local queries = sql_wrapper.queries @@ -56,33 +56,44 @@ local function validate_db() end end - -- don't allow removal of >N values from DB without confirmation local confirmed = false - if #pending_remove > DB_REMOVE_SAFETY_THRESHOLD then - if vim.fn.confirm("Telescope-Frecency: remove " .. #pending_remove .. " entries from SQLite3 database?", "&Yes\n&No", 2) then + if not safe_mode then confirmed = true + elseif #pending_remove > DB_REMOVE_SAFETY_THRESHOLD then + -- don't allow removal of >N values from DB without confirmation + local user_response = vim.fn.confirm("Telescope-Frecency: remove " .. #pending_remove .. " entries from SQLite3 database?", "&Yes\n&No", 2) + if user_response == 1 then + confirmed = true + else + vim.defer_fn(function() print("TelescopeFrecency: validation aborted.") end, 50) end else confirmed = true end - if confirmed then - for _, entry in pairs(pending_remove) do - -- remove entries from file and timestamp tables - sql_wrapper:do_transaction(queries.file_delete_entry , {where = {id = entry.id }}) - sql_wrapper:do_transaction(queries.timestamp_delete_entry, {where = {file_id = entry.id}}) + if #pending_remove > 0 then + if confirmed == true then + for _, entry in pairs(pending_remove) do + -- remove entries from file and timestamp tables + sql_wrapper:do_transaction(queries.file_delete_entry , {where = {id = entry.id }}) + sql_wrapper:do_transaction(queries.timestamp_delete_entry, {where = {file_id = entry.id}}) + end + print(('Telescope-Frecency: removed %d missing entries.'):format(#pending_remove)) + else + print("Telescope-Frecency: validation aborted.") end - else - print("TelescopeFrecency: validation aborted.") end end -local function init(config_ignore_patterns) +local function init(config_ignore_patterns, safe_mode, auto_validate) if sql_wrapper then return end sql_wrapper = sqlwrap:new() local first_run = sql_wrapper:bootstrap() ignore_patterns = config_ignore_patterns or default_ignore_patterns - validate_db() + + if auto_validate then + validate_db(safe_mode) + end if first_run then -- TODO: this needs to be scheduled for after shada load @@ -210,4 +221,5 @@ return { init = init, get_file_scores = get_file_scores, autocmd_handler = autocmd_handler, + validate = validate_db, } diff --git a/plugin/frecency.vim b/plugin/frecency.vim index 60b743b..02a8ec2 100644 --- a/plugin/frecency.vim +++ b/plugin/frecency.vim @@ -30,7 +30,4 @@ function! frecency#FrecencyComplete(findstart, base) end endfunction - - " lua require'telescope'.extensions.frecency.completefunc(action) - " lua require'telescope'.extensions.frecency.completefunc(res) - " require'telescope._extensions.frecency.db_client'.autocmd_handler(vim.fn.expand('')) +command FrecencyValidate lua require'telescope'.extensions.frecency.validate_db()