mirror of
https://github.com/rojo-rbx/rojo.git
synced 2026-04-24 14:45:56 +00:00
Add plugin template (#738)
Adds a new plugin template to the `init` command: `rojo init --kind plugin`.
This commit is contained in:
@@ -19,6 +19,7 @@
|
|||||||
* Added support for syncing in `.toml` files ([#633])
|
* Added support for syncing in `.toml` files ([#633])
|
||||||
* Add `plugin` flag to the `build` command that outputs to the local plugins folder ([#735])
|
* Add `plugin` flag to the `build` command that outputs to the local plugins folder ([#735])
|
||||||
* Added better support for `Font` properties ([#731])
|
* Added better support for `Font` properties ([#731])
|
||||||
|
* Add new plugin template to the `init` command ([#738])
|
||||||
|
|
||||||
[#668]: https://github.com/rojo-rbx/rojo/pull/668
|
[#668]: https://github.com/rojo-rbx/rojo/pull/668
|
||||||
[#674]: https://github.com/rojo-rbx/rojo/pull/674
|
[#674]: https://github.com/rojo-rbx/rojo/pull/674
|
||||||
@@ -38,6 +39,7 @@
|
|||||||
[#633]: https://github.com/rojo-rbx/rojo/pull/633
|
[#633]: https://github.com/rojo-rbx/rojo/pull/633
|
||||||
[#735]: https://github.com/rojo-rbx/rojo/pull/735
|
[#735]: https://github.com/rojo-rbx/rojo/pull/735
|
||||||
[#731]: https://github.com/rojo-rbx/rojo/pull/731
|
[#731]: https://github.com/rojo-rbx/rojo/pull/731
|
||||||
|
[#738]: https://github.com/rojo-rbx/rojo/pull/738
|
||||||
|
|
||||||
## [7.3.0] - April 22, 2023
|
## [7.3.0] - April 22, 2023
|
||||||
* Added `$attributes` to project format. ([#574])
|
* Added `$attributes` to project format. ([#574])
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
Generated by [Rojo](https://github.com/rojo-rbx/rojo) {rojo_version}.
|
Generated by [Rojo](https://github.com/rojo-rbx/rojo) {rojo_version}.
|
||||||
|
|
||||||
## Getting Started
|
## Getting Started
|
||||||
To build this library or plugin, use:
|
To build this library, use:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
rojo build -o "{project_name}.rbxmx"
|
rojo build -o "{project_name}.rbxmx"
|
||||||
|
|||||||
17
assets/default-plugin-project/README.md
Normal file
17
assets/default-plugin-project/README.md
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
# {project_name}
|
||||||
|
Generated by [Rojo](https://github.com/rojo-rbx/rojo) {rojo_version}.
|
||||||
|
|
||||||
|
## Getting Started
|
||||||
|
To build this plugin to your local plugins folder, use:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
rojo build -p "{project_name}.rbxm"
|
||||||
|
```
|
||||||
|
|
||||||
|
You can include the `watch` flag to re-build it on save:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
rojo build -p "{project_name}.rbxm" --watch
|
||||||
|
```
|
||||||
|
|
||||||
|
For more help, check out [the Rojo documentation](https://rojo.space/docs).
|
||||||
6
assets/default-plugin-project/default.project.json
Normal file
6
assets/default-plugin-project/default.project.json
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"name": "{project_name}",
|
||||||
|
"tree": {
|
||||||
|
"$path": "src"
|
||||||
|
}
|
||||||
|
}
|
||||||
3
assets/default-plugin-project/gitignore.txt
Normal file
3
assets/default-plugin-project/gitignore.txt
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
# Plugin model files
|
||||||
|
/{project_name}.rbxmx
|
||||||
|
/{project_name}.rbxm
|
||||||
@@ -21,6 +21,11 @@ static PLACE_PROJECT: &str =
|
|||||||
static PLACE_README: &str = include_str!("../../assets/default-place-project/README.md");
|
static PLACE_README: &str = include_str!("../../assets/default-place-project/README.md");
|
||||||
static PLACE_GIT_IGNORE: &str = include_str!("../../assets/default-place-project/gitignore.txt");
|
static PLACE_GIT_IGNORE: &str = include_str!("../../assets/default-place-project/gitignore.txt");
|
||||||
|
|
||||||
|
static PLUGIN_PROJECT: &str =
|
||||||
|
include_str!("../../assets/default-plugin-project/default.project.json");
|
||||||
|
static PLUGIN_README: &str = include_str!("../../assets/default-plugin-project/README.md");
|
||||||
|
static PLUGIN_GIT_IGNORE: &str = include_str!("../../assets/default-plugin-project/gitignore.txt");
|
||||||
|
|
||||||
/// Initializes a new Rojo project.
|
/// Initializes a new Rojo project.
|
||||||
#[derive(Debug, Parser)]
|
#[derive(Debug, Parser)]
|
||||||
pub struct InitCommand {
|
pub struct InitCommand {
|
||||||
@@ -28,7 +33,7 @@ pub struct InitCommand {
|
|||||||
#[clap(default_value = "")]
|
#[clap(default_value = "")]
|
||||||
pub path: PathBuf,
|
pub path: PathBuf,
|
||||||
|
|
||||||
/// The kind of project to create, 'place' or 'model'. Defaults to place.
|
/// The kind of project to create, 'place', 'plugin', or 'model'. Defaults to place.
|
||||||
#[clap(long, default_value = "place")]
|
#[clap(long, default_value = "place")]
|
||||||
pub kind: InitKind,
|
pub kind: InitKind,
|
||||||
}
|
}
|
||||||
@@ -51,6 +56,7 @@ impl InitCommand {
|
|||||||
match self.kind {
|
match self.kind {
|
||||||
InitKind::Place => init_place(&base_path, project_params)?,
|
InitKind::Place => init_place(&base_path, project_params)?,
|
||||||
InitKind::Model => init_model(&base_path, project_params)?,
|
InitKind::Model => init_model(&base_path, project_params)?,
|
||||||
|
InitKind::Plugin => init_plugin(&base_path, project_params)?,
|
||||||
}
|
}
|
||||||
|
|
||||||
println!("Created project successfully.");
|
println!("Created project successfully.");
|
||||||
@@ -65,8 +71,11 @@ pub enum InitKind {
|
|||||||
/// A place that contains a baseplate.
|
/// A place that contains a baseplate.
|
||||||
Place,
|
Place,
|
||||||
|
|
||||||
/// An empty model, suitable for a library or plugin.
|
/// An empty model, suitable for a library.
|
||||||
Model,
|
Model,
|
||||||
|
|
||||||
|
/// An empty plugin.
|
||||||
|
Plugin,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl FromStr for InitKind {
|
impl FromStr for InitKind {
|
||||||
@@ -76,8 +85,9 @@ impl FromStr for InitKind {
|
|||||||
match source {
|
match source {
|
||||||
"place" => Ok(InitKind::Place),
|
"place" => Ok(InitKind::Place),
|
||||||
"model" => Ok(InitKind::Model),
|
"model" => Ok(InitKind::Model),
|
||||||
|
"plugin" => Ok(InitKind::Plugin),
|
||||||
_ => Err(format_err!(
|
_ => Err(format_err!(
|
||||||
"Invalid init kind '{}'. Valid kinds are: place, model",
|
"Invalid init kind '{}'. Valid kinds are: place, model, plugin",
|
||||||
source
|
source
|
||||||
)),
|
)),
|
||||||
}
|
}
|
||||||
@@ -147,6 +157,29 @@ fn init_model(base_path: &Path, project_params: ProjectParams) -> anyhow::Result
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn init_plugin(base_path: &Path, project_params: ProjectParams) -> anyhow::Result<()> {
|
||||||
|
println!("Creating new plugin project '{}'", project_params.name);
|
||||||
|
|
||||||
|
let project_file = project_params.render_template(PLUGIN_PROJECT);
|
||||||
|
try_create_project(base_path, &project_file)?;
|
||||||
|
|
||||||
|
let readme = project_params.render_template(PLUGIN_README);
|
||||||
|
write_if_not_exists(&base_path.join("README.md"), &readme)?;
|
||||||
|
|
||||||
|
let src = base_path.join("src");
|
||||||
|
fs::create_dir_all(&src)?;
|
||||||
|
|
||||||
|
write_if_not_exists(
|
||||||
|
&src.join("init.server.lua"),
|
||||||
|
"print(\"Hello world, from plugin!\")\n",
|
||||||
|
)?;
|
||||||
|
|
||||||
|
let git_ignore = project_params.render_template(PLUGIN_GIT_IGNORE);
|
||||||
|
try_git_init(base_path, &git_ignore)?;
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
/// Contains parameters used in templates to create a project.
|
/// Contains parameters used in templates to create a project.
|
||||||
struct ProjectParams {
|
struct ProjectParams {
|
||||||
name: String,
|
name: String,
|
||||||
|
|||||||
Reference in New Issue
Block a user