inline_doc/
lib.rs

1use std::fs::read_to_string;
2
3use quote::quote;
4use syn::{parse_macro_input, LitStr};
5
6#[proc_macro_attribute]
7pub fn inline_doc(
8    attr: proc_macro::TokenStream,
9    input: proc_macro::TokenStream,
10) -> proc_macro::TokenStream {
11    let input: proc_macro2::TokenStream = input.into();
12
13    let path = parse_macro_input!(attr as LitStr);
14    let path = path.value();
15
16    let md = read_to_string(&path).unwrap_or_else(|_| panic!("Could not find {path:?}"));
17    let md = format!("\n\n{}\n\n\n", md.trim());
18
19    quote! {
20        #[doc = #md]
21        #input
22    }
23    .into()
24}