(args: &[String], cwd: &Path)
| 346 | } |
| 347 | |
| 348 | pub(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 | |
| 395 | fn parse_scene_template(args: &[String]) -> Result<SceneTemplate, String> { |
| 396 | let Some(raw) = parse_flag_value(args, "--template") else { |
no test coverage detected