local use_google = require("utils").use_google local exec = require("utils").exec local TableConcat = require("utils").TableConcat local scopes = require("neoscopes") _G.find_files = function(search_dirs) require("telescope.builtin").find_files({ search_dirs = search_dirs, }) end -- Helper functions to fetch the current scope and set `search_dirs` _G.find_dotfiles = function() require("telescope.builtin").git_files({ cwd = vim.fn.expand("$HOME/dotfiles"), }) end _G.search_cwd = function() local builtin = require("telescope.builtin") local utils = require("telescope.utils") builtin.find_files({ cwd = utils.buffer_dir() }) end _G.live_grep = function(search_dirs) require("telescope.builtin").live_grep({ search_dirs = search_dirs, }) end _G.live_grep_cword = function(search_dirs) require("telescope.builtin").live_grep({ search_dirs = search_dirs, }) end local function exe(cmd) return vim.split(vim.fn.system(cmd), "\n") end local function get_visual_selection() -- Yank current visual selection into the 'v' register -- -- Note that this makes no effort to preserve this register vim.cmd('noau normal! "vy"') return vim.fn.getreg("v") end function fig_modified() return exe("hg pstatus -ma -n --no-status --template= | sort") end function fig_all_modified() return exe("hg status -ma -n --rev p4base --no-status --template= | sort") end -- stylua: ignore local keys = { { "e", ":lua search_cwd()", desc = "Find Files in Buffer Directory" }, { "ts", require('telescope.builtin').live_grep }, { "TS", [[lua require('telescope.builtin').live_grep{default_text = vim.fn.expand("")}]], }, { "t.", ":lua find_dotfiles()", desc = "Find Dotfiles" }, { "tc", ":Telescope textcase", desc = "Text case" }, { "tC", ":CritiqueUnresolvedCommentsTelescope", desc = "Critique unresolved comments" }, { "tca", ":CritiqueCommentsTelescope", desc = "Critique all comments" }, { "tg", ":Telescope git_files", desc = "Git Files" }, { "th", ":lua require('telescope.builtin').help_tags{}", desc = "[T]elescope [H]elp" }, { "tk", ":Telescope keymaps", desc = "Keymaps" }, { "tn", ":Telescope notify", desc = "Notifications" }, { "tr", ":Telescope resume", desc = "Telescope Resume" }, } if use_google() then -- stylua: ignore TableConcat(keys, { { "tm", ":lua find_files(fig_modified())" }, { "tM", ":lua find_files(fig_all_modified())" }, { "tf", ":lua live_grep(fig_modified())", desc = "Search in modified Fig files." }, { "tF", ":lua live_grep(fig_all_modified())", desc = "Search in *all* modified Fig files." }, { "", require("telescope").extensions.codesearch.find_files }, { "cs", require("telescope").extensions.codesearch.find_query }, { "cs", require("telescope").extensions.codesearch.find_query, mode = "v" }, { "CS", [[lua require('telescope').extensions.codesearch.find_query{default_text_expand=''}]], }, }) end return { { "aznhe21/actions-preview.nvim", config = function() require("actions-preview").setup({ telescope = { sorting_strategy = "ascending", layout_strategy = "vertical", layout_config = { width = 0.8, height = 0.9, prompt_position = "top", preview_cutoff = 20, preview_height = function(_, _, max_lines) return max_lines - 15 end, }, }, }) end, keys = { { "?", "lua require('actions-preview').code_actions()" }, }, }, { "smartpde/telescope-recent-files", config = function() require("telescope").load_extension("recent_files") end, keys = { { "to", [[lua require('telescope').extensions.recent_files.pick()]] }, }, }, { "piersolenski/telescope-import.nvim", dependencies = "nvim-telescope/telescope.nvim", config = function() require("telescope").load_extension("import") end, keys = function() if not use_google() then return { { "i", ":Telescope import" }, } end end, }, { "nvim-telescope/telescope.nvim", dependencies = { "mfussenegger/nvim-dap", "smartpde/telescope-recent-files", "rcarriga/nvim-dap-ui", }, config = function() require("telescope").setup({ defaults = { -- The vertical layout strategy is good to handle long paths like those in -- google3 repos because you have nearly the full screen to display a file path. -- The caveat is that the preview area is smaller. layout_strategy = "vertical", -- Common paths in google3 repos are collapsed following the example of Cider -- It is nice to keep this as a user config rather than part of -- telescope-codesearch because it can be reused by other telescope pickers. path_display = function(opts, path) -- Do common substitutions path = path:gsub("^/google/src/cloud/[^/]+/[^/]+/google3/", "google3/", 1) path = path:gsub("^google3/java/com/google/", "//j/c/g/", 1) path = path:gsub("^google3/javatests/com/google/", "//jt/c/g/", 1) path = path:gsub("^google3/third_party/", "//3p/", 1) path = path:gsub("^google3/", "//", 1) -- Do truncation. This allows us to combine our custom display formatter -- with the built-in truncation. -- `truncate` handler in transform_path memoizes computed truncation length in opts.__length. -- Here we are manually propagating this value between new_opts and opts. -- We can make this cleaner and more complicated using metatables :) local new_opts = { path_display = { truncate = true, }, __length = opts.__length, } path = require("telescope.utils").transform_path(new_opts, path) opts.__length = new_opts.__length return path end, mappings = { n = { [""] = "close", [""] = "close", }, i = { -- [""] = function(bufnr) -- require("telescope.actions.set").edit(bufnr, "tab drop") -- end, [""] = "close", [""] = "close", [""] = "cycle_history_next", [""] = "cycle_history_prev", }, }, }, extensions = { codesearch = { experimental = true, -- enable results from google3/experimental }, recent_files = { -- This function rewrites all file paths to the current workspace. -- For example, if w2 is the current workspace, then -- /google/.../w1/google3/my_file.cc becomes /google/.../w2/google3/my_file.cc, transform_file_path = function(path) local neocitc = require("neocitc") local path_func = neocitc.path_in_current_workspace_or_head or neocitc.path_in_current_workspace return path_func(path) end, -- This is a useful option to speed up Telescope by avoiding the check -- for file existence. stat_files = false, -- Ignore common patterns that can show up from other google plugins ignore_patterns = { "/%.git/COMMIT_EDITING$", "/%.git/COMMIT_EDITMSG$", "/%.git/MERGE_MSG$", "^/tmp/%.pipertmp-", "/Related_Files$", "^term:", ";#toggleterm#", }, }, persisted = {}, import = { -- Add imports to the top of the file keeping the cursor in place insert_at_top = true, }, }, }) end, keys = keys, }, }