Files
turbo-debug.nvim/CHANGELOG.md
T
swaits d062ac27ff chore: release 0.2.0
Major UI rework and stability release. Two floating chrome bars replace the
old single toolbar, every resize/tabline-toggle edge case is handled, and
every highlight now derives from the user's colorscheme.

BREAKING CHANGES
- `quit_exits_mode` option removed — `q` is now context-aware: if a DAP
  session is running, `q` terminates the session but keeps debug mode
  active so you can read the Console / inspect post-mortem state. Press
  `q` again to exit debug mode.
- `help_on_enter` default is now `false` (was `true`). Control bar always
  shows `(?) help`, so the auto-popup is no longer needed.
- Default layout changed: sidebar is Call Stack → Scopes → Watches →
  Breakpoints (all 25%). REPL is no longer in the default layout — press
  `E` during debug mode to open it as a floating window.
- Console pane sizing: bottom Console is `max(8 rows, 20% of editor
  lines)` (previously hardcoded). Configurable via `console_height`.

ADDED
- Two-bar floating chrome, independent of any statusline plugin:
  status bar (top, 2 rows, brand + live dap.status text + state chip),
  control bar (bottom, 2 rows, clickable flow buttons + `(?) help`
  right-anchored). Italic qualifiers on step controls auto-drop at
  narrow widths.
- Keymap-aware control bar — legend reflects user's actual remapped
  keys; disabled actions are omitted entirely.
- IP arrow markers on stopped lines: 👉 gutter sign (priority 500) +
  👈 REASON virtual text at EOL.
- Optional debug-mode colorscheme via `colorscheme` option.
- Theme-agnostic separator color (derives from WinBar.fg); global
  WinSeparator override during debug mode for consistent edge color.
- `clear_console_on_start` (default true) — wipe Console scrollback on
  session start while preserving the terminal channel.
- `collapsed_scopes` (default {"Registers"}) — auto-collapse noisy
  scopes that adapters don't flag expensive.
- `max_value_width` (default 2000) — per-line truncation for values in
  Scopes/Watches.
- `console_refresh_ms` (default 50) — trailing-edge Console repaint
  throttle.
- `sidebar` option — "left" (default) or "right".
- `active_window_highlight` (default true) — dim inactive dapui pane
  borders.
- `W` and `K` now work in visual mode (operate on the selection).
- Source window focused before DAP jumps on event_stopped.

CHANGED
- Bars are real splits (not overlapping floats).
- pin_dapui_sizes() only re-pins on external geometry changes (tabline
  toggle); user manual pane drags survive.
- ensure_dapui() runs ONCE per plugin lifetime, avoiding "Debug adapter
  didn't respond" timeouts on toggle.
- Bars clamp to exactly 2 rows on every resize (no stray EOB `~`).
- setup() is fully idempotent; plugin/turbo-debug.lua's deferred
  auto-setup yields to explicit user setup({...}).
- Copyright holder: Stephen Waits <steve@waits.net>.

FIXED
- Bars recreate if killed by shrink-below-minimum resize or tabline
  appear/disappear.
- Inherited winbar cleared on bar windows (no phantom separator rows).
- Layout re-asserts after `wincmd =`.
- Sidebar proportions stable across re-entry.
- Bar separators bright on both outward edges.
- Deferred dependency loading waits for vim.pack.add to finalize.

INTERNAL
- Extracted 10+ helper functions in mode.lua; deduped ~25 call sites.
- Data-driven sign definitions and Python interpreter probing.
- Dead code removed: unused reposition_bars, vestigial sbar_zones/
  handle_sbar_click.
- Added regression tests: test_render_bars, test_highlights_cs,
  test_helpers.
- stylua.toml added; all Lua code formatted.

See CHANGELOG.md for the full 0.2.0 entry.
2026-04-12 20:00:59 -06:00

7.4 KiB

Changelog

0.2.0 — 2026-04-12

Major UI rework and stability release. Two floating chrome bars replace the old single toolbar, every resize/tabline-toggle edge case is handled, and every highlight now derives from the user's colorscheme.

Breaking changes

  • quit_exits_mode option removed. q is now context-aware: if a DAP session is running, q terminates the session but keeps debug mode active (so you can read the Console / inspect post-mortem state). Press q again to exit debug mode.
  • help_on_enter default is now false (was true). The control bar always shows (?) help, so the auto-popup is no longer needed. Set to true to restore the splash behavior.
  • Default layout changed. Sidebar panes are now Call Stack → Scopes → Watches → Breakpoints (all 25%). REPL is no longer in the default layout — press E during debug mode to open it as a floating window.
  • Console pane sizing. Bottom Console pane is max(8 rows, 20% of editor lines) (previously hardcoded). Configurable via console_height.

