From 7799a9343bc556a8a86ece6ddf878fac7e95b4d5 Mon Sep 17 00:00:00 2001 From: Carlos Date: Mon, 10 Feb 2025 21:40:11 -0500 Subject: [PATCH] feat: adding dap --- ftplugin/java.lua | 85 ++++++++++++++++++++++ lua/cargdev/plugins/dap.lua | 112 ++++++++++++++++++++++++++--- lua/cargdev/plugins/lsp/mason.lua | 1 + lua/cargdev/plugins/nvim-jdtls.lua | 3 + tree.log | 59 +++++++++++++++ 5 files changed, 250 insertions(+), 10 deletions(-) create mode 100644 ftplugin/java.lua create mode 100644 lua/cargdev/plugins/nvim-jdtls.lua create mode 100644 tree.log diff --git a/ftplugin/java.lua b/ftplugin/java.lua new file mode 100644 index 0000000..b81ed8b --- /dev/null +++ b/ftplugin/java.lua @@ -0,0 +1,85 @@ +local home = os.getenv("HOME") +local workspace_path = home .. "/.local/share/nvim/jdtls-workspace/" +local project_name = vim.fn.fnamemodify(vim.fn.getcwd(), ":p:h:t") +local workspace_dir = workspace_path .. project_name +local keymap = vim.keymap.set + +local status, jdtls = pcall(require, "jdtls") +local dap = require("dap") + +if not status then + return +end +local extendedClientCapabilities = jdtls.extendedClientCapabilities + +local bundles = { + vim.fn.glob( + home + .. "/.local/share/nvim/mason/packages/java-debug/com.microsoft.java.debug.plugin/target/com.microsoft.java.debug.plugin-*.jar" + ), +} +vim.list_extend( + bundles, + vim.split(vim.fn.glob(home .. "/.local/share/nvim/mason/packages/vscode-java-test/server/*.jar", true), "\n") +) + +local config = { + cmd = { + "java", + "-Declipse.application=org.eclipse.jdt.ls.core.id1", + "-Dosgi.bundles.defaultStartLevel=4", + "-Declipse.product=org.eclipse.jdt.ls.core.product", + "-Dlog.protocol=true", + "-Dlog.level=ALL", + "-Xmx1g", + "--add-modules=ALL-SYSTEM", + "--add-opens", + "java.base/java.util=ALL-UNNAMED", + "--add-opens", + "java.base/java.lang=ALL-UNNAMED", + "-javaagent:" .. home .. "/.local/share/nvim/mason/packages/jdtls/lombok.jar", + "-jar", + vim.fn.glob(home .. "/.local/share/nvim/mason/packages/jdtls/plugins/org.eclipse.equinox.launcher_*.jar"), + "-configuration", + home .. "/.local/share/nvim/mason/packages/jdtls/config_mac", + "-data", + workspace_dir, + }, + root_dir = require("jdtls.setup").find_root({ ".git", "mvnw", "gradlew", "pom.xml", "build.gradle" }), + + settings = { + java = { + signatureHelp = { enabled = true }, + extendedClientCapabilities = extendedClientCapabilities, + maven = { + downloadSources = true, + }, + referencesCodeLens = { + enabled = true, + }, + references = { + includeDecompiledSources = true, + }, + inlayHints = { + parameterNames = { + enabled = "all", -- literals, all, none + }, + }, + format = { + enabled = false, + }, + }, + }, + + init_options = { + bundles = {}, + }, +} +require("jdtls").start_or_attach(config) + +keymap("n", "co", "lua require'jdtls'.organize_imports()", { desc = "Organize Imports" }) +keymap("n", "crv", "lua require('jdtls').extract_variable()", { desc = "Extract Variable" }) +keymap("v", "crv", "lua require('jdtls').extract_variable(true)", { desc = "Extract Variable" }) +keymap("n", "crc", "lua require('jdtls').extract_constant()", { desc = "Extract Constant" }) +keymap("v", "crc", "lua require('jdtls').extract_constant(true)", { desc = "Extract Constant" }) +keymap("v", "crm", "lua require('jdtls').extract_method(true)", { desc = "Extract Method" }) diff --git a/lua/cargdev/plugins/dap.lua b/lua/cargdev/plugins/dap.lua index 865fd4d..f2313e0 100644 --- a/lua/cargdev/plugins/dap.lua +++ b/lua/cargdev/plugins/dap.lua @@ -37,34 +37,61 @@ return { -- Keymaps for debugging local keymap = vim.keymap.set - keymap("n", "", function() - dap.continue() - end, { desc = "Start Debugging" }) - keymap("n", "", function() + keymap("n", "dc", "lua require'dap'.continue()", { desc = "Start Debugging" }) + + keymap("n", "do", function() dap.step_over() end, { desc = "Step Over" }) - keymap("n", "", function() + + keymap("n", "di", function() dap.step_into() end, { desc = "Step Into" }) - keymap("n", "", function() + + keymap("n", "dot", function() dap.step_out() end, { desc = "Step Out" }) + keymap("n", "db", function() dap.toggle_breakpoint() end, { desc = "Toggle Breakpoint" }) + keymap("n", "dB", function() dap.set_breakpoint(vim.fn.input("Breakpoint condition: ")) end, { desc = "Conditional Breakpoint" }) + keymap("n", "dr", function() dap.repl.open() end, { desc = "Open REPL" }) + keymap("n", "dl", function() dap.run_last() end, { desc = "Run Last Debug Session" }) + keymap("n", "du", function() dapui.toggle() end, { desc = "Toggle DAP UI" }) + keymap("n", "dq", "lua require'dap'.terminate()", { desc = "Stop Debugging" }) + + -- Java DAP Configuration + dap.adapters.java = function(callback) + callback({ + type = "server", + host = "127.0.0.1", + port = { port }, -- Port JDTLS uses for debugging + }) + end + + dap.configurations.java = { + { + name = "Attach to running Java process", + type = "java", + request = "attach", + hostName = "127.0.0.1", + port = { port }, + }, + } + -- Node.js Adapter Configuration for NestJS dap.adapters.node2 = { type = "executable", @@ -72,21 +99,20 @@ return { args = { os.getenv("HOME") .. "/.local/share/nvim/mason/packages/node-debug2-adapter/out/src/nodedebug.js" }, } - -- Debug Configuration for NestJS dap.configurations.typescript = { { name = "Launch NestJS", type = "node2", request = "launch", - program = "${workspaceFolder}/node_modules/.bin/nest", - args = { "start", "--debug", "--watch" }, + program = "${workspaceFolder}/dist/main.js", + args = {}, console = "integratedTerminal", outFiles = { "${workspaceFolder}/dist/**/*.js" }, sourceMaps = true, protocol = "inspector", cwd = vim.fn.getcwd(), + runtimeArgs = { "--inspect-brk" }, -- 🚀 Ensures debugging starts properly restart = true, - runtimeArgs = { "--nolazy" }, }, { name = "Attach to Process", @@ -95,5 +121,71 @@ return { processId = require("dap.utils").pick_process, }, } + + -- dap.configurations.typescript = { + -- { + -- name = "Launch NestJS", + -- type = "node2", + -- request = "launch", + -- program = "${workspaceFolder}/dist/main.js", -- ⚠️ Ensure this is correct! + -- args = {}, + -- console = "integratedTerminal", + -- outFiles = { "${workspaceFolder}/dist/**/*.js" }, + -- sourceMaps = true, + -- protocol = "inspector", + -- cwd = vim.fn.getcwd(), + -- runtimeArgs = { "--nolazy" }, + -- }, + -- { + -- name = "Attach to Process", + -- type = "node2", + -- request = "attach", + -- processId = require("dap.utils").pick_process, + -- }, + -- } + + dap.adapters.chrome = { + type = "executable", + command = "node", + args = { os.getenv("HOME") .. "/.local/share/nvim/mason/packages/chrome-debug-adapter/out/src/chromeDebug.js" }, + } + + dap.configurations.typescriptreact = { + { + name = "Attach to Chrome", + type = "chrome", + request = "attach", + program = "${file}", + cwd = vim.fn.getcwd(), + port = 9222, -- 🚀 Chrome debugging port + webRoot = "${workspaceFolder}", + sourceMaps = true, + skipFiles = { "/**", "webpack://_N_E/./node_modules/**" }, + }, + { + name = "Launch Chrome with DevTools", + type = "chrome", + request = "launch", + url = "http://localhost:4000", -- Your React app runs on this port + webRoot = "${workspaceFolder}", + runtimeArgs = { "--remote-debugging-port=9222" }, + sourceMaps = true, + skipFiles = { "/**", "webpack://_N_E/./node_modules/**" }, + }, + } + + dap.configurations.javascript = { + { + name = "Attach to Chrome", + type = "chrome", + request = "attach", + program = "${file}", + cwd = vim.fn.getcwd(), + port = 9222, -- 🚀 Default Chrome Debug Port + webRoot = "${workspaceFolder}", + sourceMaps = true, + skipFiles = { "/**", "webpack://_N_E/./node_modules/**" }, + }, + } end, } diff --git a/lua/cargdev/plugins/lsp/mason.lua b/lua/cargdev/plugins/lsp/mason.lua index 748229c..daf50a8 100644 --- a/lua/cargdev/plugins/lsp/mason.lua +++ b/lua/cargdev/plugins/lsp/mason.lua @@ -37,6 +37,7 @@ return { "emmet_ls", "prismals", "pyright", + "jdtls", }, }) diff --git a/lua/cargdev/plugins/nvim-jdtls.lua b/lua/cargdev/plugins/nvim-jdtls.lua new file mode 100644 index 0000000..a3f3896 --- /dev/null +++ b/lua/cargdev/plugins/nvim-jdtls.lua @@ -0,0 +1,3 @@ +return { + 'mfussenegger/nvim-jdtls', +} diff --git a/tree.log b/tree.log new file mode 100644 index 0000000..b20c3b8 --- /dev/null +++ b/tree.log @@ -0,0 +1,59 @@ +. +├── README.md +├── ftplugin +│   └── java.lua +├── init.lua +├── keyboard_mappings.md +├── kkk +├── lazigitconfig.log +├── lazy-lock.json +├── lua +│   ├── cargdev +│   │   ├── core +│   │   │   ├── function +│   │   │   │   └── openTerminal.lua +│   │   │   ├── init.lua +│   │   │   ├── keymaps.lua +│   │   │   └── options.lua +│   │   ├── lazy.lua +│   │   └── plugins +│   │   ├── alpha.lua +│   │   ├── auto-session.lua +│   │   ├── autopairs.lua +│   │   ├── bufferline.lua +│   │   ├── buffertabs.lua +│   │   ├── colorscheme.lua +│   │   ├── comments.lua +│   │   ├── copilot.lua +│   │   ├── dap.lua +│   │   ├── dressing.lua +│   │   ├── formatting.lua +│   │   ├── gitsigns.lua +│   │   ├── indent-blankline.lua +│   │   ├── init.lua +│   │   ├── lazygit.lua +│   │   ├── linting.lua +│   │   ├── lsp +│   │   │   ├── jdtls.lua +│   │   │   ├── lspconfig.lua +│   │   │   └── mason.lua +│   │   ├── lualine.lua +│   │   ├── noice.lua +│   │   ├── nvim-cmp.lua +│   │   ├── nvim-jdtls.lua +│   │   ├── nvim-tree.lua +│   │   ├── nvim-treesitter-text-objects.lua +│   │   ├── substitute.lua +│   │   ├── surround.lua +│   │   ├── telescope.lua +│   │   ├── tmux.lua +│   │   ├── todo-comments.lua +│   │   ├── treesitter.lua +│   │   ├── trouble.lua +│   │   ├── vim-maximizer.lua +│   │   ├── wakatime.lua +│   │   └── which-key.lua +│   └── myconfig +└── tree.log + +9 directories, 48 files