diff options
| author | Laurenz <laurmaedje@gmail.com> | 2023-02-06 11:52:09 +0100 |
|---|---|---|
| committer | Laurenz <laurmaedje@gmail.com> | 2023-02-06 11:52:09 +0100 |
| commit | ea8edfa821f059921550c45d4f0267160b638a04 (patch) | |
| tree | 940c358e400e55bc1ba47faf7c1fa07611af5241 /macros | |
| parent | 0bb0f1c98fc8eff5d7556bbe9d5801f02237a5c0 (diff) | |
Make Rust happier about the inline documentation
Diffstat (limited to 'macros')
| -rw-r--r-- | macros/src/func.rs | 28 | ||||
| -rw-r--r-- | macros/src/lib.rs | 10 | ||||
| -rw-r--r-- | macros/src/node.rs | 4 |
3 files changed, 6 insertions, 36 deletions
diff --git a/macros/src/func.rs b/macros/src/func.rs index 3253455b..e9768404 100644 --- a/macros/src/func.rs +++ b/macros/src/func.rs @@ -16,16 +16,9 @@ pub fn func(item: syn::Item) -> Result<TokenStream> { let display = display.trim(); let mut docs = docs[first.len()..].to_string(); - let example = example(&mut docs, 2); let (params, returns) = params(&mut docs)?; - let syntax = quote_option(section(&mut docs, "Syntax", 2)); let category = section(&mut docs, "Category", 2).expect("missing category"); - let example = quote_option(example); - let docs = docs.trim(); - if docs.contains("# ") { - bail!(item, "unrecognized heading"); - } let info = quote! { ::typst::model::FuncInfo { @@ -33,8 +26,6 @@ pub fn func(item: syn::Item) -> Result<TokenStream> { display: #display, category: #category, docs: #docs, - example: #example, - syntax: #syntax, params: ::std::vec![#(#params),*], returns: ::std::vec![#(#returns),*] } @@ -108,17 +99,6 @@ pub fn section(docs: &mut String, title: &str, level: usize) -> Option<String> { Some(section) } -/// Parse the example section. -pub fn example(docs: &mut String, level: usize) -> Option<String> { - let section = section(docs, "Example", level)?; - let mut s = unscanny::Scanner::new(§ion); - let count = s.eat_while('`').len(); - let term = "`".repeat(count); - let text = s.eat_until(term.as_str()).trim(); - s.expect(term.as_str()); - Some(text.into()) -} - /// Parse the parameter section. fn params(docs: &mut String) -> Result<(Vec<TokenStream>, Vec<String>)> { let Some(section) = section(docs, "Parameters", 2) else { @@ -151,7 +131,9 @@ fn params(docs: &mut String) -> Result<(Vec<TokenStream>, Vec<String>)> { continue; } - let ty: syn::Type = syn::parse_str(s.eat_until(char::is_whitespace))?; + s.expect('`'); + let ty: syn::Type = syn::parse_str(s.eat_until('`'))?; + s.expect('`'); s.eat_whitespace(); s.expect('('); @@ -176,15 +158,13 @@ fn params(docs: &mut String) -> Result<(Vec<TokenStream>, Vec<String>)> { s.expect(')'); - let mut docs = dedent(s.eat_until("\n-").trim()); - let example = quote_option(example(&mut docs, 3)); + let docs = dedent(s.eat_until("\n-").trim()); let docs = docs.trim(); infos.push(quote! { ::typst::model::ParamInfo { name: #name, docs: #docs, - example: #example, cast: <#ty as ::typst::model::Cast< ::typst::syntax::Spanned<::typst::model::Value> >>::describe(), diff --git a/macros/src/lib.rs b/macros/src/lib.rs index e162745a..cd0f9988 100644 --- a/macros/src/lib.rs +++ b/macros/src/lib.rs @@ -26,7 +26,7 @@ mod symbols; use proc_macro::TokenStream as BoundaryStream; use proc_macro2::{TokenStream, TokenTree}; -use quote::{quote, quote_spanned, ToTokens}; +use quote::{quote, quote_spanned}; use syn::{parse_quote, Ident, Result}; /// Implement `FuncType` for a type or function. @@ -105,11 +105,3 @@ fn dedent(text: &str) -> String { .collect::<Vec<_>>() .join("\n") } - -/// Quote an optional value. -fn quote_option<T: ToTokens>(option: Option<T>) -> TokenStream { - match option { - Some(value) => quote! { Some(#value) }, - None => quote! { None }, - } -} diff --git a/macros/src/node.rs b/macros/src/node.rs index cffac184..b551182f 100644 --- a/macros/src/node.rs +++ b/macros/src/node.rs @@ -336,15 +336,13 @@ fn create_node_properties_func(node: &Node) -> syn::ImplItemMethod { let value_ty = &property.value_ty; let shorthand = matches!(property.shorthand, Some(Shorthand::Positional)); - let mut docs = documentation(&property.attrs); - let example = quote_option(super::func::example(&mut docs, 1)); + let docs = documentation(&property.attrs); let docs = docs.trim(); quote! { ::typst::model::ParamInfo { name: #name, docs: #docs, - example: #example, cast: <#value_ty as ::typst::model::Cast< ::typst::syntax::Spanned<::typst::model::Value> >>::describe(), |
