plotnik-cli 0.1.0

CLI for plotnik - typed query language for tree-sitter AST
mod cli;
mod commands;

use cli::{Cli, Command};
use commands::debug::DebugArgs;
use commands::exec::ExecArgs;
use commands::types::TypesArgs;

fn main() {
    let cli = <Cli as clap::Parser>::parse();

    match cli.command {
        Command::Debug {
            query,
            source,
            lang,
            output,
        } => {
            commands::debug::run(DebugArgs {
                query_text: query.query_text,
                query_file: query.query_file,
                source_text: source.source_text,
                source_file: source.source_file,
                lang,
                symbols: output.symbols,
                raw: output.raw,
                cst: output.cst,
                spans: output.spans,
                cardinalities: output.cardinalities,
                graph: output.graph,
                graph_raw: output.graph_raw,
                types: output.types,
                color: output.color.should_colorize(),
            });
        }
        Command::Docs { topic } => {
            commands::docs::run(topic.as_deref());
        }
        Command::Langs => {
            commands::langs::run();
        }
        Command::Exec {
            query,
            source,
            lang,
            output,
        } => {
            commands::exec::run(ExecArgs {
                query_text: query.query_text,
                query_file: query.query_file,
                source_text: source.source_text,
                source_file: source.source_file,
                lang,
                entry: output.entry,
                pretty: output.pretty,
                verbose_nodes: output.verbose_nodes,
                check: output.check,
            });
        }
        Command::Types {
            query,
            lang,
            output,
        } => {
            commands::types::run(TypesArgs {
                query_text: query.query_text,
                query_file: query.query_file,
                lang,
                format: output.format,
                root_type: output.root_type,
                verbose_nodes: output.verbose_nodes,
                no_node_type: output.no_node_type,
                export: !output.no_export,
                output: output.output,
            });
        }
    }
}