librojo/cli/
fmt_project.rs

1use std::path::PathBuf;
2
3use anyhow::Context;
4use clap::Parser;
5use memofs::Vfs;
6
7use crate::project::Project;
8
9use super::resolve_path;
10
11/// Reformat a Rojo project using the standard JSON formatting rules.
12#[derive(Debug, Parser)]
13pub struct FmtProjectCommand {
14    /// Path to the project to format. Defaults to the current directory.
15    #[clap(default_value = "")]
16    pub project: PathBuf,
17}
18
19impl FmtProjectCommand {
20    pub fn run(self) -> anyhow::Result<()> {
21        let vfs = Vfs::new_default();
22        vfs.set_watch_enabled(false);
23
24        let base_path = resolve_path(&self.project);
25        let project = Project::load_fuzzy(&vfs, &base_path)?
26            .context("A project file is required to run 'rojo fmt-project'")?;
27
28        let serialized = serde_json::to_string_pretty(&project)
29            .context("could not re-encode project file as JSON")?;
30
31        fs_err::write(&project.file_location, serialized)
32            .context("could not write back to project file")?;
33
34        Ok(())
35    }
36}