cairo-language-server 2.20.0

The Cairo Language Server
Documentation
macro_rules! test_transform {
    ($transform:expr, $before:literal, @$after:literal) => {{
        let before = ::indoc::indoc!($before);
        let description = ::std::format!(
            "// transform: {transform}\n{before}",
            transform = stringify!($transform),
            before = before.trim_end(),
        );
        let after = $transform(before);
        ::insta::with_settings!({ description => description }, {
            ::insta::assert_snapshot!(after, @$after);
        });
    }};
}

macro_rules! test_transform_inner {
    ($transform_type:ty, $fixture:expr, $before:literal, @$after:literal, $with_macros:expr, $config:expr) => {{
        let before = ::indoc::indoc!($before);
        let description = ::std::format!(
            "// transform: {transform}\n{before}",
            transform = stringify!($transform),
            before = before.trim_end(),
        );

        let after = crate::support::transform::conduct_transformation::<$transform_type>(&before, $with_macros, $fixture, $config);
        ::insta::with_settings!({ description => description }, {
            ::insta::assert_snapshot!(after, @$after);
        });
    }};
}

macro_rules! define_transform_macro {
    ($name:ident, $with_macros:literal) => {
        macro_rules! $name {
            ($transform_type:ty, $fixture:expr, $before:literal, @$after:literal, $config:expr) => {
                crate::support::insta::test_transform_inner!($transform_type, $fixture, $before, @$after, $with_macros, $config)
            };
            ($transform_type:ty, $fixture:expr, $before:literal, @$after:literal) => {
                $name!($transform_type, $fixture, $before, @$after, None)
            };
            ($transform_type:ty, $before:literal, @$after:literal, $config:expr) => {
                $name!($transform_type, crate::support::fixture::Fixture::new(), $before, @$after, $config)
            };
            ($transform_type:ty, $before:literal, @$after:literal) => {
                $name!($transform_type, crate::support::fixture::Fixture::new(), $before, @$after, None)
            };
        }
    };
}

define_transform_macro!(test_transform_plain, false);
define_transform_macro!(test_transform_with_macros, true);

pub(crate) use test_transform;
pub(crate) use test_transform_inner;
pub(crate) use test_transform_plain;
pub(crate) use test_transform_with_macros;