use std::io::Write;
use std::path::PathBuf;
use anyhow::Result;
use clap::Args;
use crate::cli::GlobalArgs;
use crate::cli_args::BackupOpts;
use crate::config::DefaultsSection;
use crate::error::AtomwriteError;
use crate::output::NdjsonWriter;
use crate::signal::ShutdownSignal;
#[derive(Args, Debug)]
pub struct ScopeArgs {
#[arg(default_value = ".")]
pub paths: Vec<PathBuf>,
#[arg(short = 'l', long = "language", alias = "lang", required = true)]
pub language: String,
#[arg(long)]
pub query: Option<String>,
#[arg(long)]
pub pattern: Option<String>,
#[arg(long)]
pub delete: bool,
#[arg(long, value_enum)]
pub action: Option<ScopeAction>,
#[arg(long)]
pub replace_with: Option<String>,
#[arg(short = 'g', long, action = clap::ArgAction::Append)]
pub include: Vec<String>,
#[arg(long, action = clap::ArgAction::Append)]
pub exclude: Vec<String>,
#[arg(long)]
pub dry_run: bool,
#[command(flatten)]
pub backup_opts: BackupOpts,
}
#[derive(Debug, Clone, Copy, clap::ValueEnum)]
pub enum ScopeAction {
Upper,
Lower,
Titlecase,
Squeeze,
Symbols,
Normalize,
}
pub fn cmd_scope(
_args: &ScopeArgs,
_global: &GlobalArgs,
_writer: &mut NdjsonWriter<impl Write>,
_shutdown: &ShutdownSignal,
_defaults: &DefaultsSection,
) -> Result<()> {
Err(AtomwriteError::ConfigInvalid {
reason: "scope requires --features ast (included in default features)".into(),
}
.into())
}