forge/cmd/
tree.rs

1use clap::Parser;
2use eyre::Result;
3use foundry_cli::{opts::ProjectPathOpts, utils::LoadConfig};
4use foundry_compilers::{
5    resolver::{parse::SolData, Charset, TreeOptions},
6    Graph,
7};
8
9/// CLI arguments for `forge tree`.
10#[derive(Clone, Debug, Parser)]
11pub struct TreeArgs {
12    /// Do not de-duplicate (repeats all shared dependencies)
13    #[arg(long)]
14    no_dedupe: bool,
15
16    /// Character set to use in output.
17    ///
18    /// [possible values: utf8, ascii]
19    #[arg(long, default_value = "utf8")]
20    charset: Charset,
21
22    #[command(flatten)]
23    project_paths: ProjectPathOpts,
24}
25
26foundry_config::impl_figment_convert!(TreeArgs, project_paths);
27
28impl TreeArgs {
29    pub fn run(self) -> Result<()> {
30        let config = self.load_config()?;
31        let graph = Graph::<SolData>::resolve(&config.project_paths())?;
32        let opts = TreeOptions { charset: self.charset, no_dedupe: self.no_dedupe };
33        graph.print_with_options(opts);
34
35        Ok(())
36    }
37}