diff --git a/neovim/init-dap.lua b/neovim/init-dap.lua index ac23fc1..7f7f6a8 100644 --- a/neovim/init-dap.lua +++ b/neovim/init-dap.lua @@ -14,14 +14,161 @@ if not vim.loop.fs_stat(lazypath) then end vim.opt.rtp:prepend(lazypath) +local js_based_languages = { "javascript", "typescript" } + require("lazy").setup({ - "mfussenegger/nvim-dap", { "rcarriga/nvim-dap-ui", requires = "mfussenegger/nvim-dap" }, - { "mxsdev/nvim-dap-vscode-js", requires = "mfussenegger/nvim-dap" }, { - "microsoft/vscode-js-debug", - opt = true, - run = "npm install --legacy-peer-deps && npx gulp dapDebugServerBundle && mv dist out", + "mfussenegger/nvim-dap", + config = function() + local dap = require("dap") + + -- local Config = require("lazyvim.config") + vim.api.nvim_set_hl(0, "DapStoppedLine", { default = true, link = "Visual" }) + + --[[ + for name, sign in pairs(Config.icons.dap) do + sign = type(sign) == "table" and sign or { sign } + vim.fn.sign_define( + "Dap" .. name, + { text = sign[1], texthl = sign[2] or "DiagnosticInfo", linehl = sign[3], numhl = sign[3] } + ) + end + --]] + + for _, language in ipairs({ "javascript", "typescript" }) do + dap.configurations[language] = { + -- Debug single nodejs files + { + type = "pwa-node", + request = "launch", + name = "Launch file", + program = "${file}", + cwd = vim.fn.getcwd(), + sourceMaps = true, + }, + -- Debug nodejs processes (make sure to add --inspect when you run the process) + { + type = "pwa-node", + request = "attach", + name = "Attach", + processId = require("dap.utils").pick_process, + cwd = vim.fn.getcwd(), + sourceMaps = true, + }, + -- Debug web applications (client side) + { + type = "pwa-chrome", + request = "launch", + name = "Launch & Debug Chrome", + url = function() + local co = coroutine.running() + return coroutine.create(function() + vim.ui.input({ + prompt = "Enter URL: ", + default = "http://localhost:3000", + }, function(url) + if url == nil or url == "" then + return + else + coroutine.resume(co, url) + end + end) + end) + end, + webRoot = vim.fn.getcwd(), + protocol = "inspector", + sourceMaps = true, + userDataDir = false, + }, + -- Divider for the launch.json derived configs + { + name = "----- ↓ launch.json configs ↓ -----", + type = "", + request = "launch", + }, + } + end + end, + keys = { + { + "dO", + function() + require("dap").step_out() + end, + desc = "Step Out", + }, + { + "do", + function() + require("dap").step_over() + end, + desc = "Step Over", + }, + { + "da", + function() + if vim.fn.filereadable(".vscode/launch.json") then + local dap_vscode = require("dap.ext.vscode") + dap_vscode.load_launchjs(nil, { + ["pwa-node"] = js_based_languages, + ["chrome"] = js_based_languages, + ["pwa-chrome"] = js_based_languages, + }) + end + require("dap").continue() + end, + desc = "Run with Args", + }, + }, + dependencies = { + -- Install the vscode-js-debug adapter + { + "microsoft/vscode-js-debug", + -- After install, build it and rename the dist directory to out + build = "npm install --legacy-peer-deps --no-save && npx gulp vsDebugServerBundle && rm -rf out && mv dist out", + version = "1.*", + }, + { + "mxsdev/nvim-dap-vscode-js", + config = function() + ---@diagnostic disable-next-line: missing-fields + require("dap-vscode-js").setup({ + -- Path of node executable. Defaults to $NODE_PATH, and then "node" + -- node_path = "node", + + -- Path to vscode-js-debug installation. + debugger_path = vim.fn.resolve(vim.fn.stdpath("data") .. "/lazy/vscode-js-debug"), + + -- Command to use to launch the debug server. Takes precedence over "node_path" and "debugger_path" + -- debugger_cmd = { "js-debug-adapter" }, + + -- which adapters to register in nvim-dap + adapters = { + "chrome", + "pwa-node", + "pwa-chrome", + "pwa-msedge", + "pwa-extensionHost", + "node-terminal", + }, + + -- Path for file logging + -- log_file_path = "(stdpath cache)/dap_vscode_js.log", + + -- Logging level for output to file. Set to false to disable logging. + -- log_file_level = false, + + -- Logging level for output to console. Set to false to disable console output. + -- log_console_level = vim.log.levels.ERROR, + }) + end, + }, + { + "Joakker/lua-json5", + build = "./install.sh", + }, + }, }, "leoluz/nvim-dap-go", "williamboman/mason.nvim", @@ -37,6 +184,7 @@ require('mason').setup() require('mason-lspconfig').setup() -- setup adapters +--[[ require('dap-vscode-js').setup({ node_path = 'node', debugger_path = vim.fn.stdpath('data') .. '/mason/packages/js-debug-adapter', @@ -58,7 +206,6 @@ for _, language in ipairs({ "typescript", "javascript" }) do program = "${file}", cwd = "${workspaceFolder}", }, - --[[ { type = "pwa-node", request = "launch", @@ -69,9 +216,9 @@ for _, language in ipairs({ "typescript", "javascript" }) do cwd = "${workspaceRoot}", protocol = "inspector", } - --]] } end +--]] require('dap-go').setup() diff --git a/neovim/init.lua b/neovim/init.lua index affefd7..8e112ca 100644 --- a/neovim/init.lua +++ b/neovim/init.lua @@ -87,6 +87,8 @@ if not vim.loop.fs_stat(lazypath) then end vim.opt.rtp:prepend(lazypath) +local js_based_languages = { "javascript", "typescript" } + require("lazy").setup({ { url = "https://git.theadamcooper.com/adam/dracula-vim.git", @@ -128,13 +130,160 @@ require("lazy").setup({ opts = {}, config = function(_, opts) require'lsp_signature'.setup(opts) end }, - "mfussenegger/nvim-dap", - { "mxsdev/nvim-dap-vscode-js", requires = "mfussenegger/nvim-dap" }, + { "rcarriga/nvim-dap-ui", requires = "mfussenegger/nvim-dap" }, { - "microsoft/vscode-js-debug", - opt = true, - run = "npm install --legacy-peer-deps && npx gulp vsDebugServerBundle && mv dist out", + "mfussenegger/nvim-dap", + config = function() + local dap = require("dap") + + -- local Config = require("lazyvim.config") + vim.api.nvim_set_hl(0, "DapStoppedLine", { default = true, link = "Visual" }) + + --[[ + for name, sign in pairs(Config.icons.dap) do + sign = type(sign) == "table" and sign or { sign } + vim.fn.sign_define( + "Dap" .. name, + { text = sign[1], texthl = sign[2] or "DiagnosticInfo", linehl = sign[3], numhl = sign[3] } + ) + end + --]] + + for _, language in ipairs({ "javascript", "typescript" }) do + dap.configurations[language] = { + -- Debug single nodejs files + { + type = "pwa-node", + request = "launch", + name = "Launch file", + program = "${file}", + cwd = vim.fn.getcwd(), + sourceMaps = true, + }, + -- Debug nodejs processes (make sure to add --inspect when you run the process) + { + type = "pwa-node", + request = "attach", + name = "Attach", + processId = require("dap.utils").pick_process, + cwd = vim.fn.getcwd(), + sourceMaps = true, + }, + -- Debug web applications (client side) + { + type = "pwa-chrome", + request = "launch", + name = "Launch & Debug Chrome", + url = function() + local co = coroutine.running() + return coroutine.create(function() + vim.ui.input({ + prompt = "Enter URL: ", + default = "http://localhost:3000", + }, function(url) + if url == nil or url == "" then + return + else + coroutine.resume(co, url) + end + end) + end) + end, + webRoot = vim.fn.getcwd(), + protocol = "inspector", + sourceMaps = true, + userDataDir = false, + }, + -- Divider for the launch.json derived configs + { + name = "----- ↓ launch.json configs ↓ -----", + type = "", + request = "launch", + }, + } + end + end, + keys = { + { + "dO", + function() + require("dap").step_out() + end, + desc = "Step Out", + }, + { + "do", + function() + require("dap").step_over() + end, + desc = "Step Over", + }, + { + "da", + function() + if vim.fn.filereadable(".vscode/launch.json") then + local dap_vscode = require("dap.ext.vscode") + dap_vscode.load_launchjs(nil, { + ["pwa-node"] = js_based_languages, + ["chrome"] = js_based_languages, + ["pwa-chrome"] = js_based_languages, + }) + end + require("dap").continue() + end, + desc = "Run with Args", + }, + }, + dependencies = { + -- Install the vscode-js-debug adapter + { + "microsoft/vscode-js-debug", + -- After install, build it and rename the dist directory to out + build = "npm install --legacy-peer-deps --no-save && npx gulp vsDebugServerBundle && rm -rf out && mv dist out", + version = "1.*", + }, + { + "mxsdev/nvim-dap-vscode-js", + config = function() + ---@diagnostic disable-next-line: missing-fields + require("dap-vscode-js").setup({ + -- Path of node executable. Defaults to $NODE_PATH, and then "node" + -- node_path = "node", + + -- Path to vscode-js-debug installation. + debugger_path = vim.fn.resolve(vim.fn.stdpath("data") .. "/lazy/vscode-js-debug"), + + -- Command to use to launch the debug server. Takes precedence over "node_path" and "debugger_path" + -- debugger_cmd = { "js-debug-adapter" }, + + -- which adapters to register in nvim-dap + adapters = { + "chrome", + "pwa-node", + "pwa-chrome", + "pwa-msedge", + "pwa-extensionHost", + "node-terminal", + }, + + -- Path for file logging + -- log_file_path = "(stdpath cache)/dap_vscode_js.log", + + -- Logging level for output to file. Set to false to disable logging. + -- log_file_level = false, + + -- Logging level for output to console. Set to false to disable console output. + -- log_console_level = vim.log.levels.ERROR, + }) + end, + }, + { + "Joakker/lua-json5", + build = "./install.sh", + }, + }, }, + "leoluz/nvim-dap-go", "williamboman/mason.nvim", "williamboman/mason-lspconfig.nvim", "nvimdev/lspsaga.nvim", @@ -449,69 +598,9 @@ vim.keymap.set('n', 'sl', 'Lspsaga outline') vim.keymap.set('n', 'rn', 'Lspsaga rename') vim.keymap.set('n', 'st', 'Lspsaga term_toggle') --- setup adapters -require('dap-vscode-js').setup({ - node_path = 'node', - debugger_path = vim.fn.stdpath('data') .. '/mason/packages/js-debug-adapter', - debugger_cmd = { 'js-debug-adapter' }, - adapters = { 'pwa-node', 'pwa-chrome', 'pwa-msedge', 'node-terminal', 'pwa-extensionHost' }, - log_file_path = vim.fn.stdpath('cache') .. '/dap_vscode_js.log', - log_file_level = 1, - log_console_level = vim.log.levels.TRACE, -}) +require('dap-go').setup() - -local dap = require('dap') -for _, language in ipairs({ "typescript", "javascript" }) do - dap.configurations[language] = { - { - type = "pwa-node", - request = "launch", - name = "Debug Nest Framework", - args = { "${workspaceFolder}/src/main.ts" }, - runtimeArgs = { "--nolazy", "-r", "ts-node/register" }, - sourceMaps = true, - cwd = "${workspaceRoot}", - protocol = "inspector", - } - } -end ---[[ - { - 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}", - }, - { - 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", - }, ---]] - ---[[ -local types_to_filetypes_table = {} -types_to_filetypes_table['pwa-node'] = { 'javascript', 'typescript' } -require('dap.ext.vscode').load_launchjs(nil, types_to_filetypes_table) ---]] +require('dapui').setup() -- Tweak GitSigns blame color -- This differentiates the cursorline from the git blame text