@@ -34,38 +34,39 @@ pub(crate) fn generate_derive(acc: &mut Assists, ctx: &AssistContext<'_>) -> Opt
34
34
. map ( |( _name, arg) | arg)
35
35
. next ( ) ;
36
36
37
- let ( derive, delimiter) = match & derive_attr {
38
- None => {
39
- let derive = make:: attr_outer ( make:: meta_token_tree (
40
- make:: ext:: ident_path ( "derive" ) ,
41
- make:: token_tree ( T ! [ '(' ] , vec ! [ ] ) . clone_for_update ( ) ,
42
- ) )
43
- . clone_for_update ( ) ;
44
- let delimiter = derive. meta ( ) ?. token_tree ( ) ?. r_paren_token ( ) ?;
45
- ( derive, delimiter)
46
- }
47
- Some ( tt) => {
48
- // Create an outer attribute just so that we avoid using
49
- // unwrap in edit closure.
50
- let _derive = make:: attr_outer ( make:: meta_token_tree (
51
- make:: ext:: ident_path ( "derive" ) ,
52
- make:: token_tree ( T ! [ '(' ] , vec ! [ ] ) ,
53
- ) ) ;
54
- ( _derive, tt. right_delimiter_token ( ) ?)
55
- }
37
+ let delimiter = match & derive_attr {
38
+ None => None ,
39
+ Some ( tt) => Some ( tt. right_delimiter_token ( ) ?) ,
56
40
} ;
57
41
58
42
acc. add ( AssistId ( "generate_derive" , AssistKind :: Generate ) , "Add `#[derive]`" , target, |edit| {
59
43
match derive_attr {
60
44
None => {
45
+ let derive = make:: attr_outer ( make:: meta_token_tree (
46
+ make:: ext:: ident_path ( "derive" ) ,
47
+ make:: token_tree ( T ! [ '(' ] , vec ! [ ] ) . clone_for_update ( ) ,
48
+ ) )
49
+ . clone_for_update ( ) ;
50
+
61
51
let nominal = edit. make_mut ( nominal) ;
62
52
nominal. add_attr ( derive. clone ( ) ) ;
63
53
54
+ let delimiter = derive
55
+ . meta ( )
56
+ . expect ( "make::attr_outer was expected to have Meta" )
57
+ . token_tree ( )
58
+ . expect ( "failed to get token tree out of Meta" )
59
+ . r_paren_token ( )
60
+ . expect ( "make::attr_outer was expected to have a R_PAREN" ) ;
61
+
64
62
edit. add_tabstop_before_token ( cap, delimiter) ;
65
63
}
66
64
Some ( _) => {
67
65
// Just move the cursor.
68
- edit. add_tabstop_before_token ( cap, delimiter) ;
66
+ edit. add_tabstop_before_token (
67
+ cap,
68
+ delimiter. expect ( "Right delim token could not be found." ) ,
69
+ ) ;
69
70
}
70
71
} ;
71
72
} )
0 commit comments