use vize_l0::config::VueVersion;
pub(crate) mod surface;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum LegacyVueVersion {
V0_10,
V0_11,
V1,
V2,
}
impl LegacyVueVersion {
pub const ALL: [LegacyVueVersion; 4] = [Self::V0_10, Self::V0_11, Self::V1, Self::V2];
pub fn as_str(self) -> &'static str {
match self {
Self::V0_10 => "v0.10",
Self::V0_11 => "v0.11",
Self::V1 => "v1",
Self::V2 => "v2",
}
}
pub const fn from_dialect(dialect: VueVersion) -> Option<Self> {
match dialect {
VueVersion::V3 => None,
VueVersion::V2_7 | VueVersion::V2 => Some(Self::V2),
VueVersion::V1 => Some(Self::V1),
VueVersion::V0_11 => Some(Self::V0_11),
VueVersion::V0_10 => Some(Self::V0_10),
}
}
pub const fn capabilities(self) -> LegacyDialectCapabilities {
match self {
Self::V0_10 => super::vue0::V0_10,
Self::V0_11 => super::vue0::V0_11,
Self::V1 => super::vue1::CAPABILITIES,
Self::V2 => super::vue2::CAPABILITIES,
}
}
}
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Hash)]
pub enum DirectiveArgStyle {
Clause,
#[default]
Colon,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
#[non_exhaustive]
pub struct LegacyDialectCapabilities {
pub supports_filters: bool,
pub space_separated_filter_args: bool,
pub v_repeat_syntax: bool,
pub directive_arg_style: DirectiveArgStyle,
pub v_with_directive: bool,
pub v_component_directive: bool,
pub computed_dollar_get_set: bool,
pub attr_value_interpolation: bool,
pub scoped_slot_attrs: bool,
pub raw_html_interpolation: bool,
pub v2_event_sugar: bool,
}
impl LegacyDialectCapabilities {
pub const VUE3: LegacyDialectCapabilities = super::vue3::CAPABILITIES;
pub const fn for_dialect(dialect: VueVersion) -> LegacyDialectCapabilities {
match LegacyVueVersion::from_dialect(dialect) {
None => Self::VUE3,
Some(version) => version.capabilities(),
}
}
#[must_use]
pub const fn for_version(version: VueVersion) -> Self {
Self::for_dialect(version)
}
#[must_use]
pub const fn needs_sugar(self) -> bool {
self.supports_filters || self.scoped_slot_attrs || self.v2_event_sugar
}
}
impl Default for LegacyDialectCapabilities {
fn default() -> Self {
Self::VUE3
}
}
#[cfg(test)]
mod tests;