local M = {} M.on_attach = function(client, bufnr) local telescope = require("telescope.builtin") local methods = vim.lsp.protocol.Methods local function nnoremap(bind, callback, userargs) local args = userargs or {} args.buffer = bufnr vim.keymap.set("n", bind, callback, args) end nnoremap("K", vim.lsp.buf.hover) nnoremap("", vim.lsp.buf.signature_help) nnoremap("gd", telescope.lsp_definitions) nnoremap("gu", telescope.lsp_references) nnoremap("ca", vim.lsp.buf.code_action) nnoremap("cl", vim.lsp.codelens.run) nnoremap("r", vim.lsp.buf.rename) nnoremap("f", function() vim.lsp.buf.format { async = true } end) local filetype = vim.api.nvim_get_option_value("filetype", { buf = bufnr }) if client:supports_method(methods.textDocument_inlayHint) -- Never start cabal with inlay hint request -- Related: https://github.com/mrcjkb/haskell-tools.nvim/discussions/485 and filetype ~= "cabal" then vim.lsp.inlay_hint.enable(true, { bufnr = bufnr }) end end local capabilities = vim.lsp.protocol.make_client_capabilities() capabilities = require("cmp_nvim_lsp").default_capabilities(capabilities) M.capabilities = capabilities M.border = { { " ", "FloatBorder" }, { " ", "FloatBorder" }, { " ", "FloatBorder" }, { " ", "FloatBorder" }, { " ", "FloatBorder" }, { " ", "FloatBorder" }, { " ", "FloatBorder" }, { " ", "FloatBorder" }, } return M