Есть ли способ проверить макросы на ржавчину? - PullRequest
1 голос
/ 12 апреля 2020

Я пытаюсь начать с TDD в Rust, и мне нужно написать макрос, который возвращает количество вариантов в перечислении. Моя реализация похожа на эту :

extern crate proc_macro;
extern crate syn;
#[macro_use]
extern crate quote;

use proc_macro::TokenStream;

#[proc_macro_derive(EnumVariantCount)]
pub fn derive_enum_variant_count(input: TokenStream) -> TokenStream {
    let syn_item: syn::DeriveInput = syn::parse(input).unwrap();
    let len = match syn_item.data {
        syn::Data::Enum(enum_item) => enum_item.variants.len(),
        _ => panic!("EnumVariantCount only works on Enums"),
    };
    let expanded = quote! {
    const LENGTH: usize = #len;
        };
    expanded.into()
}

Итак, сначала я хочу написать тест, чтобы проверить, работает ли этот макрос только для перечисления. Как это вообще сработает? Можно ли как-то проверить, компилируется ли файл в модульном тесте? Есть ли документация по тестированию макросов ржавчины, которую я пропустил?

1 Ответ

1 голос
/ 12 апреля 2020

Ящик trybuild был создан специально для этого: он компилирует тестовый файл и затем проверяет наличие ожидаемых ошибок во время компиляции.

...