use clap::Parser;
use std::{env, path::PathBuf};
fn default_name() -> String {
env::current_dir()
.ok()
.and_then(|cwd| cwd.file_name().map(|n| n.to_owned()))
.and_then(|n| n.to_str().map(|s| s.to_string()))
.unwrap_or_else(|| "default".to_string())
}
fn default_target() -> PathBuf {
let mut path = env::current_dir().unwrap_or_else(|_| PathBuf::from("."));
path.push("docs");
path
}
#[derive(Parser, Debug, Clone)]
#[command(
version,
about = "Documentation generator for WGSL shaders",
long_about = "wgsldoc is a documentation generator for WGSL (WebGPU Shading Language) shader modules. It parses .wgsl files, extracts documentation comments, and generates a structured, searchable HTML site for easy browsing and reference."
)]
pub struct Args {
#[arg(short = 'N', long, default_value_t = default_name())]
pub name: String,
#[arg(short = 'D', long, default_value_os_t = default_target())]
pub target_dir: PathBuf,
#[arg(short = 'U', long)]
pub base_url: Option<String>,
#[arg(short = 'A', long)]
pub ast_only: bool,
#[arg(short = 'I', long = "input")]
pub files: Vec<PathBuf>,
#[arg(short = 'W', long)]
pub show_undocumented: bool,
#[arg(short = 'C', long)]
pub credits: bool,
}