diff options
author | Toby Vincent <tobyv13@gmail.com> | 2022-10-04 18:14:24 -0500 |
---|---|---|
committer | Toby Vincent <tobyv13@gmail.com> | 2022-10-04 18:51:39 -0500 |
commit | f99afa1e0eca4be04524232bd953929d3524d072 (patch) | |
tree | f440179e9081fd892dd2bdd9ed960f2756988f7a /nvim/.config | |
parent | 07d3eb298b51d56e9540bff7c7b0918badd32dd6 (diff) |
feat(nvim): use frecency algorithm as telescope sorter
Diffstat (limited to 'nvim/.config')
-rw-r--r-- | nvim/.config/nvim/lua/tobyvin/plugins.lua | 3 | ||||
-rw-r--r-- | nvim/.config/nvim/lua/tobyvin/plugins/crates.lua | 1 | ||||
-rw-r--r-- | nvim/.config/nvim/lua/tobyvin/plugins/dap.lua | 44 | ||||
-rw-r--r-- | nvim/.config/nvim/lua/tobyvin/plugins/telescope.lua | 94 | ||||
-rw-r--r-- | nvim/.config/nvim/lua/tobyvin/plugins/tree-climber.lua | 2 |
5 files changed, 91 insertions, 53 deletions
diff --git a/nvim/.config/nvim/lua/tobyvin/plugins.lua b/nvim/.config/nvim/lua/tobyvin/plugins.lua index 70797d9..0b7f7d0 100644 --- a/nvim/.config/nvim/lua/tobyvin/plugins.lua +++ b/nvim/.config/nvim/lua/tobyvin/plugins.lua @@ -259,9 +259,8 @@ M.plugins = function(use) requires = { "nvim-lua/plenary.nvim", "BurntSushi/ripgrep", - "nvim-telescope/telescope-frecency.nvim", + { "nvim-telescope/telescope-frecency.nvim", requires = { "kkharji/sqlite.lua" } }, { "nvim-telescope/telescope-fzf-native.nvim", run = "make" }, - { "nvim-telescope/telescope-smart-history.nvim", requires = { "tami5/sqlite.lua", module = "sqlite" } }, "nvim-telescope/telescope-dap.nvim", "nvim-telescope/telescope-packer.nvim", "nvim-telescope/telescope-github.nvim", diff --git a/nvim/.config/nvim/lua/tobyvin/plugins/crates.lua b/nvim/.config/nvim/lua/tobyvin/plugins/crates.lua index aab88cb..67d1834 100644 --- a/nvim/.config/nvim/lua/tobyvin/plugins/crates.lua +++ b/nvim/.config/nvim/lua/tobyvin/plugins/crates.lua @@ -19,7 +19,6 @@ M.setup = function() callback = function() utils.documentation.register("toml", crates.open_documentation) - -- TODO: impl registration system like documentation (global and buffer?) local original = vim.lsp.handlers["textDocument/hover"] vim.lsp.handlers["textDocument/hover"] = function(...) if crates.popup_available() then diff --git a/nvim/.config/nvim/lua/tobyvin/plugins/dap.lua b/nvim/.config/nvim/lua/tobyvin/plugins/dap.lua index 547061a..c6a9ed9 100644 --- a/nvim/.config/nvim/lua/tobyvin/plugins/dap.lua +++ b/nvim/.config/nvim/lua/tobyvin/plugins/dap.lua @@ -46,6 +46,30 @@ M.progress_end = function(_, body) notif_data.spinner = nil end +M.hover_available = function() + local session = require("dap").session() + if not session then + return false + end + local frame = session.current_frame or {} + ---@diagnostic disable-next-line: missing-parameter + local expression = vim.fn.expand("<cexpr>") + local variable + local scopes = frame.scopes or {} + for _, s in pairs(scopes) do + variable = s.variables and s.variables[expression] + if variable then + return true + end + end + return session:evaluate(expression, function(err) + if not err then + return true + end + return false + end) +end + M.setup = function() local status_ok, dap = pcall(require, "dap") if not status_ok then @@ -141,24 +165,18 @@ M.setup = function() dap.listeners.before.event_terminated["close_repl"] = dap.repl.close dap.listeners.before.event_exited["close_repl"] = dap.repl.close - local keymap_restore = {} + local original_hover = vim.lsp.handlers["textDocument/hover"] dap.listeners.after.event_initialized["keymap"] = function() - for _, buf in pairs(vim.api.nvim_list_bufs()) do - local keymaps = vim.api.nvim_buf_get_keymap(buf, "n") - for _, keymap in pairs(keymaps) do - if keymap.lhs == "K" then - table.insert(keymap_restore, keymap) - vim.api.nvim_buf_del_keymap(buf, "n", "K") - end + vim.lsp.handlers["textDocument/hover"] = function(...) + if M.hover_available() then + require("dap.ui.widgets").hover() + else + original_hover(...) end end - vim.keymap.set("n", "K", require("dap.ui.widgets").hover, { desc = "Hover" }) end dap.listeners.before.event_terminated["keymap"] = function() - for _, k in pairs(keymap_restore) do - vim.keymap.set(k.mode, k.lhs, vim.F.if_nil(k.callback, k.rhs), { desc = k.desc }) - end - keymap_restore = {} + vim.lsp.handlers["textDocument/hover"] = original_hover end utils.keymap.group("n", "<leader>d", { desc = "Debug" }) diff --git a/nvim/.config/nvim/lua/tobyvin/plugins/telescope.lua b/nvim/.config/nvim/lua/tobyvin/plugins/telescope.lua index ae62598..25f08fd 100644 --- a/nvim/.config/nvim/lua/tobyvin/plugins/telescope.lua +++ b/nvim/.config/nvim/lua/tobyvin/plugins/telescope.lua @@ -1,6 +1,39 @@ local utils = require("tobyvin.utils") local M = {} +M.get_frecency_sorter = function() + local ext = require("telescope._extensions") + local _ = require("telescope.builtin") + local frecency_db = require("telescope._extensions.frecency.db_client") + + local fzf = ext.manager.fzf + local fzf_sorter = fzf.native_fzf_sorter() + + fzf_sorter.default_scoring_function = fzf_sorter.scoring_function + fzf_sorter.default_start = fzf_sorter.start + + fzf_sorter.scoring_function = function(self, prompt, line, entry) + if prompt == nil or prompt == "" then + for _, file_entry in ipairs(self.state.frecency) do + local filepath = entry.cwd .. "/" .. entry.value + if file_entry.filename == filepath then + return 9999 - file_entry.score + end + end + return 9999 + end + return self.default_scoring_function(self, prompt, line, entry) + end + + fzf_sorter.start = function(self, prompt) + self.default_start(self, prompt) + if not self.state.frecency then + self.state.frecency = frecency_db.get_file_scores() + end + end + return fzf_sorter +end + M.setup = function() local status_ok, telescope = pcall(require, "telescope") if not status_ok then @@ -19,6 +52,7 @@ M.setup = function() }, }, file_ignore_patterns = { "^.git/", "^target/" }, + file_sorter = M.get_frecency_sorter(), vimgrep_arguments = { "rg", "--color=never", @@ -29,10 +63,7 @@ M.setup = function() "--hidden", "--smart-case", "--trim", - "-u", }, - layout_strategy = "flex", - scroll_strategy = "cycle", history = { path = vim.fn.stdpath("data") .. "/databases/telescope_history.sqlite3", limit = 100, @@ -43,35 +74,33 @@ M.setup = function() }, pickers = { find_files = { - theme = "dropdown", find_command = { "fd", "--type", "f", "--hidden", "--strip-cwd-prefix" }, }, live_grep = { theme = "ivy" }, - lsp_references = { theme = "dropdown" }, - lsp_code_actions = { theme = "dropdown" }, - lsp_definitions = { theme = "dropdown" }, - lsp_implementations = { theme = "dropdown" }, buffers = { show_all_buffers = true, sort_lastused = true, }, }, + extensions = {}, }) -- Extensions - telescope.load_extension("smart_history") telescope.load_extension("fzf") + telescope.load_extension("frecency") + telescope.load_extension("dap") local builtins = require("telescope.builtin") - local extensions = telescope.extensions + local frecency = telescope.extensions.frecency + local dap = telescope.extensions.dap utils.keymap.group("n", "<leader>f", { desc = "Find" }) - utils.keymap.group("n", "<leader>g", { desc = "Git" }) vim.keymap.set("n", "<leader>fa", builtins.autocommands, { desc = "Autocommands" }) vim.keymap.set("n", "<leader>fb", builtins.buffers, { desc = "Buffers" }) vim.keymap.set("n", "<leader>fc", builtins.commands, { desc = "Commands" }) vim.keymap.set("n", "<leader>fC", builtins.command_history, { desc = "Command History" }) + vim.keymap.set("n", "<leader>fe", frecency.frecency, { desc = "Frecency" }) vim.keymap.set("n", "<leader>ff", builtins.find_files, { desc = "Files" }) vim.keymap.set("n", "<leader>fF", builtins.filetypes, { desc = "Filetypes" }) vim.keymap.set("n", "<leader>fg", builtins.live_grep, { desc = "Grep" }) @@ -92,32 +121,27 @@ M.setup = function() vim.keymap.set("n", "<leader>ft", builtins.colorscheme, { desc = "Colorscheme" }) vim.keymap.set("n", "<leader>fv", builtins.vim_options, { desc = "Vim Options" }) vim.keymap.set("n", "<leader>f'", builtins.registers, { desc = "Registers" }) - vim.keymap.set("n", "<leader>gb", builtins.git_branches, { desc = "Checkout branch" }) - vim.keymap.set("n", "<leader>gc", builtins.git_commits, { desc = "Checkout commit" }) - vim.keymap.set("n", "<leader>gd", builtins.git_status, { desc = "Git diffs" }) - - telescope.load_extension("git_worktree") - utils.keymap.group("n", "<leader>gw", { desc = "Worktree" }) - vim.keymap.set("n", "<leader>gw", extensions.git_worktree.git_worktrees, { desc = "Switch worktree" }) - vim.keymap.set("n", "<leader>gW", extensions.git_worktree.create_git_worktree, { desc = "Create worktree" }) - telescope.load_extension("gh") - utils.keymap.group("n", "<leader>gG", { desc = "Github" }) - vim.keymap.set("n", "<leader>gGi", extensions.gh.issues, { desc = "Issues" }) - vim.keymap.set("n", "<leader>gGp", extensions.gh.pull_request, { desc = "Pull request" }) - vim.keymap.set("n", "<leader>gGg", extensions.gh.gist, { desc = "Gist" }) - vim.keymap.set("n", "<leader>gGr", extensions.gh.run, { desc = "Run" }) + vim.keymap.set("n", "<leader>dd", dap.configurations, { desc = "DAP Configurations" }) + vim.keymap.set("n", "<leader>dC", dap.commands, { desc = "DAP Commands" }) + vim.keymap.set("n", "<leader>dl", dap.list_breakpoints, { desc = "List Breakpoints" }) + vim.keymap.set("n", "<leader>dv", dap.variables, { desc = "List variables" }) + vim.keymap.set("n", "<leader>df", dap.frames, { desc = "List Frames" }) - telescope.load_extension("packer") - utils.keymap.group("n", "<leader>p", { desc = "Packer" }) - vim.keymap.set("n", "<leader>pf", extensions.packer.packer, { desc = "Find plugins" }) - - telescope.load_extension("dap") - vim.keymap.set("n", "<leader>dd", extensions.dap.configurations, { desc = "Configurations" }) - vim.keymap.set("n", "<leader>dC", extensions.dap.commands, { desc = "Commands" }) - vim.keymap.set("n", "<leader>dl", extensions.dap.list_breakpoints, { desc = "List Breakpoints" }) - vim.keymap.set("n", "<leader>dv", extensions.dap.variables, { desc = "Variables" }) - vim.keymap.set("n", "<leader>df", extensions.dap.frames, { desc = "Frames" }) + vim.api.nvim_create_autocmd("User", { + group = vim.api.nvim_create_augroup("tobyvin_telescope", { clear = true }), + pattern = "GitAttach", + callback = function(args) + telescope.load_extension("git_worktree") + local wt = telescope.extensions.git_worktree + local bufnr = vim.F.if_nil(args.data.buf, args.buf) + vim.keymap.set("n", "<leader>gb", builtins.git_branches, { desc = "Checkout branch", buffer = bufnr }) + vim.keymap.set("n", "<leader>gc", builtins.git_commits, { desc = "Checkout commit", buffer = bufnr }) + vim.keymap.set("n", "<leader>gd", builtins.git_status, { desc = "Git diffs", buffer = bufnr }) + vim.keymap.set("n", "<leader>gw", wt.git_worktrees, { desc = "Switch worktree", buffer = bufnr }) + vim.keymap.set("n", "<leader>gW", wt.create_git_worktree, { desc = "Create worktree", buffer = bufnr }) + end, + }) end return M diff --git a/nvim/.config/nvim/lua/tobyvin/plugins/tree-climber.lua b/nvim/.config/nvim/lua/tobyvin/plugins/tree-climber.lua index 1ef2b12..3fa8a44 100644 --- a/nvim/.config/nvim/lua/tobyvin/plugins/tree-climber.lua +++ b/nvim/.config/nvim/lua/tobyvin/plugins/tree-climber.lua @@ -11,8 +11,6 @@ M.setup = function() vim.keymap.set({ "n", "v", "o" }, "<s-l>", tree_climber.goto_child, { desc = "Goto Child" }) vim.keymap.set({ "n", "v", "o" }, "<s-j>", tree_climber.goto_next, { desc = "Goto Next" }) vim.keymap.set({ "n", "v", "o" }, "<s-k>", tree_climber.goto_prev, { desc = "Goto Prev" }) - vim.keymap.set("n", "<c-k>", tree_climber.swap_prev, { desc = "Swap Prev" }) - vim.keymap.set("n", "<c-j>", tree_climber.swap_next, { desc = "Swap Next" }) end return M |