nvim-dap-vscode-js
nvim-dap adapter for vscode-js-debug.
Adapters
Every platform supported by vscode is provided. This includes:
Adapter | Platform | Support |
---|---|---|
pwa-node |
Node.js | Full |
pwa-chrome |
Chrome | Partial1 |
pwa-msedge |
Edge | Untested |
node-terminal |
Node.js | Untested |
pwa-extensionHost |
VSCode Extensions | Untested |
Installation
Plugin
Supports packer, vim-plug, etc. With packer, for example:
use { "mxsdev/nvim-dap-vscode-js", requires = {"mfussenegger/nvim-dap"} }
Debugger
You must download and build a copy of vscode-js-debug in order to use this plugin.
With Packer
use {
"microsoft/vscode-js-debug",
opt = true,
run = "npm install --legacy-peer-deps && npx gulp vsDebugServerBundle && mv dist out"
}
Manually
git clone https://github.com/microsoft/vscode-js-debug
cd vscode-js-debug
npm install --legacy-peer-deps
npx gulp vsDebugServerBundle
mv dist out
Note: The upstream build process has changed sometime since the creation of this repo. If the above scripts don't work, please make sure you're using the latest version of
vscode-js-debug
. Otherwise, feel free to file an issue!
Setup
require("dap-vscode-js").setup({
-- node_path = "node", -- Path of node executable. Defaults to $NODE_PATH, and then "node"
-- debugger_path = "(runtimedir)/site/pack/packer/opt/vscode-js-debug", -- Path to vscode-js-debug installation.
-- debugger_cmd = { "js-debug-adapter" }, -- Command to use to launch the debug server. Takes precedence over `node_path` and `debugger_path`.
adapters = { 'pwa-node', 'pwa-chrome', 'pwa-msedge', 'node-terminal', 'pwa-extensionHost' }, -- which adapters to register in nvim-dap
-- log_file_path = "(stdpath cache)/dap_vscode_js.log" -- Path for file logging
-- log_file_level = false -- Logging level for output to file. Set to false to disable file logging.
-- log_console_level = vim.log.levels.ERROR -- Logging level for output to console. Set to false to disable console output.
})
for _, language in ipairs({ "typescript", "javascript" }) do
require("dap").configurations[language] = {
... -- see below
}
end
Note that if vscode-js-debug was installed without packer, its root folder location must be set manually in debugger_path
.
Configurations
See here for all custom configuration options.
Node.js
{
{
type = "pwa-node",
request = "launch",
name = "Launch file",
program = "${file}",
cwd = "${workspaceFolder}",
},
{
type = "pwa-node",
request = "attach",
name = "Attach",
processId = require'dap.utils'.pick_process,
cwd = "${workspaceFolder}",
}
}
2
Jest{
{
type = "pwa-node",
request = "launch",
name = "Debug Jest Tests",
-- trace = true, -- include debugger info
runtimeExecutable = "node",
runtimeArgs = {
"./node_modules/jest/bin/jest.js",
"--runInBand",
},
rootPath = "${workspaceFolder}",
cwd = "${workspaceFolder}",
console = "integratedTerminal",
internalConsoleOptions = "neverOpen",
}
}
You may also want to check out neotest-jest, which supports this plugin out of the box.
Mocha
{
{
type = "pwa-node",
request = "launch",
name = "Debug Mocha Tests",
-- trace = true, -- include debugger info
runtimeExecutable = "node",
runtimeArgs = {
"./node_modules/mocha/bin/mocha.js",
},
rootPath = "${workspaceFolder}",
cwd = "${workspaceFolder}",
console = "integratedTerminal",
internalConsoleOptions = "neverOpen",
}
}
Planned Features
- Integration with neotest-jest
- Support for switching between child sessions
Credits
I would like to say a huge thank you to Jens Claes, whose dotfiles this plugin is based off of, and to all members who contributed to this issue - the insight gained from this was paramount to the success of this project.