1pub use crate::cmd_args::Format;
2use crate::init::setup_logger;
3pub use clap::Parser;
4pub use cmd_args::*;
5
6mod cmd_args;
7mod common;
8mod init;
9mod json_generator;
10mod markdown_generator;
11
12#[allow(unused)]
13pub fn run_doc_cli(mut cmd_args: CmdArgs) -> Result<(), Box<dyn std::error::Error>> {
14 setup_logger(cmd_args.verbose);
15
16 if !cmd_args.input.is_empty() {
17 log::warn!("`--input` is deprecated, please use `workspace` instead");
18 cmd_args.workspace.append(&mut cmd_args.input);
19 }
20
21 if let Some(format) = cmd_args.format {
22 log::warn!("`--format` is deprecated, please use `--output-format` instead");
23 cmd_args.output_format = format;
24 }
25
26 let cwd = std::env::current_dir()?;
27 let workspaces: Vec<_> = cmd_args
28 .workspace
29 .into_iter()
30 .map(|workspace| {
31 if workspace.is_absolute() {
32 workspace
33 } else {
34 cwd.join(workspace)
35 }
36 })
37 .collect();
38 let main_path = workspaces
39 .first()
40 .ok_or("Failed to load workspace")?
41 .clone();
42
43 let analysis = match init::load_workspace(
44 main_path.clone(),
45 workspaces.clone(),
46 cmd_args.config,
47 cmd_args.exclude_pattern,
48 cmd_args.include_pattern,
49 ) {
50 Some(analysis) => analysis,
51 None => {
52 return Err("Failed to load workspace".into());
53 }
54 };
55
56 match cmd_args.output_format {
57 Format::Markdown => markdown_generator::generate_markdown(
58 &analysis,
59 cmd_args.output,
60 cmd_args.override_template,
61 cmd_args.site_name,
62 cmd_args.mixin,
63 ),
64 Format::Json => json_generator::generate_json(&analysis, cmd_args.output),
65 }
66}