Make define_rule_mapping! set rule code as doc comment of variants

Since the UI still relies on the rule codes this improves the developer
experience by letting developers view the code of a Rule enum variant by
hovering over it.
This commit is contained in:
Martin Fischer 2023-01-19 07:25:25 +01:00 committed by Charlie Marsh
parent 6649225167
commit 26901a78c9
1 changed files with 5 additions and 2 deletions

View File

@ -19,14 +19,17 @@ pub fn define_rule_mapping(mapping: &Mapping) -> proc_macro2::TokenStream {
let mut from_impls_for_diagkind = quote!(); let mut from_impls_for_diagkind = quote!();
for (code, path, name) in &mapping.entries { for (code, path, name) in &mapping.entries {
rule_variants.extend(quote! {#name,}); let code_str = LitStr::new(&code.to_string(), Span::call_site());
rule_variants.extend(quote! {
#[doc = #code_str]
#name,
});
diagkind_variants.extend(quote! {#name(#path),}); diagkind_variants.extend(quote! {#name(#path),});
rule_kind_match_arms.extend( rule_kind_match_arms.extend(
quote! {Self::#name => DiagnosticKind::#name(<#path as Violation>::placeholder()),}, quote! {Self::#name => DiagnosticKind::#name(<#path as Violation>::placeholder()),},
); );
let origin = get_origin(code); let origin = get_origin(code);
rule_origin_match_arms.extend(quote! {Self::#name => RuleOrigin::#origin,}); rule_origin_match_arms.extend(quote! {Self::#name => RuleOrigin::#origin,});
let code_str = LitStr::new(&code.to_string(), Span::call_site());
rule_code_match_arms.extend(quote! {Self::#name => #code_str,}); rule_code_match_arms.extend(quote! {Self::#name => #code_str,});
rule_from_code_match_arms.extend(quote! {#code_str => Ok(&Rule::#name), }); rule_from_code_match_arms.extend(quote! {#code_str => Ok(&Rule::#name), });
diagkind_code_match_arms.extend(quote! {Self::#name(..) => &Rule::#name, }); diagkind_code_match_arms.extend(quote! {Self::#name(..) => &Rule::#name, });