use std::path::Path;
use ast_grep_core::{Doc, NodeMatch};
use serde::{Deserialize, Serialize};
use strum::Display;
use super::RawEdit;
mod derive_clone;
mod match_arms;
mod reexport;
mod strum_str;
mod syntax;
#[derive(Debug, Display, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
#[strum(serialize_all = "snake_case")]
pub enum FixerKind {
StrumEnumStr,
MergeMatchArms,
ExplicitReexport,
DeriveClone,
}
pub(super) struct FixEnv<'a> {
pub path: Option<&'a Path>,
pub strum_crate: Option<&'a str>,
}
pub(super) fn fix<D: Doc>(
kind: FixerKind,
node_match: &NodeMatch<'_, D>,
env: &FixEnv<'_>,
) -> Option<Vec<RawEdit>> {
let node = node_match.get_node();
match kind {
FixerKind::StrumEnumStr => strum_str::fix(node, env),
FixerKind::MergeMatchArms => match_arms::fix(node),
FixerKind::ExplicitReexport => reexport::fix(node, env),
FixerKind::DeriveClone => derive_clone::fix(node),
}
}
#[cfg(test)]
mod tests;