@@ -5,8 +5,8 @@ use syn::parse::{Parse, ParseStream, Result};
5
5
use syn:: punctuated:: Punctuated ;
6
6
use syn:: spanned:: Spanned ;
7
7
use syn:: {
8
- braced, parenthesized, parse_macro_input, AttrStyle , Attribute , Block , Error , Expr , Ident ,
9
- ReturnType , Token , Type ,
8
+ braced, parenthesized, parse_macro_input, parse_quote , AttrStyle , Attribute , Block , Error ,
9
+ Expr , Ident , ReturnType , Token , Type ,
10
10
} ;
11
11
12
12
mod kw {
@@ -272,6 +272,40 @@ fn process_modifiers(query: &mut Query) -> QueryModifiers {
272
272
if desc. is_some ( ) {
273
273
panic ! ( "duplicate modifier `desc` for query `{}`" , query. name) ;
274
274
}
275
+ // If there are no doc-comments, give at least some idea of what
276
+ // it does by showing the query description.
277
+ if query. doc_comments . is_empty ( ) {
278
+ use :: syn:: * ;
279
+ let mut list = list. iter ( ) ;
280
+ let format_str: String = match list. next ( ) {
281
+ Some ( & Expr :: Lit ( ExprLit { lit : Lit :: Str ( ref lit_str) , .. } ) ) => {
282
+ lit_str. value ( ) . replace ( "`{}`" , "{}" ) // We add them later anyways for consistency
283
+ }
284
+ _ => panic ! ( "Expected a string literal" ) ,
285
+ } ;
286
+ let mut fmt_fragments = format_str. split ( "{}" ) ;
287
+ let mut doc_string = fmt_fragments. next ( ) . unwrap ( ) . to_string ( ) ;
288
+ list. map ( :: quote:: ToTokens :: to_token_stream) . zip ( fmt_fragments) . for_each (
289
+ |( tts, next_fmt_fragment) | {
290
+ use :: core:: fmt:: Write ;
291
+ write ! (
292
+ & mut doc_string,
293
+ " `{}` {}" ,
294
+ tts. to_string( ) . replace( " . " , "." ) ,
295
+ next_fmt_fragment,
296
+ )
297
+ . unwrap ( ) ;
298
+ } ,
299
+ ) ;
300
+ let doc_string = format ! (
301
+ "[query description - consider adding a doc-comment!] {}" ,
302
+ doc_string
303
+ ) ;
304
+ let comment = parse_quote ! {
305
+ #[ doc = #doc_string]
306
+ } ;
307
+ query. doc_comments . push ( comment) ;
308
+ }
275
309
desc = Some ( ( tcx, list) ) ;
276
310
}
277
311
QueryModifier :: FatalCycle => {
0 commit comments