Added

  • Two-bar floating chrome, independent of any statusline plugin:
    • Status bar (top, 2 rows): brand, live dap.status() text, state chip (DEBUG · READY / · RUNNING / · PAUSED)
    • Control bar (bottom, 2 rows, above statusline): clickable buttons for continue, step over, step into, step out, restart (during session), terminate; (?) help right-anchored
    • Italic qualifiers (over, into, out) on step controls — dropped automatically at narrow widths
  • Keymap-aware control bar: legend reflects the user's actual remapped keys (honors keys override; disabled actions are omitted)
  • IP arrow markers on stopped lines: paired 👉 gutter sign (priority 500 so it always wins over breakpoint signs) + 👈 REASON virtual text at EOL
  • Optional debug-mode colorscheme via colorscheme option — theme swaps on debug enter, restores on exit
  • Theme-agnostic separator color: derives from WinBar.fg so the bar chrome matches any colorscheme; global WinSeparator override during debug mode gives the whole UI a consistent edge color
  • clear_console_on_start (default true): wipe Console scrollback on session start/restart while preserving the terminal channel
  • collapsed_scopes (default { "Registers" }): auto-collapse noisy scopes; codelldb doesn't mark Registers expensive even though it's a huge dump
  • max_value_width (default 2000): per-line truncation for values in Scopes/Watches; prevents register-dump bleed
  • console_refresh_ms (default 50): trailing-edge throttle for Console repaints under high-throughput stdout
  • sidebar option — "left" (default) or "right"
  • active_window_highlight (default true): dim inactive dapui pane borders so the focused pane is visually obvious
  • W and K in visual mode: watch / hover operate on the selection
  • Live dap.status() polling via User DapProgressUpdate autocmd — status text stays current across progress messages
  • Source window is focused before DAP jumps on event_stopped, so stepped-into library files open in the source area (not in a bar or dapui pane)
  • Console repaint throttle prevents editor lag under chatty programs

Changed

  • Bars are now real splits (not overlapping floats) — dapui and source windows tuck between them naturally
  • pin_dapui_sizes() only re-pins on EXTERNAL geometry changes (bufferline tabline toggle, wincmd =) detected by total-height delta; user's manual pane drags survive
  • ensure_dapui() runs ONCE per plugin lifetime (not per M.enter), avoiding "Debug adapter didn't respond" timeouts on toggle
  • Bars clamp to exactly 2 rows on every VimResized / WinResized (prevents stray EOB ~ when nvim grows a fixed-height window)
  • setup() is now fully idempotent — safe to call multiple times with different opts, and plugin/turbo-debug.lua's deferred auto-setup yields to explicit user setup({...})
  • Copyright holder updated to Stephen Waits <steve@waits.net>

Fixed

  • Bars recreate themselves if killed by shrink-below-minimum resize or tabline appearance/disappearance
  • Inherited winbar from the splitting source window is cleared on bar windows (was showing phantom separator rows)
  • Layout re-asserts correctly after wincmd = (tiny-equalizer pass)
  • Sidebar proportions stable across re-entry (no drift across toggles)
  • Bar separators bright on both outward edges (top-of-sbar, bottom-of-cbar)
  • Deferred dependency loading: plugin/turbo-debug.lua waits for vim.pack.add to finalize runtimepath before calling setup()

Internal

  • Extracted 10+ helper functions in mode.lua (win_ok, buf_ok, is_dapui_pane_ft, for_each_dapui_pane, safe_extmark, bar_set_lines, safe_set_height, if_still_active, invalidate_dead_bars, focus_source_win, unset_and_restore, install_cs_listener) — deduped ~25 call sites
  • Data-driven sign definitions (breakpoints.lua) and Python interpreter candidate probing
  • Dead code removed: unused reposition_bars stub, vestigial sbar_zones / handle_sbar_click click infrastructure (status bar has no clickable zones)
  • Added regression tests: test_render_bars (sbar/cbar output, dimensions, zones, overflow fallback), test_highlights_cs (ColorScheme augroups, highlight re-apply), test_helpers (keyof branching, source_window filtering)
  • stylua.toml added; all Lua code formatted

0.1.0 — 2026-04-11

Initial release.

Features

  • Zero-config debugging — one line install, everything works
  • Modal keybindings — single-key debug controls (c/s/d/r/q), active only during debug mode, cleanly removed on exit
  • Persistent breakpoints — survive Neovim restarts via persistent-breakpoints.nvim
  • Inline virtual text — variable values shown in source code during stepping
  • Hover inspection (K) and watch expressions (W) from the code window
  • REPL eval (E) — floating REPL for expression evaluation
  • Help splash — centered keybinding reference on debug mode entry (3s auto-dismiss), re-openable with ?
  • Debug mode chrome — winbar indicator, cursor highlight, dapui panel titles
  • dapui integration — opinionated layout with controls toolbar, labeled panels (Scopes, Watches, Call Stack, Console, REPL)
  • which-key support — <leader>d debug group registered automatically if which-key is installed
  • quit_exits_mode option — control whether q terminates only or also exits debug mode

Adapters (12 languages)

  • Python — debugpy with virtualenv auto-detection (VIRTUAL_ENV, CONDA_PREFIX, .venv)
  • Rust — codelldb with cargo build integration and vim.ui.select binary picker
  • Go — delve with auto-launch (file and package configs)
  • C / C++ / Swift — codelldb with executable prompt
  • JavaScript / TypeScript — js-debug-adapter (pwa-node, launch + attach)
  • C# — netcoredbg
  • Java — java-debug-adapter
  • Kotlin — kotlin-debug-adapter
  • PHP — php-debug (Xdebug listener)
  • Ruby — rdbg (launch + attach)
  • Lua (Neovim) — osv (optional, graceful skip if not installed)

Keybinding scheme

  • <leader>dd — toggle debug mode
  • <leader>dx / <leader>dX / <leader>dD — breakpoints (always available)
  • c s d r C x X D W K E q R ? — modal keys (debug mode only)