local utils = require("Polydev.utils") local M = {} local function extras(guard, file_type, file_name) if not file_name then return print("Header file creation canceled") end local guard_macro = file_name:upper():gsub("[^A-Z0-9]", "_") .. guard local content = string.format([[ #ifndef %s #define %s // Add code here #endif ]], guard_macro, guard_macro) utils.write_file({ utils.get_project_root(), "include", file_name .. file_type }, content) end M.projects = { javascript = { run = function(project_name, project_root) local full_project_root = vim.fn.expand(project_root) .. "/" .. project_name vim.fn.mkdir(full_project_root, "p") utils.write_file({ full_project_root, "main.js" }, [[ console.log("Hello World!"); ]]) local gitignore = { "" } utils.init_git(full_project_root, gitignore) vim.cmd("edit " .. full_project_root .. "main.js") end }, lua = { run = function(project_name, project_root) local full_project_root = vim.fn.expand(project_root) .. "/" .. project_name vim.fn.mkdir(full_project_root .. "/lua/" .. project_name, "p") utils.write_file({ full_project_root, "lua", project_name, "init.lua" }, [[ local M = {} return M ]]) local gitignore = { "" } utils.init_git(full_project_root, gitignore) vim.cmd("edit " .. full_project_root .. "/lua/" .. project_name .. "/init.lua") end }, java = { run = function(project_name, project_root) local full_project_root = vim.fn.expand(project_root) .. "/" .. project_name for _, path in ipairs({ "/src", "/build" }) do vim.fn.mkdir(full_project_root .. path, "p") end local content = [[ public class Main { public static void main(String[] args) { System.out.println("Hello, World!"); } } ]] local gitignore = { "build/" } utils.init_git(full_project_root, gitignore) utils.write_file({ full_project_root, "src", "Main.java" }, content) end }, python = { run = function(project_name, project_root) local full_project_root = vim.fn.expand(project_root) .. "/" .. project_name vim.fn.mkdir(full_project_root .. "/include", "p") utils.write_file({ full_project_root, "main.py" }, [[ def main(): print("Hello, World!") if __name__ == "__main__": main() ]]) utils.write_file({ full_project_root, "include/__init__.py" }, "") utils.write_file({ full_project_root, "requirements.txt" }, "") utils.write_file({ full_project_root, "setup.py" }, string.format([[ from setuptools import setup, find_packages setup( name="%s", version="0.1.0", packages=find_packages(), install_requires=[], python_requires=">=3.6", ) ]], project_name)) local gitignore = { "venv/" } utils.init_git(full_project_root, gitignore) vim.cmd("edit " .. full_project_root .. "/main.py") local venv_path = full_project_root .. "/venv" vim.fn.system("python3 -m venv " .. venv_path) vim.g.python3_host_prog = venv_path .. "/bin/python" vim.fn.setenv("VIRTUAL_ENV", venv_path) vim.fn.setenv("PATH", venv_path .. "/bin:" .. vim.fn.getenv("PATH")) print("Virtual environment activated for " .. project_name) end }, c = { run = function(project_name, project_root) local full_project_root = vim.fn.expand(project_root) .. "/" .. project_name for _, path in ipairs({ "/src", "/build", "/include" }) do vim.fn.mkdir( full_project_root .. path, "p") end utils.write_file({ full_project_root, ".clang-format" }, [[ --- BasedOnStyle: Google Standard: Latest UseTab: Always TabWidth: 8 IndentWidth: 8 BreakBeforeBraces: Allman SpaceBeforeCpp11BracedList: true SeparateDefinitionBlocks: Always Cpp11BracedListStyle: false BreakAfterReturnType: TopLevel AlignTrailingComments: Kind: Always ReflowComments: Always AllowShortFunctionsOnASingleLine: All AllowShortIfStatementsOnASingleLine: AllIfsAndElse AllowShortLoopsOnASingleLine: true IndentAccessModifiers: false # Indent access specifiers by one level AccessModifierOffset: -4 # Optional: adjust offset relative to the class indentation level ]]) utils.write_file({ full_project_root, "src/main.c" }, [[ #include int main() { printf("%s", "Hello World"); return 0; } ]]) utils.write_file({ full_project_root, ".clang-tidy" }, string.format([[ --- Checks: > -*, bugprone-*, concurrency-*, misc-*, modernize-*, performance-*, readability-*, portability-*, -readability-braces-around-statements, -readability-implicit-bool-conversion WarningsAsErrors: "" CheckOptions: - key: readability-identifier-naming.VariableCase value: lower_case - key: readability-identifier-naming.FunctionCase value: lower_case --- ]])) utils.write_file({ full_project_root, "CMakeLists.txt" }, string.format([[ cmake_minimum_required(VERSION 3.16) set(CMAKE_C_STANDARD 23) set(CMAKE_C_STANDARD_REQUIRED ON) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) include_directories(include) project(%s LANGUAGES C) set(SOURCES src/main.c ) add_executable(%s ${SOURCES}) ]], project_name, project_name, project_name)) local gitignore = { "build/", ".cache/" } utils.init_git(full_project_root, gitignore) vim.fn.system(string.format( "cd %s/build && cmake -S .. -B . && cmake --build . && cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON ..", full_project_root)) vim.cmd("edit " .. full_project_root .. "/src/main.c") end }, cpp = { run = function(project_name, project_root) local full_project_root = vim.fn.expand(project_root) .. "/" .. project_name for _, path in ipairs({ "/src", "/build", "/include" }) do vim.fn.mkdir(full_project_root .. path, "p") end utils.write_file({ full_project_root, ".clang-format" }, [[ --- BasedOnStyle: Google Standard: Latest UseTab: Always TabWidth: 8 IndentWidth: 8 BreakBeforeBraces: Allman SpaceBeforeCpp11BracedList: true SeparateDefinitionBlocks: Always Cpp11BracedListStyle: false BreakAfterReturnType: TopLevel AlignTrailingComments: Kind: Always ReflowComments: Always AllowShortFunctionsOnASingleLine: All AllowShortIfStatementsOnASingleLine: AllIfsAndElse AllowShortLoopsOnASingleLine: true IndentAccessModifiers: false # Indent access specifiers by one level AccessModifierOffset: -4 # Optional: adjust offset relative to the class indentation level ]]) utils.write_file({ full_project_root, "src/main.cpp" }, [[ #include int main() { std::cout << "Hello World\n"; return 0; } ]]) utils.write_file({ full_project_root, ".clang-tidy" }, string.format([[ --- Checks: > -*, bugprone-*, concurrency-*, misc-*, modernize-*, performance-*, readability-*, portability-*, -readability-braces-around-statements, -readability-implicit-bool-conversion WarningsAsErrors: "" CheckOptions: - key: readability-identifier-naming.VariableCase value: lower_case - key: readability-identifier-naming.FunctionCase value: lower_case --- ]])) utils.write_file({ full_project_root, "CMakeLists.txt" }, string.format([[ cmake_minimum_required(VERSION 3.16) set(CMAKE_CXX_STANDARD 23) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) project(%s LANGUAGES CXX) set(SOURCES src/main.cpp ) add_executable(%s ${SOURCES}) ]], project_name, project_name)) local gitignore = { "build/", ".cache/" } utils.init_git(full_project_root, gitignore) vim.fn.system(string.format( "cd %s/build && cmake -S .. -B . && cmake --build . && cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON ..", full_project_root)) vim.cmd("edit " .. full_project_root .. "/src/main.cpp") end }, rust = { run = function(project_name, project_root) local full_project_root = vim.fn.expand(project_root) .. "/" .. project_name vim.fn.system("cargo new " .. full_project_root) vim.cmd("edit " .. full_project_root .. "/src/main.rs") end }, html = { run = function(project_name, project_root) local full_project_root = vim.fn.expand(project_root) .. "/" .. project_name if vim.fn.isdirectory(full_project_root) == 0 then vim.fn.mkdir(full_project_root, "p") -- Create directory with parent directories end local main_html_content = [[ Page Title

My First Heading

My first paragraph.

]] utils.write_file({ full_project_root, "index.html" }, main_html_content) end }, } M.files = { lua = { run = function(file_name) utils.write_file( { utils.get_project_root(), "lua", utils.get_project_name(), file_name .. ".lua" }, "") end }, java = { run = function(file_name) utils.write_file({ utils.get_project_root(), "src", file_name .. ".java" }, string.format([[ public class %s { // New File } ]], file_name)) end }, python = { run = function(file_name) utils.write_file({ utils.get_project_root(), "include", file_name .. ".py" }, "") end }, c = { run = function(file_name) utils.write_file({ utils.get_project_root(), "src", file_name .. ".c" }, "") end }, cpp = { run = function(file_name) utils.write_file({ utils.get_project_root(), "src", file_name .. ".cpp" }, "") end }, rust = { run = function(file_name) utils.write_file({ utils.get_project_root(), "src", file_name .. ".rs" }, "") end }, html = { run = function(file_name) utils.write_file({ ".", file_name .. ".html" }, string.format([[ Page Title

My First Heading

My first paragraph.

]])) end } } M.extras = { run = function(lang, file_name) if lang == "c" then extras("_H", ".h", file_name) print("Successful creation of " .. file_name .. ".h") elseif lang == "cpp" then extras("_HPP", ".hpp", file_name) print("Successful creation of " .. file_name .. ".hpp") else print("Extras language is not found: enter cpp or c") end end } return M