local lspconfig = require"lspconfig"

local servers = {
    "bashls",
    "pyright",
}

-- Global mappings.
-- See `:help vim.diagnostic.*` for documentation on any of the below functions
vim.keymap.set('n', '<space>e', vim.diagnostic.open_float)
vim.keymap.set('n', '[d',       vim.diagnostic.goto_prev)
vim.keymap.set('n', ']d',       vim.diagnostic.goto_next)
vim.keymap.set('n', '<space>q', vim.diagnostic.setloclist)

-- Use LspAttach autocommand to only map the following keys
-- after the language server attaches to the current buffer
local on_attach = function(client, bufnr)
    vim.bo[ev.buf].omnifunc = 'v:lua.vim.lsp.omnifunc'

    -- Buffer local mappings.
    -- See `:help vim.lsp.*` for documentation on any of the below functions
    local opts = { buffer = ev.buf }
    vim.keymap.set('n',   'gD',        vim.lsp.buf.declaration,             opts)
    vim.keymap.set('n',   'gd',        vim.lsp.buf.definition,              opts)
    vim.keymap.set('n',   'K',         vim.lsp.buf.hover,                   opts)
    vim.keymap.set('n',   'gi',        vim.lsp.buf.implementation,          opts)
    vim.keymap.set('n',   '<C-k>',     vim.lsp.buf.signature_help,          opts)
    vim.keymap.set('n',   '<space>wa', vim.lsp.buf.add_workspace_folder,    opts)
    vim.keymap.set('n',   '<space>wr', vim.lsp.buf.remove_workspace_folder, opts)
    vim.keymap.set('n',   '<space>wl', function()
        print(vim.inspect(vim.lsp.buf.list_workspace_folders()))
    end, opts)
    vim.keymap.set('n',   '<space>D',  vim.lsp.buf.type_definition,         opts)
    vim.keymap.set('n',   '<space>rn', vim.lsp.buf.rename,                  opts)
    vim.keymap.set({ 'n', 'v' },       '<space>ca',                         vim.lsp.buf.code_action, opts)
    vim.keymap.set('n',   'gr',        vim.lsp.buf.references,              opts)
end

for _, server in ipairs(servers) do
    lspconfig[server].setup { on_attach = on_attach }
end
