| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177 | local M = {}M.config = function()  lvim.builtin.dap = {    active = true,    on_config_done = nil,    breakpoint = {      text = lvim.icons.ui.Bug,      texthl = "DiagnosticSignError",      linehl = "",      numhl = "",    },    breakpoint_rejected = {      text = lvim.icons.ui.Bug,      texthl = "DiagnosticSignError",      linehl = "",      numhl = "",    },    stopped = {      text = lvim.icons.ui.BoldArrowRight,      texthl = "DiagnosticSignWarn",      linehl = "Visual",      numhl = "DiagnosticSignWarn",    },    log = {      level = "info",    },    ui = {      auto_open = true,      notify = {        threshold = vim.log.levels.INFO,      },      config = {        icons = { expanded = "", collapsed = "", circular = "" },        mappings = {          -- Use a table to apply multiple mappings          expand = { "<CR>", "<2-LeftMouse>" },          open = "o",          remove = "d",          edit = "e",          repl = "r",          toggle = "t",        },        -- Use this to override mappings for specific elements        element_mappings = {},        expand_lines = true,        layouts = {          {            elements = {              { id = "scopes", size = 0.33 },              { id = "breakpoints", size = 0.17 },              { id = "stacks", size = 0.25 },              { id = "watches", size = 0.25 },            },            size = 0.33,            position = "right",          },          {            elements = {              { id = "repl", size = 0.45 },              { id = "console", size = 0.55 },            },            size = 0.27,            position = "bottom",          },        },        controls = {          enabled = true,          -- Display controls in this element          element = "repl",          icons = {            pause = "",            play = "",            step_into = "",            step_over = "",            step_out = "",            step_back = "",            run_last = "",            terminate = "",          },        },        floating = {          max_height = 0.9,          max_width = 0.5, -- Floats will be treated as percentage of your screen.          border = "rounded",          mappings = {            close = { "q", "<Esc>" },          },        },        windows = { indent = 1 },        render = {          max_type_length = nil, -- Can be integer or nil.          max_value_lines = 100, -- Can be integer or nil.        },      },    },  }endM.setup = function()  local status_ok, dap = pcall(require, "dap")  if not status_ok then    return  end  if lvim.use_icons then    vim.fn.sign_define("DapBreakpoint", lvim.builtin.dap.breakpoint)    vim.fn.sign_define("DapBreakpointRejected", lvim.builtin.dap.breakpoint_rejected)    vim.fn.sign_define("DapStopped", lvim.builtin.dap.stopped)  end  dap.set_log_level(lvim.builtin.dap.log.level)  if lvim.builtin.dap.on_config_done then    lvim.builtin.dap.on_config_done(dap)  endendM.setup_ui = function()  local status_ok, dap = pcall(require, "dap")  if not status_ok then    return  end  local dapui = require "dapui"  dapui.setup(lvim.builtin.dap.ui.config)  if lvim.builtin.dap.ui.auto_open then    dap.listeners.after.event_initialized["dapui_config"] = function()      dapui.open()    end    -- dap.listeners.before.event_terminated["dapui_config"] = function()    --   dapui.close()    -- end    -- dap.listeners.before.event_exited["dapui_config"] = function()    --   dapui.close()    -- end  end  local Log = require "lvim.core.log"  -- until rcarriga/nvim-dap-ui#164 is fixed  local function notify_handler(msg, level, opts)    if level >= lvim.builtin.dap.ui.notify.threshold then      return vim.notify(msg, level, opts)    end    opts = vim.tbl_extend("keep", opts or {}, {      title = "dap-ui",      icon = "",      on_open = function(win)        vim.api.nvim_buf_set_option(vim.api.nvim_win_get_buf(win), "filetype", "markdown")      end,    })    -- vim_log_level can be omitted    if level == nil then      level = Log.levels["INFO"]    elseif type(level) == "string" then      level = Log.levels[(level):upper()] or Log.levels["INFO"]    else      -- https://github.com/neovim/neovim/blob/685cf398130c61c158401b992a1893c2405cd7d2/runtime/lua/vim/lsp/log.lua#L5      level = level + 1    end    msg = string.format("%s: %s", opts.title, msg)    Log:add_entry(level, msg)  end  local dapui_ok, _ = xpcall(function()    require("dapui.util").notify = notify_handler  end, debug.traceback)  if not dapui_ok then    Log:debug "Unable to override dap-ui logging level"  endendreturn M
 |