Copy the repro.lua code snippet and open nvim with nvim --clean +'so repro.lua' and wait for nvim plugins to get automatically installed
Install js-debug-adapter with MasonInstall js-debug-adapter
Open the App.js file on my-app/src/App.js
Set a breakpoint on the return statement with lua require'dap'.toggle_breakpoint()
Start the debug session with lua require'dap'.continue()
Start toggling the sidebar with <leader>ds. Repeat this keymap and you will notice the slow down.
-- DO NOT change the paths
local root = vim.fn.fnamemodify("./.repro", ":p")
root = root:sub(-1) == "/" and root or root .. "/"
-- set stdpaths to use .repro
for _, name in ipairs({ "config", "data", "state", "cache" }) do
vim.env[("XDG_%s_HOME"):format(name:upper())] = root .. name
end
vim.g.mapleader = " "
--------------------------------------------------------------------------------
local plugins = {
{
"williamboman/mason.nvim",
lazy = false,
cmd = "Mason",
opts = {
ui = {
check_outdated_packages_on_open = false,
keymaps = {
update_all_packages = "noop",
},
},
install_root_dir = root .. "/mason",
},
},
{
"mfussenegger/nvim-dap",
config = function()
local dap = require("dap")
local mason_registry = require("mason-registry")
local vscode_js_debug_dap = mason_registry.get_package("js-debug-adapter")
if vscode_js_debug_dap then
local dap_executable = vscode_js_debug_dap:get_install_path() .. "/js-debug/src/dapDebugServer.js"
for _, type in ipairs({
"node",
"chrome",
"pwa-node",
"pwa-chrome",
"pwa-msedge",
"node-terminal",
"pwa-extensionHost",
}) do
local host = "localhost"
dap.adapters[type] = {
type = "server",
host = host,
port = "${port}",
executable = {
command = "node",
args = { dap_executable, "${port}", host },
},
}
end
for _, language in ipairs({ "typescript", "javascript", "javascriptreact", "typescriptreact" }) do
dap.configurations[language] = {
{
name = "Test react app",
type = "pwa-chrome",
request = "launch",
url = "http://localhost:3000",
webRoot = "${workspaceFolder}",
userDataDir = false,
},
}
end
end
local widgets = require("dap.ui.widgets")
local scopes_sidebar = widgets.sidebar(widgets.scopes, { number = true, wrap = false })
vim.keymap.set("n", "<leader>ds", scopes_sidebar.toggle, { desc = 'DAP: Toggle "scopes" in sidebar' })
end,
},
}
--------------------------------------------------------------------------------
local lazypath = root .. "/plugins/lazy.nvim"
---@diagnostic disable-next-line: undefined-field
if not (vim.uv or vim.loop).fs_stat(lazypath) then
vim.fn.system({
"git",
"clone",
"--filter=blob:none",
"https://github.com/folke/lazy.nvim.git",
"--branch=stable",
lazypath,
})
end
vim.opt.runtimepath:prepend(lazypath)
require("lazy").setup(plugins, {
root = root .. "/plugins",
})
Expected Result
Toggling shouldn't get more slow the more you execute it
Actual Result
Toggling the sidebar get more slow the more you use it
Debug adapter definition and debug configuration
Notice how toggling the sidebar gets more and more slow (I'm toggling it at a fast speed but it doesn't respond)
nvim-dap-sidebar-2024-03-23_21.54.13.webm
Debug adapter version
js-debug-adapter 1.88.0 nvim nightly
Steps to Reproduce
Create and start a dummy react app (javascript)
Reproduction steps on Neovim
Copy the
repro.lua
code snippet and open nvim withnvim --clean +'so repro.lua'
and wait for nvim plugins to get automatically installed Install js-debug-adapter withMasonInstall js-debug-adapter
Open theApp.js
file onmy-app/src/App.js
Set a breakpoint on the return statement withlua require'dap'.toggle_breakpoint()
Start the debug session withlua require'dap'.continue()
Start toggling the sidebar with<leader>ds
. Repeat this keymap and you will notice the slow down.Expected Result
Toggling shouldn't get more slow the more you execute it
Actual Result
Toggling the sidebar get more slow the more you use it