windjammer 0.48.0

A simple language inspired by Go, Ruby, and Elixir that transpiles to Rust - 80% of Rust's power with 20% of the complexity
Documentation
/// Expression-Level Float Type Inference
///
/// GOAL: Infer f32 vs f64 for each float literal based on usage context
///
/// ALGORITHM: Constraint-based unification
/// 1. Collect constraints from expressions (x: f32 + 0.0 → 0.0 must be f32)
/// 2. Propagate constraints through AST (forward and backward)
/// 3. Unify constraints (all uses of a literal must agree)
/// 4. Detect conflicts (f32 * f64 → Windjammer error)
/// 5. Assign final types (each literal gets f32 or f64)
pub mod float_inference;
pub mod int_implicit_casts;
pub mod int_inference;
pub(crate) mod struct_field_registry;

pub use float_inference::{ExprId, FloatInference, FloatType};
pub use int_implicit_casts::{get_cast_suffix, is_safe_implicit_cast, promote_types};
pub use int_inference::{IntInference, IntType};

/// Final segment of a possibly module-qualified generic name (`std::collections::HashMap` → `HashMap`).
pub(crate) fn generic_type_base_name(name: &str) -> &str {
    name.rsplit("::").next().unwrap_or(name)
}