From c66913e4c2008d559bd452b5402eaebe9863d64d Mon Sep 17 00:00:00 2001 From: Pojok Code Date: Sat, 16 Nov 2024 21:51:22 +0700 Subject: [PATCH] enc: add gradle create new project --- lazy-lock.json | 4 +- lua/auto-jdtls2/create_gradle_project.lua | 88 +++++++++++++++++++++++ lua/auto-jdtls2/init.lua | 1 + 3 files changed, 91 insertions(+), 2 deletions(-) create mode 100644 lua/auto-jdtls2/create_gradle_project.lua diff --git a/lazy-lock.json b/lazy-lock.json index d770724..2035390 100644 --- a/lazy-lock.json +++ b/lazy-lock.json @@ -6,7 +6,7 @@ "alpha-nvim": { "branch": "main", "commit": "de72250e054e5e691b9736ee30db72c65d560771" }, "auto-bufferline.nvim": { "branch": "main", "commit": "f5835a4b62bfb6f6c829f8f050e5102ccf230b3e" }, "auto-conform.nvim": { "branch": "main", "commit": "5f0897235e84bf2f8ff9d634e81678d5bfa63ab8" }, - "auto-java-project.nvim": { "branch": "main", "commit": "940531b6eeea682fa734f8dc160d7870dde38df2" }, + "auto-java-project.nvim": { "branch": "main", "commit": "b685ad4fbda1a28cb61dd941d54fb0dd3c22d8f4" }, "auto-jdtls.nvim": { "branch": "main", "commit": "050da8d68c51a6e02a08d91329b7a848887927e7" }, "auto-lint.nvim": { "branch": "main", "commit": "aff13cb8eaa055e66e940d43b7d83166397e5413" }, "auto-lsp.nvim": { "branch": "main", "commit": "1f3ef04741972c107187a07be5615ff210888184" }, @@ -38,7 +38,7 @@ "minty": { "branch": "main", "commit": "a3d69bd63fc98f640815f94b797bf978e9193022" }, "neotest": { "branch": "master", "commit": "6d3d22cdad49999ef774ebe1bc250a4994038964" }, "neotest-java": { "branch": "main", "commit": "320f31c71b183f2c584198f33f93542fd0e5a768" }, - "noice.nvim": { "branch": "main", "commit": "6e0c8dcc61282782ac7fa4b9b4b0c910fd3f83d9" }, + "noice.nvim": { "branch": "main", "commit": "221ffbc499d322699ea079fcd878a2399529e775" }, "nui.nvim": { "branch": "main", "commit": "b58e2bfda5cea347c9d58b7f11cf3012c7b3953f" }, "nvim-autopairs": { "branch": "master", "commit": "ee297f215e95a60b01fde33275cc3c820eddeebe" }, "nvim-cmp": { "branch": "main", "commit": "f17d9b4394027ff4442b298398dfcaab97e40c4f" }, diff --git a/lua/auto-jdtls2/create_gradle_project.lua b/lua/auto-jdtls2/create_gradle_project.lua new file mode 100644 index 0000000..1867635 --- /dev/null +++ b/lua/auto-jdtls2/create_gradle_project.lua @@ -0,0 +1,88 @@ +local function gradle_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 + + -- Ambil input dari pengguna untuk Gradle + local project_name, canceled_name = get_user_input("Enter project name: ", "myjavaproject") + if canceled_name then + return + end + + project_dir = project_dir .. "\\" .. project_name + + -- 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 package name + local package_name, canceled_package = get_user_input("Enter package name: ", "com.example." .. project_name) + if canceled_package then + return + end + + -- Format perintah Gradle berdasarkan input pengguna + local command = string.format( + "gradle init --type java-application --dsl groovy --project-name %s --package %s", + project_name, + package_name + ) + + -- Fungsi untuk menjalankan perintah Gradle dan menampilkan outputnya + local function run_gradle_command(cmd, dir, pkg) + local output = vim.fn.system(cmd) + if vim.v.shell_error ~= 0 then + create_notif("Error executing: " .. output, "error") + else + create_notif("Project created successfully!", "info") + local main_class_path = string.format("%s/app/src/main/java/%s/App.java", dir, pkg:gsub("%.", "/")) + if vim.fn.filereadable(main_class_path) == 1 then + vim.cmd(":edit " .. main_class_path) + end + vim.cmd(":NvimTreeFindFileToggle") + end + end + + -- Jalankan perintah Gradle dan buka proyek + run_gradle_command(command, project_dir, package_name) +end + +vim.api.nvim_create_user_command("GradleNewProject", gradle_new_project, {}) diff --git a/lua/auto-jdtls2/init.lua b/lua/auto-jdtls2/init.lua index 24ff4be..6afe333 100644 --- a/lua/auto-jdtls2/init.lua +++ b/lua/auto-jdtls2/init.lua @@ -3,6 +3,7 @@ local M = {} M.setup = function(opt) opt = opt or {} require("auto-jdtls.utils").install() + require("auto-jdtls.create_gradle_project") require("auto-jdtls.create_maven_project") require("auto-jdtls.create_springboot_project") require("auto-jdtls.utils").attach_jdtls(opt)