aboutsummaryrefslogtreecommitdiffstats
path: root/lua/alpha/telescope/init.lua
blob: ccb1b9e969dad5d277e517ceceabeffe8dc95a5d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
local hydra = require "hydra"

local hint = [[
 Vim Tests
 _n_: Near test   _h_: Harpoon ^
 _f_: Current file   _s_: Test Suit ^
 _l_: Test Last  _g_: Visit
 _w_: Watch last Test  _p_: stop watch
 ^ ^                                          _<Esc>_ ^
]]
local auto_cmd_id = nil
local stopAutoCommand = function()
  if auto_cmd_id ~= nil then
    vim.api.nvim_del_autocmd(auto_cmd_id)
    auto_cmd_id = nil
  end
end
local startAutoCommand = function()
  stopAutoCommand()
  auto_cmd_id = vim.api.nvim_create_autocmd({ "BufWritePost" }, {
    pattern = { "*.php", "*.feature", "*.yaml"
SHOULD_RELOAD_TELESCOPE = true

local reloader = function()
    if SHOULD_RELOAD_TELESCOPE then
        RELOAD("plenary")
        RELOAD("telescope")
        RELOAD("alpha.telescope.setup")
    end
end

local action_state = require("telescope.actions.state")
local fb_actions = require("telescope").extensions.file_browser.actions
local actions = require("telescope.actions")

local M = {}

function M.project_files()
    local opts = { show_untracked = true } -- define here if you want to define something
    local ok = pcall(require("telescope.builtin").git_files, opts)
    if not ok then
        require("telescope.builtin").find_files(opts)
    end
end

function M.branches()
    require("telescope.builtin").git_branches({
        attach_mappings = function(_, map)
            map("i", "<c-j>", actions.git_create_branch)
            map("n", "<c-j>", actions.git_create_branch)
            return true
        end,
    })
end

function M.search_config()
    require("telescope.builtin").git_files({
        prompt_title = "< Dotfiles >",
        cwd = "$HOME/.dotfiles",
        show_untracked = true,
    })
end

function M.grep_string()
    vim.ui.input({ prompt = "Grep for > " }, function(input)
        if input == nil then
            return
        end
        require("telescope.builtin").grep_string({ search = input })
    end)
end

function M.grep_word()
    require("telescope.builtin").grep_string({ search = vim.fn.expand("<cword>") })
end

function M.find_symbol()
    vim.ui.input({ prompt = "Symbol for > " }, function(input)
        if input == nil then
            return
        end
        require("telescope.builtin").lsp_workspace_symbols({ query = input })
    end)
end

function M.my_plugins()
    require("telescope.builtin").find_files({
        cwd = "~/plugins/",
    })
end

function M.projectionist()
    return require("telescope").extensions.projectionist.projectionist()
end

function M.laravel_commands()
    return require("telescope").extensions.laravel.laravel()
end

function M.api_specs()
    require("telescope.builtin").git_files({
        cwd = "./api-specification",
        show_untracked = true,
    })
end

function M.worktree()
    return require("telescope").extensions.git_worktree.git_worktrees()
end

function M.worktree_create()
    return require("telescope").extensions.git_worktree.create_git_worktree()
end

function M.refactor()
    return require("telescope").extensions.refactoring.refactors()
end

function M.file_browser_relative()
    return M.file_browser({ path = "%:p:h" })
end

function M.gateway()
    return require("alpha.php.gateway").graphql_definitions({
        layout_config = {
            horizontal = {
                preview_width = function(_, cols, _)
                    return math.floor(cols * 0.7)
                end,
            },
        },
    })
end

function M.file_browser(opts)
    opts = opts or {}

    opts = {
        path = opts.path,
        sorting_strategy = "ascending",
        scroll_strategy = "cycle",
        layout_config = {
            prompt_position = "top",
        },

        attach_mappings = function(_, map)
            map("i", "<c-y>", fb_actions.create)

            return true
        end,
    }

    return require("telescope").extensions.file_browser.file_browser(opts)
end

return setmetatable({}, {
    __index = function(_, k)
        reloader()
        if M[k] then
            return M[k]
        else
            return require("telescope.builtin")[k]
        end
    end,
})