aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/nvim/.config
diff options
context:
space:
mode:
authorToby Vincent <tobyv13@gmail.com>2022-10-04 18:14:24 -0500
committerToby Vincent <tobyv13@gmail.com>2022-10-04 18:51:39 -0500
commitf99afa1e0eca4be04524232bd953929d3524d072 (patch)
treef440179e9081fd892dd2bdd9ed960f2756988f7a /nvim/.config
parent07d3eb298b51d56e9540bff7c7b0918badd32dd6 (diff)
feat(nvim): use frecency algorithm as telescope sorter
Diffstat (limited to 'nvim/.config')
-rw-r--r--nvim/.config/nvim/lua/tobyvin/plugins.lua3
-rw-r--r--nvim/.config/nvim/lua/tobyvin/plugins/crates.lua1
-rw-r--r--nvim/.config/nvim/lua/tobyvin/plugins/dap.lua44
-rw-r--r--nvim/.config/nvim/lua/tobyvin/plugins/telescope.lua94
-rw-r--r--nvim/.config/nvim/lua/tobyvin/plugins/tree-climber.lua2
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