Skip to main content

emmylua_doc_cli/
lib.rs

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}