use diffy::PatchFormatter;
use mago_allocator::Arena;
use mago_codex::ttype::TType;
use mago_codex::ttype::union::TUnion;
use crate::context::Context;
pub mod availability;
pub mod casing;
pub mod conditional;
pub mod docblock;
pub mod experimental;
pub mod expression;
pub mod misc;
pub mod missing_type_hints;
pub mod names;
pub mod php_emulation;
pub mod symbol_existence;
pub mod template;
pub fn get_type_diff<A>(context: &Context<'_, '_, A>, container: &TUnion, input: &TUnion) -> Option<String>
where
A: Arena,
{
if !container.is_complex() || !input.is_complex() {
return None;
}
let mut formatter = PatchFormatter::new().missing_newline_message(false).suppress_blank_empty(false);
if context.settings.use_colors {
formatter = formatter.with_color();
}
let container_id = container.get_pretty_id().to_string();
let input_id = input.get_pretty_id().to_string();
let patch = diffy::create_patch(&container_id, &input_id);
let diff = formatter.fmt_patch(&patch);
Some(format!("{diff}"))
}