@@ -59,7 +59,10 @@ use ide_db::{
5959 symbol_index:: { self , FileSymbol } ,
6060 LineIndexDatabase ,
6161} ;
62- use syntax:: SourceFile ;
62+ use syntax:: {
63+ ast:: { self , AstNode , AstToken } ,
64+ SourceFile ,
65+ } ;
6366
6467use crate :: display:: ToNav ;
6568
@@ -504,7 +507,11 @@ impl Analysis {
504507 resolve : bool ,
505508 frange : FileRange ,
506509 ) -> Cancelable < Vec < Assist > > {
507- self . with_db ( |db| Assist :: get ( db, config, resolve, frange) )
510+ self . with_db ( |db| {
511+ let mut acc = Assist :: get ( db, config, resolve, frange) ;
512+ add_ssr_assist ( db, & mut acc, resolve, frange) ;
513+ acc
514+ } )
508515 }
509516
510517 /// Computes the set of diagnostics for the given file.
@@ -579,6 +586,33 @@ impl Analysis {
579586 }
580587}
581588
589+ fn add_ssr_assist (
590+ db : & RootDatabase ,
591+ base : & mut Vec < Assist > ,
592+ resolve : bool ,
593+ frange : FileRange ,
594+ ) -> Option < ( ) > {
595+ let comment = {
596+ let file = db. parse ( frange. file_id ) ;
597+ file. tree ( ) . syntax ( ) . token_at_offset ( frange. range . start ( ) ) . find_map ( ast:: Comment :: cast)
598+ } ?;
599+ let match_finder = ide_ssr:: ssr_from_comment ( db, frange, & comment) . ok ( ) ?;
600+
601+ let mut assist = Assist {
602+ id : AssistId ( "ssr" , AssistKind :: RefactorRewrite ) ,
603+ label : Label :: new ( "Apply SSR" ) ,
604+ group : None ,
605+ target : comment. syntax ( ) . text_range ( ) ,
606+ source_change : None ,
607+ } ;
608+ if resolve {
609+ assist. source_change = Some ( SourceChange :: from_edits ( match_finder. edits ( ) , Vec :: new ( ) ) ) ;
610+ }
611+
612+ base. push ( assist) ;
613+ Some ( ( ) )
614+ }
615+
582616#[ test]
583617fn analysis_is_send ( ) {
584618 fn is_send < T : Send > ( ) { }
0 commit comments