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

Function new_command

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

Source from the content-addressed store, hash-verified

232}
233
234pub(crate) fn new_command(args: &[String], cwd: &Path) -> Result<(), String> {
235 if args
236 .iter()
237 .any(|a| a == "--build-scripts" || a == "--open" || a == "--no-open")
238 {
239 return Err("`perro new` only accepts --path and --name".to_string());
240 }
241 let mut project_name = parse_flag_value(args, "--name");
242 let mut base_dir_input = parse_flag_value(args, "--path");
243
244 if project_name.is_none() && base_dir_input.is_none() {
245 if !io::stdin().is_terminal() {
246 return Err(
247 "`perro new` without --name/--path needs interactive terminal input".to_string(),
248 );
249 }
250 let input_name = prompt_text(
251 &format!("Project name [{DEFAULT_PROJECT_NAME}]: "),
252 Some(DEFAULT_PROJECT_NAME),
253 )?;
254 let input_root = prompt_text(
255 &format!("Project root folder [{}]: ", normalize_powershell_path(cwd)),
256 Some(&normalize_powershell_path(cwd)),
257 )?;
258 project_name = Some(input_name);
259 base_dir_input = Some(input_root);
260 }
261
262 let base_dir = base_dir_input
263 .map(|p| resolve_local_path(&p, cwd))
264 .unwrap_or_else(|| cwd.to_path_buf());
265 let base_dir = base_dir.canonicalize().unwrap_or(base_dir);
266 let project_name = project_name.unwrap_or_else(|| DEFAULT_PROJECT_NAME.to_string());
267 let project_dir = base_dir.join(sanitize_project_dir_name(&project_name));
268
269 create_new_project(&project_dir, &project_name).map_err(|err| {
270 format!(
271 "failed to create project at {}: {err}",
272 project_dir.display()
273 )
274 })?;
275 update_workspace_vscode_linked_projects(&workspace_root(), &project_dir)?;
276 update_project_vscode_linked_projects(&project_dir)?;
277
278 println!(
279 "created project `{}` at {}",
280 project_name,
281 normalize_powershell_path(&project_dir)
282 );
283 maybe_open_project_in_new_window(&project_dir)?;
284 Ok(())
285}
286
287pub(crate) fn new_dlc_command(args: &[String], cwd: &Path) -> Result<(), String> {
288 let Some(raw_name) = parse_flag_value(args, "--name") else {

Callers 1

mainFunction · 0.85

Calls 13

prompt_textFunction · 0.85
create_new_projectFunction · 0.85
anyMethod · 0.80
joinMethod · 0.80
parse_flag_valueFunction · 0.70
resolve_local_pathFunction · 0.70
workspace_rootFunction · 0.70

Tested by

no test coverage detected