diff --git a/lazy-lock.json b/lazy-lock.json index 74cc1fc..d770724 100644 --- a/lazy-lock.json +++ b/lazy-lock.json @@ -3,12 +3,13 @@ "Eva-Theme.nvim": { "branch": "master", "commit": "5e0ee05b7b803cbd781612d484b0796c45946a3d" }, "FixCursorHold.nvim": { "branch": "master", "commit": "1900f89dc17c603eec29960f57c00bd9ae696495" }, "LuaSnip": { "branch": "master", "commit": "659c4479529a05cc9b05ef762639a09d366cc690" }, - "alpha-nvim": { "branch": "main", "commit": "bf3c8bb8c02ed3d9644cc5bbc48e2bdc39349cd7" }, + "alpha-nvim": { "branch": "main", "commit": "de72250e054e5e691b9736ee30db72c65d560771" }, "auto-bufferline.nvim": { "branch": "main", "commit": "f5835a4b62bfb6f6c829f8f050e5102ccf230b3e" }, "auto-conform.nvim": { "branch": "main", "commit": "5f0897235e84bf2f8ff9d634e81678d5bfa63ab8" }, - "auto-jdtls.nvim": { "branch": "main", "commit": "7838b8936547b1d93eeebf1c78af788267ab7ac1" }, + "auto-java-project.nvim": { "branch": "main", "commit": "940531b6eeea682fa734f8dc160d7870dde38df2" }, + "auto-jdtls.nvim": { "branch": "main", "commit": "050da8d68c51a6e02a08d91329b7a848887927e7" }, "auto-lint.nvim": { "branch": "main", "commit": "aff13cb8eaa055e66e940d43b7d83166397e5413" }, - "auto-lsp.nvim": { "branch": "main", "commit": "2a5ade9f78a1c60d747396445d4205352d2491db" }, + "auto-lsp.nvim": { "branch": "main", "commit": "1f3ef04741972c107187a07be5615ff210888184" }, "auto-lualine.nvim": { "branch": "main", "commit": "fc8557f61dc1da12a8b90167a49420958b991d8c" }, "breadcrumbs.nvim": { "branch": "master", "commit": "9f764278784ce2f10dbe2f555ba14be2451d36a0" }, "bufferline.nvim": { "branch": "main", "commit": "5cc447cb2b463cb499c82eaeabbed4f5fa6a0a44" }, @@ -23,38 +24,38 @@ "conform.nvim": { "branch": "master", "commit": "023f795dbcf32d4351b6a9ed2e613d471b5bb812" }, "dressing.nvim": { "branch": "master", "commit": "fc78a3ca96f4db9f8893bb7e2fd9823e0780451b" }, "friendly-snippets": { "branch": "main", "commit": "de8fce94985873666bd9712ea3e49ee17aadb1ed" }, - "gitsigns.nvim": { "branch": "main", "commit": "9521fe8be39255b9abc6ec54e352bf04c410f5cf" }, + "gitsigns.nvim": { "branch": "main", "commit": "ac5aba6dce8c06ea22bea2c9016f51a2dbf90dc7" }, "inc-rename.nvim": { "branch": "main", "commit": "8ba77017ca468f3029bf88ef409c2d20476ea66b" }, "indent-blankline.nvim": { "branch": "master", "commit": "7871a88056f7144defca9c931e311a3134c5d509" }, "lazy.nvim": { "branch": "main", "commit": "7967abe55752aa90532e6bb4bd4663fe27a264cb" }, "lsp_signature.nvim": { "branch": "master", "commit": "fc38521ea4d9ec8dbd4c2819ba8126cea743943b" }, "lualine.nvim": { "branch": "master", "commit": "2a5bae925481f999263d6f5ed8361baef8df4f83" }, - "mason-lspconfig.nvim": { "branch": "main", "commit": "4d0e5b49363cac187326998b96aa6a2884e0e89b" }, + "mason-lspconfig.nvim": { "branch": "main", "commit": "cab00668464d2914d0752b86168b4a431cc93eb2" }, "mason-nvim-dap.nvim": { "branch": "main", "commit": "8b9363d83b5d779813cdd2819b8308651cec2a09" }, "mason.nvim": { "branch": "main", "commit": "e2f7f9044ec30067bc11800a9e266664b88cda22" }, "menu": { "branch": "main", "commit": "657bfc91382c0928453d9a4d0a10ec92db5de2bb" }, "mini.indentscope": { "branch": "main", "commit": "da9af64649e114aa79480c238fd23f6524bc0903" }, - "minty": { "branch": "main", "commit": "1b604ed0d741294cfb56c0ce3aa6161e9ae7dd8b" }, + "minty": { "branch": "main", "commit": "a3d69bd63fc98f640815f94b797bf978e9193022" }, "neotest": { "branch": "master", "commit": "6d3d22cdad49999ef774ebe1bc250a4994038964" }, "neotest-java": { "branch": "main", "commit": "320f31c71b183f2c584198f33f93542fd0e5a768" }, - "noice.nvim": { "branch": "main", "commit": "ca2e3fea9fb080dcb79d9129d73dac631294fe79" }, + "noice.nvim": { "branch": "main", "commit": "6e0c8dcc61282782ac7fa4b9b4b0c910fd3f83d9" }, "nui.nvim": { "branch": "main", "commit": "b58e2bfda5cea347c9d58b7f11cf3012c7b3953f" }, "nvim-autopairs": { "branch": "master", "commit": "ee297f215e95a60b01fde33275cc3c820eddeebe" }, "nvim-cmp": { "branch": "main", "commit": "f17d9b4394027ff4442b298398dfcaab97e40c4f" }, "nvim-colorizer.lua": { "branch": "master", "commit": "f134063618a65cad4d7415fddbd96ff7e0c5b4ae" }, - "nvim-dap": { "branch": "master", "commit": "6bf4de67dbe90271608e1c81797e5edc79ec6335" }, + "nvim-dap": { "branch": "master", "commit": "29d1f8814fa4fcc194ec574de998a42a22ebbe4a" }, "nvim-dap-ui": { "branch": "master", "commit": "ffa89839f97bad360e78428d5c740fdad9a0ff02" }, "nvim-dap-virtual-text": { "branch": "master", "commit": "76d80c3d171224315b61c006502a1e30c213a9ab" }, "nvim-jdtls": { "branch": "master", "commit": "c4279b8ffce9b64eb302056d78dfebc2968a49bc" }, "nvim-lint": { "branch": "master", "commit": "36da8dd0ddc4f88e0beae234c20e75397326f143" }, - "nvim-lspconfig": { "branch": "master", "commit": "d2d153a179ed59aa7134d7ebdf4d7dcb156efa22" }, + "nvim-lspconfig": { "branch": "master", "commit": "87c7c83ce62971e0bdb29bb32b8ad2b19c8f95d0" }, "nvim-material-icon": { "branch": "main", "commit": "38fc13fe4811c4bf62533180ff5e7bbd237c5ef5" }, "nvim-navic": { "branch": "master", "commit": "8649f694d3e76ee10c19255dece6411c29206a54" }, "nvim-nio": { "branch": "master", "commit": "a428f309119086dc78dd4b19306d2d67be884eee" }, "nvim-notify": { "branch": "master", "commit": "fbef5d32be8466dd76544a257d3f3dce20082a07" }, "nvim-scrollview": { "branch": "main", "commit": "f7f611330a8f7cd00dc81538fec369611be678ed" }, "nvim-tree.lua": { "branch": "master", "commit": "28eac2801b201f301449e976d7a9e8cfde053ba3" }, - "nvim-treesitter": { "branch": "master", "commit": "6389ceb1758b8f62a15194e3b790e33268304cb8" }, + "nvim-treesitter": { "branch": "master", "commit": "20e10ca6914f65cf1410232433fb58de70ab6b39" }, "nvim-ts-autotag": { "branch": "main", "commit": "e239a560f338be31337e7abc3ee42515daf23f5e" }, "nvim-ts-context-commentstring": { "branch": "main", "commit": "9c74db656c3d0b1c4392fc89a016b1910539e7c0" }, "nvim-web-devicons": { "branch": "master", "commit": "19d257cf889f79f4022163c3fbb5e08639077bd8" }, @@ -70,7 +71,7 @@ "vim-illuminate": { "branch": "master", "commit": "5eeb7951fc630682c322e88a9bbdae5c224ff0aa" }, "vim-visual-multi": { "branch": "master", "commit": "a6975e7c1ee157615bbc80fc25e4392f71c344d4" }, "virt-column.nvim": { "branch": "master", "commit": "b87e3e0864211a32724a2ebf3be37e24e9e2fa99" }, - "volt": { "branch": "main", "commit": "1df6698f7e5d19db578063412d12322e53376f5e" }, + "volt": { "branch": "main", "commit": "2cf7e86f3bc7f41cbb6d0a8d0d84fc759c0dae86" }, "which-key.nvim": { "branch": "main", "commit": "68e37e12913a66b60073906f5d3f14dee0de19f2" }, "yanky.nvim": { "branch": "main", "commit": "f9b905994cccf3c55f41af3a0a1f4c76c844e411" }, "zen-mode.nvim": { "branch": "main", "commit": "29b292bdc58b76a6c8f294c961a8bf92c5a6ebd6" } diff --git a/lua/auto-jdtls2/create_maven_project.lua b/lua/auto-jdtls2/create_maven_project.lua new file mode 100644 index 0000000..bbfd05c --- /dev/null +++ b/lua/auto-jdtls2/create_maven_project.lua @@ -0,0 +1,113 @@ +local function mvn_new_project() + local function create_notif(message, level) + local notif_ok, notify = pcall(require, "notify") + if notif_ok then + notify(message, level) + else + print(message) + end + end + -- Fungsi untuk meminta input dari pengguna dengan opsi untuk membatalkan + local function get_user_input(prompt, default_value) + vim.fn.inputsave() + local result = vim.fn.input(prompt, default_value) + vim.fn.inputrestore() + + -- Cek apakah pengguna menekan Esc untuk membatalkan input + if result == "" then + create_notif("Input canceled.", "info") + return nil, true + end + + return result, false + end + -- Ambil input dari pengguna untuk menentukan direktori proyek + local project_dir, canceled = get_user_input("Enter project directory: ", vim.fn.getcwd()) + if canceled then + return + end + -- Buat direktori jika belum ada + if vim.fn.isdirectory(project_dir) == 0 then + if vim.fn.mkdir(project_dir, "p") == 0 then + create_notif("Failed to create project directory: " .. project_dir, "error") + return + end + end + -- Pindah ke direktori proyek + local success, err = pcall(vim.fn.chdir, project_dir) + if not success then + create_notif("Error changing directory: " .. err, "error") + return + end + + create_notif("Changed directory to: " .. project_dir, "info") + -- Ambil input dari pengguna untuk Maven + local group_id, canceled_group = get_user_input("Enter groupId: ", "com.example") + if canceled_group then + return + end + local artifact_id, canceled_artifact = get_user_input("Enter artifactId: ", "myproject") + if canceled_artifact then + return + end + local archetype_artifact_id, canceled_archetype = + get_user_input("Enter archetypeArtifactId: ", "maven-archetype-quickstart") + if canceled_archetype then + return + end + local archetype_version, canceled_version = get_user_input("Enter archetypeVersion: ", "1.5") + if canceled_version then + return + end + local interactive_mode, canceled_interactive = get_user_input("Enter interactiveMode (true/false): ", "false") + if canceled_interactive then + return + end + -- Format perintah Maven berdasarkan input pengguna + local command = string.format( + [[mvn archetype:generate "-DgroupId=%s" "-DartifactId=%s" "-DarchetypeArtifactId=%s" "-DarchetypeVersion=%s" "-DinteractiveMode=%s"]], + group_id, + artifact_id, + archetype_artifact_id, + archetype_version, + interactive_mode + ) + + -- Fungsi untuk menjalankan perintah Maven dan menampilkan outputnya + local function run_maven_command(cmd, project_name) + local output = vim.fn.system(cmd) + if vim.v.shell_error ~= 0 then + print("Erro ao executar: " .. output) + else + local ch_dir = string.format("cd %s", project_name) + vim.fn.system(ch_dir) + vim.fn.chdir(project_name) + -- Cari dan buka file main class + local uname = vim.loop.os_uname().sysname + if uname == "Windows_NT" then + if group_id then + group_id = group_id:gsub("%.", "\\") + local main_class_path = string.format("src\\main\\java\\%s\\App.java", group_id) + if vim.fn.filereadable(main_class_path) == 1 then + vim.cmd(":edit " .. main_class_path) + end + end + else + if group_id then + group_id = group_id:gsub("%.", "/") + local main_class_path = string.format("src/main/java/%s/App.java", group_id) + if vim.fn.filereadable(main_class_path) == 1 then + vim.cmd(":edit " .. main_class_path) + end + end + end + vim.cmd(":NvimTreeFindFileToggl") + end + end + + -- Jalankan perintah Maven dan buka proyek + run_maven_command(command, artifact_id) + create_notif("Project created successfully !", "info") +end + +vim.api.nvim_create_user_command("MavenNewProject", mvn_new_project, {}) diff --git a/lua/auto-jdtls2/create_springboot_project.lua b/lua/auto-jdtls2/create_springboot_project.lua new file mode 100644 index 0000000..42b4915 --- /dev/null +++ b/lua/auto-jdtls2/create_springboot_project.lua @@ -0,0 +1,289 @@ +local function create_notif(message, level) + local notif_ok, notify = pcall(require, "notify") + if notif_ok then + notify(message, level) + else + print(message) + end +end + +local function safe_request(url) + local status, request = pcall(function() + return vim.system({ "curl", "-s", url }, { text = true }):wait() + end) + + if not status then + vim.api.nvim_err_writeln("Error making request to " .. url .. ": " .. request) + return nil + end + + return request +end + +local function safe_json_decode(data) + local status, decoded = pcall(vim.fn.json_decode, data) + + if not status then + vim.api.nvim_err_writeln("Error decoding JSON: " .. decoded) + return nil + end + + return decoded +end + +local function contains(list, element) + for _, value in pairs(list) do + if value == element then + return true + end + end + return false +end + +local function list_to_string(list, is_err) + local result = "" + + for i, value in ipairs(list) do + if is_err then + result = result .. "'" .. tostring(value) .. "'" + else + result = result .. tostring(value) + end + if i < #list then + if is_err then + result = result .. " or " + else + result = result .. "/" + end + end + end + return result +end + +local function handle_start_springboot_data(data) + local spring_data = {} + for _, value in pairs(data.values) do + table.insert(spring_data, value.id) + end + return spring_data +end + +local function change_directory() + -- Fungsi untuk meminta input dari pengguna dengan opsi untuk membatalkan + local function get_user_input(prompt, default_value) + vim.fn.inputsave() + local result = vim.fn.input(prompt, default_value) + vim.fn.inputrestore() + + -- Cek apakah pengguna menekan Esc untuk membatalkan input + if result == "" then + create_notif("Input canceled.", "info") + return nil, true + end + + return result, false + end + + -- Ambil input dari pengguna untuk menentukan direktori proyek + local project_dir, canceled = get_user_input("Enter project directory: ", vim.fn.getcwd()) + if canceled then + return + end + -- Buat direktori jika belum ada + if vim.fn.isdirectory(project_dir) == 0 then + if vim.fn.mkdir(project_dir, "p") == 0 then + create_notif("Failed to create project directory: " .. project_dir, "error") + return + end + end + -- Pindah ke direktori proyek + local success, err = pcall(vim.fn.chdir, project_dir) + if not success then + create_notif("Error changing directory: " .. err, "error") + return + end + + create_notif("Changed directory to: " .. project_dir, "info") + return project_dir +end + +local function get_build_type(data_available) + local build_type_available = list_to_string(data_available, false) + local options_err = list_to_string(data_available, true) + local build_type = vim.fn.input("Enter build type (" .. build_type_available .. "): ", "maven") + if not contains(data_available, build_type) then + create_notif("Invalid build type. Please enter " .. options_err .. ".", "info") + return "" + end + + return build_type +end + +local function get_language(data_available) + local language_available = list_to_string(data_available, false) + local options_err = list_to_string(data_available, true) + + local language = vim.fn.input("Enter Language (" .. language_available .. "): ", "java") + if not contains(data_available, language) then + create_notif("Invalid language. Please enter " .. options_err .. ".", "info") + return "" + end + + return language +end + +local function get_java_version(data_available) + local version_available = list_to_string(data_available, false) + local options_err = list_to_string(data_available, true) + + local java_version = vim.fn.input("Enter Java Version (" .. version_available .. "): ", "21") + if not contains(data_available, java_version) then + create_notif("Invalid Java version. Please enter a valid version " .. options_err .. ".", "info") + return "" + end + + return java_version +end + +local function get_boot_version(data_available) + local version_available = list_to_string(data_available, false) + local options_err = list_to_string(data_available, true) + + local versions_table = {} + for v in string.gmatch(version_available, "([^/]+)") do + table.insert(versions_table, "-> " .. v) + end + local annotated_versions = table.concat(versions_table, "\n") + local boot_version = vim.fn.input(annotated_versions .. "\n: ", "3.3.5.RELEASE") + if not contains(data_available, boot_version) then + create_notif("Invalid Spring Boot version. Please enter a valid version " .. options_err .. ".", "info") + return "" + end + + return boot_version +end + +local function get_packaging(data_available) + local packaging_available = list_to_string(data_available, false) + local options_err = list_to_string(data_available, true) + + local packaging = vim.fn.input("Enter Packaging(" .. packaging_available .. "): ", "jar") + if packaging ~= "jar" and packaging ~= "war" then + create_notif("Invalid packaging. Please enter " .. options_err .. ".", "info") + return "" + end + return packaging +end + +local function springboot_new_project() + local request = safe_request("https://start.spring.io/metadata/client") + + if not request then + vim.api.nvim_err_writeln("Failed to make a request to the URL.") + return false + end + + local springboot_data = safe_json_decode(request.stdout) + + if not springboot_data then + vim.api.nvim_err_writeln("Failed to decode JSON from the request.") + return false + end + local project_dir = change_directory() + local build_types = { "maven", "gradle" } + local languages = handle_start_springboot_data(springboot_data.language) + local java_versions = handle_start_springboot_data(springboot_data.javaVersion) + local boot_versions = handle_start_springboot_data(springboot_data.bootVersion) + local packagings = handle_start_springboot_data(springboot_data.packaging) + local build_type = get_build_type(build_types) + + if build_type:len() == 0 then + return + end + + local language = get_language(languages) + if language:len() == 0 then + return + end + + local java_version = get_java_version(java_versions) + if java_version:len() == 0 then + return + end + + local boot_version = get_boot_version(boot_versions) + if boot_version:len() == 0 then + return + end + + local packaging = get_packaging(packagings) + if packaging:len() == 0 then + return + end + + local dependencies = vim.fn.input("Enter dependencies (comma separated): ", "devtools,web,data-jpa,h2,thymeleaf") + local group_id = vim.fn.input("Enter Group ID: ", "com.example") + local artifact_id = vim.fn.input("Enter Artifact ID: ", "myproject") + local name = vim.fn.input("Enter project name: ", artifact_id) + local package_name = vim.fn.input("Enter package name: ", group_id .. "." .. artifact_id) + local description = vim.fn.input("Enter project description: ", "") + + local command = string.format( + "spring init --boot-version=%s --java-version=%s --dependencies=%s --groupId=%s --artifactId=%s --name=%s --package-name=%s --description=%s --language=%s --build=%s %s", + boot_version, + java_version, + dependencies, + group_id, + artifact_id, + name, + package_name, + description, -- Menambahkan deskripsi proyek + language, -- Menambahkan bahasa pemrograman (Java, Kotlin, atau Groovy) + build_type, + name + ) + + -- Fungsi untuk mengubah teks + local function capitalize_first_letter(str) + return str:sub(1, 1):upper() .. str:sub(2):lower() + end + + local output = vim.fn.system(command) + if vim.v.shell_error ~= 0 then + create_notif("Erro ao executar: " .. output, "error") + else + local ch_dir = string.format("cd %s", project_dir .. "/" .. name) + vim.fn.system(ch_dir) + vim.fn.chdir(project_dir .. "/" .. name) + create_notif(name, "info") + -- Cari dan buka file main class + local uname = vim.loop.os_uname().sysname + local pth = package_name + if uname == "Windows_NT" then + if pth then + pth = pth:gsub("%.", "\\") + create_notif(pth, "info") + local main_class_path = + string.format("src\\main\\java\\%s\\" .. capitalize_first_letter(name) .. "Application.java", pth) + create_notif(main_class_path, "info") + if vim.fn.filereadable(main_class_path) == 1 then + vim.cmd(":edit " .. main_class_path) + end + end + else + if pth then + pth = pth:gsub("%.", "/") + local main_class_path = + string.format("src/main/java/%s/" .. capitalize_first_letter(name) .. "Application.java", pth) + if vim.fn.filereadable(main_class_path) == 1 then + vim.cmd(":edit " .. main_class_path) + end + end + end + vim.cmd(":NvimTreeFindFileToggl") + end + + create_notif("Project created successfully!", "info") +end + +vim.api.nvim_create_user_command("SpringBootNewProject", springboot_new_project, {}) diff --git a/lua/auto-jdtls2/init.lua b/lua/auto-jdtls2/init.lua index af1787a..24ff4be 100644 --- a/lua/auto-jdtls2/init.lua +++ b/lua/auto-jdtls2/init.lua @@ -3,6 +3,8 @@ local M = {} M.setup = function(opt) opt = opt or {} require("auto-jdtls.utils").install() + require("auto-jdtls.create_maven_project") + require("auto-jdtls.create_springboot_project") require("auto-jdtls.utils").attach_jdtls(opt) end diff --git a/lua/auto-jdtls2/utils.lua b/lua/auto-jdtls2/utils.lua index ce6262a..67c63e3 100644 --- a/lua/auto-jdtls2/utils.lua +++ b/lua/auto-jdtls2/utils.lua @@ -52,6 +52,161 @@ M.lsp_keymaps=function () vim.keymap.set("n", "lD", vim.lsp.buf.declaration, { desc = "Code Goto Declaration" }) end +M.is_maven_project = function() + if vim.fn.findfile("pom.xml", vim.fn.getcwd()) == "pom.xml" then + return true + else + return false + end +end + +M.is_gradle_project = function() + if + vim.fn.findfile("build.gradle", vim.fn.getcwd()) == "build.gradle" + or vim.fn.findfile("settings.gradle", vim.fn.getcwd()) == "settings.gradle" + or vim.fn.findfile("gradlew", vim.fn.getcwd()) == "gradlew" + then + return true + else + return false + end +end + +M.is_main_class = function() + local bufnr = vim.api.nvim_get_current_buf() + local content = vim.api.nvim_buf_get_lines(bufnr, 0, -1, false) + for i, line in ipairs(content) do + if line:match("public static void main%s*%(") then + return true + end + end + + return false +end + +M.run_aven_pring_boot = function() + if M.is_maven_project() then + vim.cmd("terminal mvn spring-boot:run") + else + local notif_ok, notify = pcall(require, "notify") + if notif_ok then + notify("Project pom.xml not found !", "info") + else + print("Project pom.xml not found !") + end + end +end + +M.cmd_maven_spring_boot = function() + vim.api.nvim_create_user_command("RunMvnSpringBoot", function() + M.run_aven_pring_boot() + end, { nargs = 0 }) +end + +M.run_gradle_spring_boot = function() + if M.is_gradle_project() then + local uname = vim.loop.os_uname().sysname + if uname == "Windows_NT" then + vim.cmd("terminal .\\gradlew build --continuous") + vim.cmd("terminal .\\gradlew bootRun") + else + vim.cmd("terminal ./gradlew build --continuous") + vim.cmd("terminal ./gradlew bootRun") + end + else + local notif_ok, notify = pcall(require, "notify") + if notif_ok then + notify("Project build.gradle not found !", "info") + else + print("Project build.gradle not found !") + end + end +end + +M.cmd_gradle_spring_boot = function() + vim.api.nvim_create_user_command("RunGradleSpringBoot", function() + M.run_gradle_spring_boot() + end, { nargs = 0 }) +end + +M.run_mvn_and_java = function() + if M.is_maven_project() then + local result = M.is_main_class() + if not result then + local notif_ok, notify = pcall(require, "notify") + if notif_ok then + notify("Please open java main class !", "info") + else + print("Please open java main class !") + end + return + else + -- Fungsi untuk mencari file .jar dalam folder target + local function find_jar_file() + local target_dir = "target" + local jar_file = nil + + local handle = vim.loop.fs_scandir(target_dir) + if handle then + while true do + local name, t = vim.loop.fs_scandir_next(handle) + if not name then + break + end + if t == "file" and name:match("%.jar$") then + jar_file = name + break + end + end + end + return jar_file + end + local jar_file = find_jar_file() + -- Buat fungsi untuk menjalankan perintah secara berurutan dalam mode diam + function RunMvnAndJava() + -- daptkan path + local root = vim.uv.cwd() + local fname = vim.api.nvim_buf_get_name(0) + fname = fname:gsub(root, "") + fname = fname:gsub("/src/main/java/", "") + fname = fname:gsub("\\src\\main\\java\\", "") + fname = fname:gsub(".java", ""):gsub("/", ".") + fname = fname:gsub("\\", ".") + -- Jalankan perintah mvn package secara diam-diam + local notif_ok, notify = pcall(require, "notify") + if notif_ok then + notify("Compile Start !", "info") + end + vim.fn.jobstart("mvn package", { + on_exit = function() + vim.cmd("terminal java -cp target/" .. jar_file .. " " .. fname) + end, + }) + end + RunMvnAndJava() + end + else + local notif_ok, notify = pcall(require, "notify") + if notif_ok then + notify("Project pom.xml not found !", "info") + else + print("Project pom.xml not found !") + end + end +end + +M.cmd_mvn_and_java = function() + vim.api.nvim_create_user_command("RunMaven", function() + M.run_mvn_and_java() + end, { nargs = 0 }) +end + +M.cmd_gradle = function() + vim.api.nvim_create_user_command("RunGradle", function() + vim.cmd("terminal gradle run") + end, { nargs = 0 }) +end + -- stylua: ignore M.jdtls_keymaps=function () -- add keymaps @@ -213,6 +368,11 @@ M.attach_jdtls = function(op) end -- initialisasi config local function attach_jdtls() + -- load user cmd + M.cmd_maven_spring_boot() + M.cmd_gradle_spring_boot() + M.cmd_mvn_and_java() + M.cmd_gradle() -- Configuration can be augmented and overridden by opts.jdtls local config = M.extend_or_override({ cmd = M.opts.full_cmd(M.opts), diff --git a/lua/pcode/plugins/lang/java.lua b/lua/pcode/plugins/lang/java.lua index 3367fb1..50daaf7 100644 --- a/lua/pcode/plugins/lang/java.lua +++ b/lua/pcode/plugins/lang/java.lua @@ -7,11 +7,17 @@ M = { vim.list_extend(opts.skip_config, { "jdtls" }) end, }, + { + "pojokcodeid/auto-java-project.nvim", + event = "VeryLazy", + config = function() + require("auto-java-project").setup() + end, + }, { "mfussenegger/nvim-jdtls", dependencies = { "pojokcodeid/auto-jdtls.nvim" }, ft = { "java" }, - enabled = true, -- your opts go here opts = {}, config = function(_, opts) @@ -33,8 +39,9 @@ M = { "nvim-treesitter/nvim-treesitter", "andy-bell101/neotest-java", }, - enabled = vim.fn.findfile("build.gradle", vim.fn.getcwd()) == "build.gradle" or false, + -- enabled = vim.fn.findfile("build.gradle", vim.fn.getcwd()) == "build.gradle" or false, config = function() + require("auto-jdtls.create_maven_project") require("neotest").setup({ adapters = { require("neotest-java"),