mod common;
mod mutate;
mod query;
pub(crate) use common::{
collect_source_files, display_path, get_git_file_content, lang_from_str, resolve_target_paths,
symbol_to_json,
};
pub use common::{filter_symbols, parse_kind_filter};
use crate::cli::global::GlobalFlags;
use clap::{Args, Subcommand};
#[derive(Debug, Subcommand)]
pub enum AstCommand {
List(query::ListArgs),
Read(query::ReadArgs),
Rename(mutate::RenameArgs),
Validate(query::ValidateArgs),
Search(query::SearchArgs),
Refs(query::RefsArgs),
Deps(query::DepsArgs),
Map(query::MapArgs),
Replace(mutate::ReplaceArgs),
Impact(query::ImpactArgs),
Diff(query::DiffArgs),
}
#[derive(Debug, Args)]
pub struct AstArgs {
#[command(subcommand)]
pub command: AstCommand,
}
pub fn run(args: AstArgs, global: &GlobalFlags) -> anyhow::Result<u8> {
match args.command {
AstCommand::List(a) => query::run_list(a, global),
AstCommand::Read(a) => query::run_read(a, global),
AstCommand::Rename(a) => mutate::run_rename(a, global),
AstCommand::Validate(a) => query::run_validate(a, global),
AstCommand::Search(a) => query::run_search(a, global),
AstCommand::Refs(a) => query::run_refs(a, global),
AstCommand::Deps(a) => query::run_deps(a, global),
AstCommand::Map(a) => query::run_map(a, global),
AstCommand::Replace(a) => mutate::run_replace(a, global),
AstCommand::Impact(a) => query::run_impact(a, global),
AstCommand::Diff(a) => query::run_diff(a, global),
}
}