MCPcopy Create free account
hub / github.com/PerroEngine/Perro / new_script_command

Function new_script_command

perro_source/devtools/perro_cli/src/scaffold.rs:348–393  ·  view source on GitHub ↗
(args: &[String], cwd: &Path)

Source from the content-addressed store, hash-verified

346}
347
348pub(crate) fn new_script_command(args: &[String], cwd: &Path) -> Result<(), String> {
349 let Some(raw_name) = parse_flag_value(args, "--name") else {
350 return Err("missing required flag `--name`".to_string());
351 };
352 let file_name = sanitize_script_file_name(&raw_name)?;
353
354 let project_dir = if let Some(raw_project) = parse_flag_value(args, "--path") {
355 resolve_local_path(&raw_project, cwd)
356 } else {
357 find_project_root(cwd).ok_or_else(|| {
358 "could not find project.toml. Run from a project directory or pass --path <project_dir>."
359 .to_string()
360 })?
361 };
362 let project_dir = project_dir.canonicalize().unwrap_or(project_dir);
363 let content_root = resolve_content_root(&project_dir, args)?;
364 let content_prefix = resolve_content_prefix(args)?;
365
366 let target_dir = if let Some(raw_path) = parse_flag_value(args, "--res") {
367 resolve_res_subdir(&raw_path, &content_root, &content_prefix)?
368 } else {
369 content_root
370 };
371
372 let target_path = target_dir.join(file_name);
373 write_new_file(&target_path, &default_script_empty_rs())?;
374 println!(
375 "created script at {}",
376 normalize_powershell_path(&target_path)
377 );
378 maybe_open_file_in_editor(args, &target_path)?;
379 update_workspace_vscode_linked_projects(&workspace_root(), &project_dir)?;
380 update_project_vscode_linked_projects(&project_dir)?;
381 log_step("Building Scripts");
382 compile_scripts_with_profile(&project_dir, ScriptsBuildProfile::Debug)
383 .map(|_| {
384 log_done("Scripts Built");
385 })
386 .map_err(|err| {
387 format!(
388 "scripts pipeline failed for {}: {err}",
389 project_dir.display()
390 )
391 })?;
392 Ok(())
393}
394
395fn parse_scene_template(args: &[String]) -> Result<SceneTemplate, String> {
396 let Some(raw) = parse_flag_value(args, "--template") else {

Callers 1

mainFunction · 0.85

Calls 15

find_project_rootFunction · 0.85
resolve_content_rootFunction · 0.85
resolve_content_prefixFunction · 0.85
resolve_res_subdirFunction · 0.85
write_new_fileFunction · 0.85
default_script_empty_rsFunction · 0.85
log_stepFunction · 0.85

Tested by

no test coverage detected