diff --git a/lua/opdavies/init.lua b/lua/opdavies/init.lua index c89e889..aa51186 100644 --- a/lua/opdavies/init.lua +++ b/lua/opdavies/init.lua @@ -1,14 +1,5 @@ pcall("require", impatient) require "opdavies.globals" - require "opdavies.options" - require "opdavies.lsp" - -require "opdavies.telescope.setup" -require "opdavies.telescope.mappings" - -vim.api.nvim_create_user_command("GoToFile", function() - require("opdavies.telescope").git_files() -end, {}) diff --git a/lua/opdavies/keymap.lua b/lua/opdavies/keymap.lua deleted file mode 100644 index df7d5f3..0000000 --- a/lua/opdavies/keymap.lua +++ /dev/null @@ -1,23 +0,0 @@ -local M = {} - -M.imap = function(tbl) - vim.keymap.set("i", tbl[1], tbl[2], tbl[3]) -end - -M.map = function(tbl) - vim.keymap.set(tbl[1], tbl[2], tbl[3], tbl[4] or {}) -end - -M.nmap = function(tbl) - vim.keymap.set("n", tbl[1], tbl[2], tbl[3]) -end - -M.vmap = function(tbl) - vim.keymap.set("v", tbl[1], tbl[2], tbl[3]) -end - -M.xmap = function(tbl) - vim.keymap.set("x", tbl[1], tbl[2], tbl[3]) -end - -return M diff --git a/lua/opdavies/lsp/init.lua b/lua/opdavies/lsp/init.lua index 519312c..0c67994 100644 --- a/lua/opdavies/lsp/init.lua +++ b/lua/opdavies/lsp/init.lua @@ -1,66 +1,6 @@ -local has_lsp, lspconfig = pcall(require, "lspconfig") -if not has_lsp then - return -end - +local lspconfig = require "lspconfig" local nvim_status = require "lsp-status" -local imap = require("opdavies.keymap").imap -local nmap = require("opdavies.keymap").nmap - -local telescope_mapper = require "opdavies.telescope.mappings" - -local buf_nnoremap = function(opts) - opts.buffer = 0 - nmap(opts) -end - -local buf_inoremap = function(opts) - opts.buffer = 0 - imap(opts) -end - -local custom_attach = function(client) - local filetype = vim.api.nvim_buf_get_option(0, "filetype") - - nvim_status.on_attach(client) - - buf_inoremap { "", vim.lsp.buf.signature_help } - buf_nnoremap { "ca", vim.lsp.buf.code_action } - buf_nnoremap { "d", vim.diagnostic.open_float } - buf_nnoremap { "rn", vim.lsp.buf.rename } - buf_nnoremap { "rr", "LspRestart" } - buf_nnoremap { "[d", vim.diagnostic.goto_prev } - buf_nnoremap { "]d", vim.diagnostic.goto_next } - - local handlers = require "opdavies.lsp.handlers" - - buf_nnoremap { "gD", vim.lsp.buf.declaration } - buf_nnoremap { "gd", handlers.definition } - buf_nnoremap { "gi", vim.lsp.buf.implementation } - buf_nnoremap { "gT", vim.lsp.buf.type_definition } - - if filetype ~= "lua" then - buf_nnoremap { "K", vim.lsp.buf.hover } - end - - telescope_mapper("dl", "diagnostics", nil, true) - - -- Set autocommands conditional on server_capabilities - if client.server_capabilities.document_highlight then - vim.cmd [[ - augroup lsp_document_highlight - autocmd! * - autocmd CursorHold lua vim.lsp.buf.document_highlight() - autocmd CursorMoved lua vim.lsp.buf.clear_references() - augroup END - ]] - end - - -- Attach any filetype specific options to the client - -- filetype_attach[filetype](client) -end - require("neodev").setup {} local servers = { @@ -128,12 +68,11 @@ for server_name, config in pairs(servers) do config = {} end - lspconfig[server_name].setup { + config = vim.tbl_deep_extend("force", {}, { capabilities = capabilities, - filetypes = config.filetypes, - on_attach = custom_attach, - settings = config.settings, - } + }, config) + + lspconfig[server_name].setup(config) end vim.diagnostic.config { @@ -143,3 +82,31 @@ vim.diagnostic.config { update_in_insert = false, virtual_text = { spacing = 2 }, } + +vim.api.nvim_create_autocmd("LspAttach", { + callback = function() + local builtin = require "telescope.builtin" + + -- buf_inoremap { "", vim.lsp.buf.signature_help } + -- buf_nnoremap { "ca", vim.lsp.buf.code_action } + -- buf_nnoremap { "d", vim.diagnostic.open_float } + -- buf_nnoremap { "rn", vim.lsp.buf.rename } + -- buf_nnoremap { "rr", "LspRestart" } + -- buf_nnoremap { "[d", vim.diagnostic.goto_prev } + -- buf_nnoremap { "]d", vim.diagnostic.goto_next } + + -- buf_nnoremap { "gD", vim.lsp.buf.declaration } + -- buf_nnoremap { "gd", handlers.definition } + -- buf_nnoremap { "gi", vim.lsp.buf.implementation } + -- buf_nnoremap { "gT", vim.lsp.buf.type_definition } + + vim.keymap.set("n", "gd", builtin.lsp_definitions, { buffer = 0 }) + vim.keymap.set("n", "gr", builtin.lsp_references, { buffer = 0 }) + vim.keymap.set("n", "gD", vim.lsp.buf.declaration, { buffer = 0 }) + vim.keymap.set("n", "gT", vim.lsp.buf.type_definition, { buffer = 0 }) + vim.keymap.set("n", "K", vim.lsp.buf.hover, { buffer = 0 }) + + vim.keymap.set("n", "cr", vim.lsp.buf.rename, { buffer = 0 }) + vim.keymap.set("n", "ca", vim.lsp.buf.code_action, { buffer = 0 }) + end, +}) diff --git a/lua/opdavies/telescope/init.lua b/lua/opdavies/telescope/init.lua deleted file mode 100644 index f6d5e41..0000000 --- a/lua/opdavies/telescope/init.lua +++ /dev/null @@ -1,161 +0,0 @@ -SHOULD_RELOAD_TELESCOPE = true - -local reloader = function() - if SHOULD_RELOAD_TELESCOPE then - RELOAD "plenary" - RELOAD "telescope" - RELOAD "opdavies.telescope.setup" - end -end - -local themes = require "telescope.themes" - -local M = {} - -function M.current_buf() - local opts = { - sorting_strategy = "ascending", - previewer = false, - } - - require("telescope.builtin").current_buffer_fuzzy_find(opts) -end - -M.diagnostics = function() - local theme = require("telescope.themes").get_dropdown { - previewer = false, - } - - require("telescope.builtin").diagnostics(theme) -end - -function M.lsp_document_symbols() - local theme = require("telescope.themes").get_dropdown { - previewer = false, - } - - require("telescope.builtin").lsp_document_symbols(theme) -end - -function M.edit_neovim() - local opts = { - cwd = "~/Code/github.com/opdavies/dotfiles/config/neovim", - find_command = { "rg", "--no-ignore", "--files", "--follow" }, - path_display = { "shorten" }, - prompt_title = "~ dotfiles ~", - no_ignore = true, - - layout_strategy = "flex", - layout_config = { - height = 0.8, - prompt_position = "top", - width = 0.9, - - horizontal = { - width = { padding = 0.15 }, - }, - vertical = { - preview_height = 0.75, - }, - }, - } - - require("telescope.builtin").find_files(opts) -end - -function M.edit_zsh() - local opts = { - cwd = "~/.config/zsh", - path_display = { "shorten" }, - prompt_title = "~ zsh ~", - no_ignore = true, - - layout_strategy = "flex", - layout_config = { - height = 0.8, - prompt_position = "top", - width = 0.9, - - horizontal = { - width = { padding = 0.15 }, - }, - vertical = { - preview_height = 0.75, - }, - }, - } - - require("telescope.builtin").find_files(opts) -end - -function M.find_all_files() - local opts = { - file_ignore_patterns = { ".direnv", ".git" }, - no_ignore = true, - prompt_title = "All Files", - } - - require("telescope.builtin").find_files(opts) -end - -function M.git_files() - local opts = { - hidden = true, - no_ignore = true, - } - - require("telescope.builtin").git_files(opts) -end - -function M.grep_prompt() - require("telescope.builtin").grep_string { - path_display = { "shorten" }, - search = vim.fn.input "Grep String > ", - } -end - -function M.live_grep() - require("telescope").extensions.live_grep_args.live_grep_args { - file_ignore_patterns = { ".git/" }, - hidden = true, - no_ignore = true, - sorting_strategy = "ascending", - } -end - -function M.oldfiles() - local opts = { - prompt_title = "History", - } - - require("telescope").extensions.frecency.frecency(opts) -end - -function M.search_todos() - local opts = { - search = "TODO", - search_dirs = { - "app", - "docroot/modules/custom", - "docroot/themes/custom", - "src", - "web/modules/custom", - "web/themes/custom", - }, - prompt_title = "TODOs", - } - - require("telescope.builtin").grep_string(opts) -end - -return setmetatable({}, { - __index = function(_, k) - reloader() - - if M[k] then - return M[k] - else - return require("telescope.builtin")[k] - end - end, -}) diff --git a/lua/opdavies/telescope/mappings.lua b/lua/opdavies/telescope/mappings.lua deleted file mode 100644 index ff68718..0000000 --- a/lua/opdavies/telescope/mappings.lua +++ /dev/null @@ -1,76 +0,0 @@ -TelescopeMapArgs = TelescopeMapArgs or {} - -local telescope_mapper = function(key, f, options, buffer) - local map_key = vim.api.nvim_replace_termcodes(key .. f, true, true, true) - - TelescopeMapArgs[map_key] = options or {} - - local mode = "n" - local rhs = string.format("lua R('opdavies.telescope')['%s'](TelescopeMapArgs['%s'])", f, map_key) - - local map_options = { - noremap = true, - silent = true, - } - - if not buffer then - vim.api.nvim_set_keymap(mode, key, rhs, map_options) - else - vim.api.nvim_buf_set_keymap(0, mode, key, rhs, map_options) - end -end - --- Based on https://github.com/nvim-lua/kickstart.nvim --- TODO: refactor telescope_mapper and add descriptions. -telescope_mapper("/", "current_buf") -- [/] Fuzzily search in current buffer -telescope_mapper("", "buffers") -- [ ] Find existing buffers -telescope_mapper("s.", "oldfiles") -- '[S]earch Recent Files ("." for repeat) -telescope_mapper("sF", "find_all_files") -- [S]earch all [F]iles -telescope_mapper("sf", "find_files") -- [S]earch [F]iles -telescope_mapper("sg", "git_files") -- [S]earch [G]it Files -telescope_mapper("sh", "help_tags") -- [S]earch [H]elp -telescope_mapper("sl", "live_grep") -- [S]earch using [L]ive grep -telescope_mapper("sp", "grep_prompt") -- [S]earch using grep [P]rompt -telescope_mapper("st", "search_todos") -- [S]earch using grep [P]rompt - -local builtin = require "telescope.builtin" -local telescope = require "telescope" - -local nmap = require("opdavies.keymap").nmap - -nmap { - "s/", - function() - builtin.live_grep { - grep_open_files = true, - prompt_title = "Live Grep in Open Files", - } - end, - { desc = "[S]earch [/] in Open Files" }, -} - -nmap { - "sw", - function() - local word = vim.fn.expand "" - builtin.grep_string { search = word } - end, - { desc = "[S]earch for the current [W]ord" }, -} - -nmap { - "sW", - function() - local word = vim.fn.expand "" - builtin.grep_string { search = word } - end, - { desc = "[S]earch for the current [W]ord object" }, -} - -telescope_mapper("ds", "lsp_document_symbols") -telescope_mapper("dl", "diagnostics") - -telescope_mapper("en", "edit_neovim") -telescope_mapper("ez", "edit_zsh") - -return telescope_mapper diff --git a/lua/opdavies/telescope/setup.lua b/lua/opdavies/telescope/setup.lua deleted file mode 100644 index 04c4a47..0000000 --- a/lua/opdavies/telescope/setup.lua +++ /dev/null @@ -1,108 +0,0 @@ -local status_ok, telescope = pcall(require, "telescope") -if not status_ok then - return -end - -local Job = require "plenary.job" -local previewers = require "telescope.previewers" - --- Create a new maker that won't preview binary files --- https://github.com/nvim-telescope/telescope.nvim/wiki/Configuration-Recipes#dont-preview-binaries -local new_maker = function(filepath, bufnr, opts) - filepath = vim.fn.expand(filepath) - Job:new({ - command = "file", - args = { "--mime-type", "-b", filepath }, - on_exit = function(j) - local mime_type = vim.split(j:result()[1], "/")[1] - if mime_type == "text" then - previewers.buffer_previewer_maker(filepath, bufnr, opts) - else - vim.schedule(function() - vim.api.nvim_buf_set_lines(bufnr, 0, -1, false, { "BINARY" }) - end) - end - end, - }):sync() -end - -local action_layout = require "telescope.actions.layout" -local actions = require "telescope.actions" -local lga_actions = require "telescope-live-grep-args.actions" - -telescope.setup { - defaults = { - buffer_previewer_maker = new_maker, - - file_ignore_patterns = { - "%/contrib", - "%/core", - "%/libraries", - ".direnv", - ".git/", - "composer.json.save", - "composer.lock", - "flake.lock", - "node_modules", - "package-lock.json", - "pnpm-lock.yaml", - "result", - "vendor", - "yarn.lock", - }, - - layout_config = { prompt_position = "top" }, - - mappings = { - i = { - [""] = actions.delete_buffer, - [""] = actions.which_key, - [""] = action_layout.toggle_preview, - [""] = action_layout.toggle_mirror, - }, - }, - - no_ignore = true, - path_display = { truncate = 1 }, - preview = { hide_on_startup = true }, - prompt_prefix = "$ ", - sorting_strategy = "ascending", - }, - - pickers = { - find_files = { - hidden = true, - }, - - buffers = { - previewer = false, - layout_config = { - width = 80, - }, - }, - - lsp_references = { - previewer = false, - }, - }, - - extensions = { - live_grep_args = { - auto_quoting = true, - mappings = { - i = { - [""] = lga_actions.quote_prompt {}, - [""] = lga_actions.quote_prompt { postfix = " --iglob " }, - }, - }, - }, - - ["ui-select"] = { - require("telescope.themes").get_dropdown {}, - }, - }, -} - -telescope.load_extension "fzf" -telescope.load_extension "refactoring" -telescope.load_extension "ui-select" diff --git a/plugin/telescope.lua b/plugin/telescope.lua new file mode 100644 index 0000000..5c4ca1a --- /dev/null +++ b/plugin/telescope.lua @@ -0,0 +1,36 @@ +local telescope = require "telescope" + +telescope.setup { + defaults = { + layout_config = { prompt_position = "top" }, + path_display = { truncate = 1 }, + prompt_prefix = "$ ", + sorting_strategy = "ascending", + }, + + pickers = { + lsp_references = { + previewer = false, + }, + }, + + extensions = { + ["ui-select"] = { + require("telescope.themes").get_dropdown {}, + }, + }, +} + +telescope.load_extension "fzf" +telescope.load_extension "refactoring" +telescope.load_extension "ui-select" + +local builtin = require "telescope.builtin" + +vim.keymap.set("n", "fd", builtin.find_files) +vim.keymap.set("n", "ft", builtin.git_files) +vim.keymap.set("n", "fh", builtin.help_tags) +vim.keymap.set("n", "fg", builtin.live_grep) +vim.keymap.set("n", "/", builtin.current_buffer_fuzzy_find) + +vim.keymap.set("n", "gw", builtin.grep_string)