diff --git a/lua/vern-nvim/actions/c.lua b/lua/vern-nvim/actions/c.lua index d398293..0a67c5b 100644 --- a/lua/vern-nvim/actions/c.lua +++ b/lua/vern-nvim/actions/c.lua @@ -2,34 +2,16 @@ local M = {} local utils = require("vern-nvim.utils") local templates = require("vern-nvim.templates") -local action_utils = require("vern-nvim.actions.utils") local join = vim.fs.joinpath ----@param opts VernCConfig -function M.create_project(opts) - vim.ui.input({ prompt = "Enter project name: " }, function(pname) - pname = pname and vim.trim(pname) - if not pname or pname == "" then - return - end - - local configs = require("vern-nvim.configs.c") - - ---@type VernCConfig - local cfg = vim.tbl_deep_extend("force", {}, configs, configs, opts or {}) - local root = join(vim.fn.expand(cfg.workspace_root), cfg.c.root, pname) - local bin = action_utils.create(cfg.c, pname, root) - - local build_cmd = "cd " .. root .. " && cmake -S . -B build && cmake --build build" - local _ = vim.system({ "sh", "-c", build_cmd }):wait() - - utils.init_git(root, "c") - - vim.cmd.edit(vim.fn.fnameescape(bin)) - end) +---@param root string +M.create_project = function(root) + local build_cmd = "cd " .. root .. " && cmake -S . -B build && cmake --build build" + local _ = vim.system({ "sh", "-c", build_cmd }):wait() end +---@param opts VernCConfig function M.create_file(opts) vim.ui.input({ prompt = "Enter type (c/h): " }, function(ft) ft = ft and vim.trim(ft) diff --git a/lua/vern-nvim/actions/cpp.lua b/lua/vern-nvim/actions/cpp.lua index 66cd636..3ea0e1d 100644 --- a/lua/vern-nvim/actions/cpp.lua +++ b/lua/vern-nvim/actions/cpp.lua @@ -1,73 +1,30 @@ local M = {} local utils = require("vern-nvim.utils") -local templates = require("vern-nvim.templates") -local action_utils = require("vern-nvim.actions.utils") -local join = vim.fs.joinpath - ----@param opts VernCPPConfig -function M.create_project(opts) - vim.ui.input({ prompt = "Enter project name: " }, function(pname) - pname = pname and vim.trim(pname) - if not pname or pname == "" then - return - end - - local configs = require("vern-nvim.configs.cpp") - - ---@type VernCPPConfig - local cfg = vim.tbl_deep_extend("force", {}, configs, configs, opts or {}) - local root = join(vim.fn.expand(cfg.workspace_root), cfg.cpp.root, pname) - local bin = action_utils.create(cfg.cpp, pname, root) - - local build_cmd = "cd " .. root .. " && cmake -S . -B build && cmake --build build" - local _ = vim.system({ "sh", "-c", build_cmd }):wait() - - utils.init_git(root, "cpp") - - vim.cmd.edit(vim.fn.fnameescape(bin)) - end) +---@param root string +M.create_project = function(root) + local build_cmd = "cd " .. root .. " && cmake -S . -B build && cmake --build build" + local _ = vim.system({ "sh", "-c", build_cmd }):wait() end ----@param opts VernCPPConfig -function M.create_file(opts) +---@param opts VernLanguageTemplates +M.create_file = function(opts, callback) vim.ui.input({ prompt = "Enter type (c/h): " }, function(ft) ft = ft and vim.trim(ft) if not ft or ft == "" then return end - local configs = require("vern-nvim.configs.cpp") - ---@type VernCPPConfig - local cfg = vim.tbl_deep_extend("force", {}, configs, opts or {}) - vim.ui.input({ prompt = "Enter file name: " }, function(fname) - local root = join(vim.fn.expand(cfg.workspace_root), cfg.cpp.root, utils.proj_name()) - local input_txt = fname - ft = ft and vim.trim(ft) - if not ft or ft == "" then - return - end - local mod - if ft == "c" then - mod = cfg.cpp.templates.file.source or {} - end - if ft == "h" then - mod = cfg.cpp.templates.file.header or {} - input_txt = fname:upper() - end - local raw_path = join(mod.path, mod.name) - local context = { project_name = utils.proj_name(), name = fname } - local path = utils.resolve_path(raw_path, cfg.cpp.dirs or {}, context) - local abs_file_path = vim.fs.normalize(join(root, path)) - if ft == "h" then - local abs_dir_path = vim.fs.dirname(abs_file_path) - if abs_dir_path ~= root and not vim.startswith(root, abs_dir_path) then - vim.fn.mkdir(abs_dir_path, "p") - end - end - utils.dump(abs_file_path, templates.fetch(mod.kind_path, mod.kind, input_txt)) - vim.cmd.edit(vim.fn.expand(abs_file_path)) - end) + local template = {} + if ft == "c" then + template = opts.file.source or {} + end + if ft == "h" then + template = opts.file.header or {} + end + if callback then + callback(template) + end end) end diff --git a/lua/vern-nvim/actions/init.lua b/lua/vern-nvim/actions/init.lua index a02143c..e7218bb 100644 --- a/lua/vern-nvim/actions/init.lua +++ b/lua/vern-nvim/actions/init.lua @@ -1,5 +1,9 @@ local M = {} +local action_utils = require("vern-nvim.actions.utils") +local utils = require("vern-nvim.utils") +local templates = require("vern-nvim.templates") + M.create_project = function(opts) opts = opts or {} vim.ui.input( @@ -7,18 +11,34 @@ M.create_project = function(opts) function(ft) ft = ft and vim.trim(ft) if not ft or vim.trim(ft) == "" then + vim.notify("Unknown Filetype: " .. ft, vim.log.levels.WARN, { + title = "Vern Project", + }) return end local ok, actions = pcall(require, "vern-nvim.actions." .. ft) local configs = require("vern-nvim.configs." .. ft) local args = vim.tbl_deep_extend("force", {}, configs, opts or {}) - if ok and actions and type(actions.create_project) == "function" then - actions.create_project(args) - else - vim.notify("Unknown Filetype: " .. ft, vim.log.levels.WARN, { - title = "Vern Project", - }) - end + vim.ui.input({ prompt = "Enter project name: " }, function(pname) + pname = pname and vim.trim(pname) + if not pname or pname == "" then + return + end + local root = + vim.fs.joinpath(vim.fn.expand(args.workspace_root), args[ft].root, pname) + local bin = action_utils.create(args[ft], pname, root) + utils.init_git(root, ft) + utils.init_readme(root) + if ok and actions and type(actions.create_project) == "function" then + actions.create_project(root) + end + vim.cmd.edit(vim.fn.fnameescape(bin)) + vim.notify( + "Project: " .. pname .. " has been created!", + vim.log.levels.INFO, + { title = "Vern Project" } + ) + end) end ) end @@ -34,18 +54,47 @@ M.create_file = function(opts) return end local ok, actions = pcall(require, "vern-nvim.actions." .. ft) - local configs = require("vern-nvim.configs." .. ft) - local args = vim.tbl_deep_extend("force", {}, configs, opts or {}) - if ok and actions and type(actions.create_file) == "function" then - actions.create_file(args) - else + if not ok then vim.notify("Unknown Filetype: " .. ft, vim.log.levels.WARN, { title = "Vern File", }) - vim.notify("Error: " .. actions, vim.log.levels.ERROR, { - title = "Vern File", - }) + return end + local configs = require("vern-nvim.configs." .. ft) + local args = vim.tbl_deep_extend("force", {}, configs, opts or {}) + + vim.ui.input({ prompt = "Enter file name: " }, function(fname) + fname = fname and vim.trim(fname) + if not fname or fname == "" then + return + end + + local function continue_creation(mod) + mod = mod or args[ft].templates.file.source or {} + if vim.tbl_isempty(mod) then + return + end + local raw_path = vim.fs.joinpath(mod.path, mod.name) + local context = { project_name = utils.proj_name(), name = fname } + local path = utils.resolve_path(raw_path, args[ft].dirs or {}, context) + local root = utils.proj_root() + utils.dump( + vim.fs.joinpath(root, path), + templates.fetch(mod.kind_path, mod.kind, fname) + ) + vim.cmd.edit(vim.fn.expand(path)) + vim.notify( + fname .. " has been created!", + vim.log.levels.INFO, + { title = "Vern File" } + ) + end + if ok and actions and type(actions.create_file) == "function" then + actions.create_file(args[ft].templates, continue_creation) + else + continue_creation(nil) + end + end) end) end diff --git a/lua/vern-nvim/actions/lua.lua b/lua/vern-nvim/actions/lua.lua index 2ff5a14..686749d 100644 --- a/lua/vern-nvim/actions/lua.lua +++ b/lua/vern-nvim/actions/lua.lua @@ -1,54 +1,10 @@ local M = {} local utils = require("vern-nvim.utils") -local templates = require("vern-nvim.templates") -local action_utils = require("vern-nvim.actions.utils") -local join = vim.fs.joinpath +M.create_project = function() end ----@param opts VernLuaConfig -function M.create_project(opts) - vim.ui.input({ prompt = "Enter project name: " }, function(pname) - pname = pname and vim.trim(pname) - if not pname or pname == "" then - return - end - - local configs = require("vern-nvim.configs.lua") - - ---@type VernLuaConfig - local cfg = vim.tbl_deep_extend("force", {}, configs, configs, opts or {}) - local root = join(vim.fn.expand(cfg.workspace_root), cfg.lua.root, pname) - local bin = action_utils.create(cfg.lua, pname, root) - - utils.init_git(root, "lua") - - vim.cmd.edit(vim.fn.fnameescape(bin)) - end) -end - ----@param opts VernLuaConfig -function M.create_file(opts) - opts = opts or {} - vim.ui.input({ prompt = "Enter file name: " }, function(fname) - fname = fname and vim.trim(fname) - if not fname or fname == "" then - return - end - local configs = require("vern-nvim.configs.lua") - ---@type VernLuaConfig - local cfg = vim.tbl_deep_extend("force", {}, configs, opts or {}) - local mod = cfg.lua.templates.file.source or {} - - local raw_path = join(mod.path, mod.name) - local context = { project_name = utils.proj_name(), name = fname } - local path = utils.resolve_path(raw_path, cfg.lua.dirs or {}, context) - - utils.dump(path, templates.fetch(mod.kind_path, mod.kind, fname)) - vim.notify("File: " .. fname .. " has been created!") - vim.cmd.edit(vim.fn.expand(path)) - end) -end +M.create_file = function() end ---@param opts VernCPPConfig Takes a table for the runtime function M.run(opts) @@ -56,7 +12,7 @@ function M.run(opts) local root = utils.proj_root() or "." local pname = vim.fs.basename(root) - local full_path = join(root, pname, "lua", pname) + local full_path = vim.fs.joinpath(root, "lua", pname) print(full_path .. "/init.lua") utils.term({ "lua " .. full_path .. "/init.lua" }, opts.terminal or {}, false) diff --git a/lua/vern-nvim/actions/python.lua b/lua/vern-nvim/actions/python.lua index e0fd9e0..4709cd3 100644 --- a/lua/vern-nvim/actions/python.lua +++ b/lua/vern-nvim/actions/python.lua @@ -1,58 +1,13 @@ local M = {} local utils = require("vern-nvim.utils") -local templates = require("vern-nvim.templates") -local action_utils = require("vern-nvim.actions.utils") -local join = vim.fs.joinpath - ----@param opts VernPythonConfig -function M.create_project(opts) - vim.ui.input({ prompt = "Enter project name: " }, function(pname) - pname = pname and vim.trim(pname) - if not pname or pname == "" then - return - end - - local configs = require("vern-nvim.configs.python") - - ---@type VernPythonConfig - local cfg = vim.tbl_deep_extend("force", {}, configs, opts or {}) - local root = join(vim.fn.expand(cfg.workspace_root), cfg.python.root, pname) - local bin = action_utils.create(cfg.python, pname, root) - - utils.init_git(root, "python") - - local venv_path = root .. "/venv" - vim.fn.system("python3 -m venv " .. venv_path) - - vim.notify("Project: " .. pname .. " has been created!") - vim.cmd.edit(vim.fn.fnameescape(bin)) - end) +---@param root string +M.create_project = function(root) + vim.fn.system("python3 -m venv " .. root .. "/venv") end ----@param opts VernPythonConfig -function M.create_file(opts) - opts = opts or {} - vim.ui.input({ prompt = "Enter file name: " }, function(fname) - fname = fname and vim.trim(fname) - if not fname or fname == "" then - return - end - local configs = require("vern-nvim.configs.python") - ---@type VernPythonConfig - local cfg = vim.tbl_deep_extend("force", {}, configs, opts or {}) - local mod = cfg.python.templates.file.source or {} - - local raw_path = join(mod.path, mod.name) - local context = { project_name = utils.proj_name(), name = fname } - local path = utils.resolve_path(raw_path, cfg.python.dirs or {}, context) - - utils.dump(path, templates.fetch(mod.kind_path, mod.kind, fname)) - vim.notify("File: " .. fname .. " has been created!") - vim.cmd.edit(vim.fn.expand(path)) - end) -end +M.create_file = function() end ---@param opts VernPythonConfig Takes a table for the runtime function M.run(opts) @@ -61,9 +16,9 @@ function M.run(opts) local pname = vim.fs.basename(root) local bin = opts.python.templates.project.primary - local exe = join(bin.path, bin.name) or "src/{project_name}/main.py" + local exe = vim.fs.joinpath(bin.path, bin.name) or "src/{project_name}/main.py" local exe_path = utils.resolve_path(exe, opts.python.dirs, { project_name = pname }) - local full_path = join(vim.fn.expand(root), exe_path) + local full_path = vim.fs.joinpath(vim.fn.expand(root), exe_path) utils.term({ "python3 " .. full_path }, opts.terminal or {}, false) end diff --git a/lua/vern-nvim/languages-deprecated.lua b/lua/vern-nvim/languages-deprecated.lua index deee8db..5256e2f 100644 --- a/lua/vern-nvim/languages-deprecated.lua +++ b/lua/vern-nvim/languages-deprecated.lua @@ -117,26 +117,6 @@ M.languages = { end end, }, - lua = { - setup = function(self, user_opts) - local opts = vim.tbl_deep_extend("force", {}, configs.get("lua"), user_opts or {}) - vim.api.nvim_create_user_command("LuaRun", function() - self:run() - end, {}) - for key, _ in pairs(opts.keybinds) do - vim.keymap.set("n", key, ":LuaRun", { silent = true }) - end - end, - run = function() - local init_lua_path = utils.get_project_root() - .. "/lua/" - .. utils.get_project_name() - .. "/init.lua" - if vim.fn.filereadable(init_lua_path) == 1 then - utils.terminal({ "lua " .. init_lua_path }) - end - end, - }, } return M diff --git a/lua/vern-nvim/templates/extras/readme.lua b/lua/vern-nvim/templates/extras/readme.lua new file mode 100644 index 0000000..a818380 --- /dev/null +++ b/lua/vern-nvim/templates/extras/readme.lua @@ -0,0 +1 @@ +return "# Hello from your fellow README.md"