commit dc6331e5fc91e2e317a6e2a734052a96beca0fba Author: james Date: Sat Jan 17 22:22:16 2026 +1030 Initial diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..ab1f416 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,10 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Ignored default folder with query files +/queries/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml +# Editor-based HTTP Client requests +/httpRequests/ diff --git a/.idea/discord.xml b/.idea/discord.xml new file mode 100644 index 0000000..104c42f --- /dev/null +++ b/.idea/discord.xml @@ -0,0 +1,14 @@ + + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..146e386 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..fd2d682 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..b626d62 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/workspace-template.iml b/.idea/workspace-template.iml new file mode 100644 index 0000000..6102194 --- /dev/null +++ b/.idea/workspace-template.iml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/cargo-generate.toml b/cargo-generate.toml new file mode 100644 index 0000000..db10694 --- /dev/null +++ b/cargo-generate.toml @@ -0,0 +1,25 @@ +[template] +cargo_generate_version = ">=0.18.0" + +[hooks] +post = ["post-generate.rhai"] + +[placeholders.project-name] +type = "string" +prompt = "Project name?" +regex = "^[a-zA-Z][a-zA-Z0-9_-]*$" + +[placeholders.crates] +type = "string" +prompt = "Crate names (comma-separated, e.g. 'core,cli,macros')?" +default = "core" + +[placeholders.author] +type = "string" +prompt = "Author?" +default = "" + +[placeholders.license] +type = "string" +prompt = "License?" +default = "MIT" diff --git a/post-generate.rhai b/post-generate.rhai new file mode 100644 index 0000000..c0c52a3 --- /dev/null +++ b/post-generate.rhai @@ -0,0 +1,77 @@ +// Post-generation hook: creates crates based on user input + +let crates_input = variable::get("crates"); +let project_name = variable::get("project-name"); +let author = variable::get("author"); +let license = variable::get("license"); + +// Parse comma-separated crate names +let crate_names = crates_input.split(","); + +for crate_name in crate_names { + let crate_name = crate_name.trim(); + if crate_name.is_empty() { + continue; + } + + let crate_dir = `crates/${crate_name}`; + let src_dir = `${crate_dir}/src`; + + // Create directories + file::create_dir(crate_dir); + file::create_dir(src_dir); + + // Determine if this looks like a binary crate + let is_bin = crate_name.contains("cli") || crate_name.contains("bin") || crate_name == "app"; + + // Create Cargo.toml + let cargo_toml = `[package] +name = "${project_name}-${crate_name}" +version.workspace = true +edition.workspace = true +authors.workspace = true +license.workspace = true +description = "" + +[dependencies] + +[lints] +workspace = true +`; + + if is_bin { + cargo_toml = `[package] +name = "${project_name}-${crate_name}" +version.workspace = true +edition.workspace = true +authors.workspace = true +license.workspace = true +description = "" + +[[bin]] +name = "${project_name}" +path = "src/main.rs" + +[dependencies] + +[lints] +workspace = true +`; + } + + file::write(`${crate_dir}/Cargo.toml`, cargo_toml); + + // Create src/lib.rs or src/main.rs + if is_bin { + file::write(`${src_dir}/main.rs`, `fn main() { + println!("Hello from ${project_name}!"); +} +`); + } else { + file::write(`${src_dir}/lib.rs`, `//! ${crate_name} crate for ${project_name}. +`); + } +} + +// Clean up the placeholder .gitkeep directory +file::delete("crates/.gitkeep"); diff --git a/{{project-name}}/.gitignore b/{{project-name}}/.gitignore new file mode 100644 index 0000000..b83d222 --- /dev/null +++ b/{{project-name}}/.gitignore @@ -0,0 +1 @@ +/target/ diff --git a/{{project-name}}/Cargo.toml b/{{project-name}}/Cargo.toml new file mode 100644 index 0000000..540379b --- /dev/null +++ b/{{project-name}}/Cargo.toml @@ -0,0 +1,18 @@ +[workspace] +resolver = "3" +members = ["crates/*"] + +[workspace.package] +version = "0.1.0" +edition = "2024" +authors = [{% if author %}"{{author}}"{% endif %}] +license = "{{license}}" + +[workspace.dependencies] + +[workspace.lints.rust] +unsafe_code = "warn" + +[workspace.lints.clippy] +all = "warn" +pedantic = "warn"