mago_cli/
lib.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
use std::process::exit;

use clap::Parser;
use tokio::runtime::Builder;

use mago_feedback::initialize_logger;
use mago_feedback::LevelFilter;
use mago_service::config::Configuration;

use crate::commands::MagoCommand;
use crate::utils::bail;

pub mod commands;
pub mod utils;

pub fn run() -> ! {
    // Set up the logger.
    initialize_logger(if cfg!(debug_assertions) { LevelFilter::DEBUG } else { LevelFilter::INFO }, "MAGO_LOG");

    // Load the configuration.
    let configuration = Configuration::load().unwrap_or_else(bail);

    // Create the runtime.

    let runtime = if configuration.threads <= 1 {
        Builder::new_current_thread().enable_all().build().unwrap_or_else(bail)
    } else {
        Builder::new_multi_thread()
            .worker_threads(configuration.threads)
            .thread_stack_size(configuration.stack_size)
            .enable_all()
            .build()
            .unwrap_or_else(bail)
    };

    let code = match MagoCommand::parse() {
        MagoCommand::Lint(cmd) => runtime.block_on(commands::lint::execute(cmd, configuration)),
        MagoCommand::Fix(cmd) => runtime.block_on(commands::fix::execute(cmd, configuration)),
        MagoCommand::Format(cmd) => runtime.block_on(commands::format::execute(cmd, configuration)),
        MagoCommand::Ast(cmd) => runtime.block_on(commands::ast::execute(cmd)),
    };

    exit(code)
}