local file = require 'std.dbg.file' local kinds = require 'std.dbg.kinds' local format = require 'std.dbg.format' local user_command = require 'std.user_command' if vim.g.bugabinga_debug_mode == nil then vim.g.bugabinga_debug_mode = false end local function is_debug_mode() return vim.g.bugabinga_debug_mode end local function toggle_debug_mode() vim.g.bugabinga_debug_mode = not vim.g.bugabinga_debug_mode vim.notify( 'Toggled debug mode to ' .. tostring( is_debug_mode() ) ) end local function print_debug_kind( kind_name, message, ... ) if not is_debug_mode() then return end local now = os.time() local user_data = { ... } local filename, function_name, line_number = file.get_context() local event = { kind = kind_name, date = now, format = message, data = user_data, filename = filename, fn = function_name, line = line_number, } file.write( event ) end local function print_debug( message, ... ) if not is_debug_mode() then return end print_debug_kind( 'DEBUG', message, ... ) end local function open_special_debug_buffer() vim.notify( 'Debug viewer not yet implemented (Stage 2)', vim.log.levels.WARN ) end local function open_raw_debug_file() vim.cmd.edit( file.get_path() ) end user_command.Debug 'Toggle global vim config debug mode.' ( toggle_debug_mode ) user_command.DebugOpen 'Open special buffer with debug events' ( open_special_debug_buffer ) user_command.DebugOpenRaw 'Opens the JSON debug file in normal buffer' ( open_raw_debug_file ) return setmetatable( { kind = print_debug_kind, toggle = toggle_debug_mode, get = is_debug_mode, }, { __call = print_debug, __newindex = function ( ... ) error( 'Assignments are not supported for std.dbg.\n' .. vim.inspect( ... ), 2 ) end, } )