pub mod clean;
pub mod database;
pub mod index;
pub mod init;
pub mod load;
#[cfg(feature = "lsp")]
pub mod lsp;
pub mod r#match;
pub mod parse;
pub mod query;
pub mod status;
pub mod test;
pub mod util;
pub mod visualize;
pub mod path_loading {
use std::path::PathBuf;
use clap::Subcommand;
use crate::cli::clean::CleanArgs;
use crate::cli::database::DatabaseArgs;
use crate::cli::index::IndexArgs;
use crate::cli::init::InitArgs;
use crate::cli::load::PathLoaderArgs;
#[cfg(feature = "lsp")]
use crate::cli::lsp::LspArgs;
use crate::cli::parse::ParseArgs;
use crate::cli::query::QueryArgs;
use crate::cli::r#match::MatchArgs;
use crate::cli::status::StatusArgs;
use crate::cli::test::TestArgs;
use crate::cli::visualize::VisualizeArgs;
#[derive(Subcommand)]
pub enum Subcommands {
Clean(Clean),
Index(Index),
Init(Init),
#[cfg(feature = "lsp")]
Lsp(Lsp),
Match(Match),
Parse(Parse),
Query(Query),
Status(Status),
Test(Test),
Visualize(Visualize),
}
impl Subcommands {
pub fn run(self, default_db_path: PathBuf) -> anyhow::Result<()> {
match self {
Self::Clean(cmd) => cmd.run(default_db_path),
Self::Index(cmd) => cmd.run(default_db_path),
Self::Init(cmd) => cmd.run(),
#[cfg(feature = "lsp")]
Self::Lsp(cmd) => cmd.run(default_db_path),
Self::Match(cmd) => cmd.run(),
Self::Parse(cmd) => cmd.run(),
Self::Query(cmd) => cmd.run(default_db_path),
Self::Status(cmd) => cmd.run(default_db_path),
Self::Test(cmd) => cmd.run(),
Self::Visualize(cmd) => cmd.run(default_db_path),
}
}
}
#[derive(clap::Parser)]
pub struct Clean {
#[clap(flatten)]
db_args: DatabaseArgs,
#[clap(flatten)]
clean_args: CleanArgs,
}
impl Clean {
pub fn run(self, default_db_path: PathBuf) -> anyhow::Result<()> {
let db_path = self.db_args.get_or(default_db_path);
self.clean_args.run(&db_path)
}
}
#[derive(clap::Parser)]
pub struct Index {
#[clap(flatten)]
load_args: PathLoaderArgs,
#[clap(flatten)]
db_args: DatabaseArgs,
#[clap(flatten)]
index_args: IndexArgs,
}
impl Index {
pub fn run(self, default_db_path: PathBuf) -> anyhow::Result<()> {
let loader = self.load_args.get()?;
let db_path = self.db_args.get_or(default_db_path);
self.index_args.run(&db_path, loader)
}
}
#[derive(clap::Parser)]
pub struct Init {
#[clap(flatten)]
init_args: InitArgs,
}
impl Init {
pub fn run(self) -> anyhow::Result<()> {
self.init_args.run()
}
}
#[cfg(feature = "lsp")]
#[derive(clap::Parser)]
pub struct Lsp {
#[clap(flatten)]
load_args: PathLoaderArgs,
#[clap(flatten)]
db_args: DatabaseArgs,
#[clap(flatten)]
lsp_args: LspArgs,
}
#[cfg(feature = "lsp")]
impl Lsp {
pub fn run(self, default_db_path: PathBuf) -> anyhow::Result<()> {
let loader = self.load_args.get()?;
let db_path = self.db_args.get_or(default_db_path);
self.lsp_args.run(db_path, loader)
}
}
#[derive(clap::Parser)]
pub struct Match {
#[clap(flatten)]
load_args: PathLoaderArgs,
#[clap(flatten)]
match_args: MatchArgs,
}
impl Match {
pub fn run(self) -> anyhow::Result<()> {
let loader = self.load_args.get()?;
self.match_args.run(loader)
}
}
#[derive(clap::Parser)]
pub struct Parse {
#[clap(flatten)]
load_args: PathLoaderArgs,
#[clap(flatten)]
parse_args: ParseArgs,
}
impl Parse {
pub fn run(self) -> anyhow::Result<()> {
let loader = self.load_args.get()?;
self.parse_args.run(loader)
}
}
#[derive(clap::Parser)]
pub struct Query {
#[clap(flatten)]
db_args: DatabaseArgs,
#[clap(flatten)]
query_args: QueryArgs,
}
impl Query {
pub fn run(self, default_db_path: PathBuf) -> anyhow::Result<()> {
let db_path = self.db_args.get_or(default_db_path);
self.query_args.run(&db_path)
}
}
#[derive(clap::Parser)]
pub struct Status {
#[clap(flatten)]
db_args: DatabaseArgs,
#[clap(flatten)]
status_args: StatusArgs,
}
impl Status {
pub fn run(self, default_db_path: PathBuf) -> anyhow::Result<()> {
let db_path = self.db_args.get_or(default_db_path);
self.status_args.run(&db_path)
}
}
#[derive(clap::Parser)]
pub struct Test {
#[clap(flatten)]
load_args: PathLoaderArgs,
#[clap(flatten)]
test_args: TestArgs,
}
impl Test {
pub fn run(self) -> anyhow::Result<()> {
let loader = self.load_args.get()?;
self.test_args.run(loader)
}
}
#[derive(clap::Parser)]
pub struct Visualize {
#[clap(flatten)]
db_args: DatabaseArgs,
#[clap(flatten)]
visualize_args: VisualizeArgs,
}
impl Visualize {
pub fn run(self, default_db_path: PathBuf) -> anyhow::Result<()> {
let db_path = self.db_args.get_or(default_db_path);
self.visualize_args.run(&db_path)
}
}
}
pub mod provided_languages {
use std::path::PathBuf;
use clap::Subcommand;
use crate::cli::clean::CleanArgs;
use crate::cli::database::DatabaseArgs;
use crate::cli::index::IndexArgs;
use crate::cli::init::InitArgs;
use crate::cli::load::LanguageConfigurationsLoaderArgs;
#[cfg(feature = "lsp")]
use crate::cli::lsp::LspArgs;
use crate::cli::parse::ParseArgs;
use crate::cli::query::QueryArgs;
use crate::cli::r#match::MatchArgs;
use crate::cli::status::StatusArgs;
use crate::cli::test::TestArgs;
use crate::cli::visualize::VisualizeArgs;
use crate::loader::LanguageConfiguration;
#[derive(Subcommand)]
pub enum Subcommands {
Clean(Clean),
Index(Index),
Init(Init),
#[cfg(feature = "lsp")]
Lsp(Lsp),
Match(Match),
Parse(Parse),
Query(Query),
Status(Status),
Test(Test),
Visualize(Visualize),
}
impl Subcommands {
pub fn run(
self,
default_db_path: PathBuf,
configurations: Vec<LanguageConfiguration>,
) -> anyhow::Result<()> {
match self {
Self::Clean(cmd) => cmd.run(default_db_path),
Self::Index(cmd) => cmd.run(default_db_path, configurations),
Self::Init(cmd) => cmd.run(),
#[cfg(feature = "lsp")]
Self::Lsp(cmd) => cmd.run(default_db_path, configurations),
Self::Match(cmd) => cmd.run(configurations),
Self::Parse(cmd) => cmd.run(configurations),
Self::Query(cmd) => cmd.run(default_db_path),
Self::Status(cmd) => cmd.run(default_db_path),
Self::Test(cmd) => cmd.run(configurations),
Self::Visualize(cmd) => cmd.run(default_db_path),
}
}
}
#[derive(clap::Parser)]
pub struct Clean {
#[clap(flatten)]
db_args: DatabaseArgs,
#[clap(flatten)]
clean_args: CleanArgs,
}
impl Clean {
pub fn run(self, default_db_path: PathBuf) -> anyhow::Result<()> {
let db_path = self.db_args.get_or(default_db_path);
self.clean_args.run(&db_path)
}
}
#[derive(clap::Parser)]
pub struct Index {
#[clap(flatten)]
load_args: LanguageConfigurationsLoaderArgs,
#[clap(flatten)]
db_args: DatabaseArgs,
#[clap(flatten)]
index_args: IndexArgs,
}
impl Index {
pub fn run(
self,
default_db_path: PathBuf,
configurations: Vec<LanguageConfiguration>,
) -> anyhow::Result<()> {
let loader = self.load_args.get(configurations)?;
let db_path = self.db_args.get_or(default_db_path);
self.index_args.run(&db_path, loader)
}
}
#[derive(clap::Parser)]
pub struct Init {
#[clap(flatten)]
init_args: InitArgs,
}
impl Init {
pub fn run(self) -> anyhow::Result<()> {
self.init_args.run()
}
}
#[cfg(feature = "lsp")]
#[derive(clap::Parser)]
pub struct Lsp {
#[clap(flatten)]
load_args: LanguageConfigurationsLoaderArgs,
#[clap(flatten)]
db_args: DatabaseArgs,
#[clap(flatten)]
lsp_args: LspArgs,
}
#[cfg(feature = "lsp")]
impl Lsp {
pub fn run(
self,
default_db_path: PathBuf,
configurations: Vec<LanguageConfiguration>,
) -> anyhow::Result<()> {
let loader = self.load_args.get(configurations)?;
let db_path = self.db_args.get_or(default_db_path);
self.lsp_args.run(db_path, loader)
}
}
#[derive(clap::Parser)]
pub struct Match {
#[clap(flatten)]
load_args: LanguageConfigurationsLoaderArgs,
#[clap(flatten)]
match_args: MatchArgs,
}
impl Match {
pub fn run(self, configurations: Vec<LanguageConfiguration>) -> anyhow::Result<()> {
let loader = self.load_args.get(configurations)?;
self.match_args.run(loader)
}
}
#[derive(clap::Parser)]
pub struct Parse {
#[clap(flatten)]
load_args: LanguageConfigurationsLoaderArgs,
#[clap(flatten)]
parse_args: ParseArgs,
}
impl Parse {
pub fn run(self, configurations: Vec<LanguageConfiguration>) -> anyhow::Result<()> {
let loader = self.load_args.get(configurations)?;
self.parse_args.run(loader)
}
}
#[derive(clap::Parser)]
pub struct Query {
#[clap(flatten)]
db_args: DatabaseArgs,
#[clap(flatten)]
query_args: QueryArgs,
}
impl Query {
pub fn run(self, default_db_path: PathBuf) -> anyhow::Result<()> {
let db_path = self.db_args.get_or(default_db_path);
self.query_args.run(&db_path)
}
}
#[derive(clap::Parser)]
pub struct Status {
#[clap(flatten)]
db_args: DatabaseArgs,
#[clap(flatten)]
status_args: StatusArgs,
}
impl Status {
pub fn run(self, default_db_path: PathBuf) -> anyhow::Result<()> {
let db_path = self.db_args.get_or(default_db_path);
self.status_args.run(&db_path)
}
}
#[derive(clap::Parser)]
pub struct Test {
#[clap(flatten)]
load_args: LanguageConfigurationsLoaderArgs,
#[clap(flatten)]
test_args: TestArgs,
}
impl Test {
pub fn run(self, configurations: Vec<LanguageConfiguration>) -> anyhow::Result<()> {
let loader = self.load_args.get(configurations)?;
self.test_args.run(loader)
}
}
#[derive(clap::Parser)]
pub struct Visualize {
#[clap(flatten)]
db_args: DatabaseArgs,
#[clap(flatten)]
visualize_args: VisualizeArgs,
}
impl Visualize {
pub fn run(self, default_db_path: PathBuf) -> anyhow::Result<()> {
let db_path = self.db_args.get_or(default_db_path);
self.visualize_args.run(&db_path)
}
}
}