local js_based_languages = { "javascript", "typescript" } -- lazy.nvim local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" if not vim.loop.fs_stat(lazypath) then vim.fn.system({ "git", "clone", "--filter=blob:none", "https://github.com/folke/lazy.nvim.git", "--branch=stable", -- latest stable release lazypath, }) end vim.opt.rtp:prepend(lazypath) require("lazy").setup({ { "rcarriga/nvim-dap-ui", event = "VeryLazy", requires = "mfussenegger/nvim-dap" }, { "mfussenegger/nvim-dap", event = "VeryLazy", 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 = { { "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 = "DAP: 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", event = "VeryLazy" }, { "williamboman/mason.nvim", event = "VeryLazy" }, { "williamboman/mason-lspconfig.nvim", event = "VeryLazy" }, }) --[[ mason Mason manages external editor plugins such as LSP servers, DAP servers, linters, and formatters. There are further recommended plugins for better integration. --]] require('mason').setup() require('mason-lspconfig').setup() require('dap-go').setup() local dap, dapui = require("dap"), require("dapui") dapui.setup() dap.listeners.after.event_initialized["dapui_config"] = function() dapui.open() end dap.listeners.before.event_terminated["dapui_config"] = function() dapui.close() end dap.listeners.before.event_exited["dapui_config"] = function() dapui.close() end -- Switch syntax highlighting on vim.cmd("syntax enable")