@@ -2244,29 +2244,40 @@ impl Document {
22442244 & self . code_lenses
22452245 }
22462246
2247- pub fn set_code_lenses ( & mut self , lenses : Vec < lsp:: CodeLens > ) {
2247+ fn map_code_lenses ( & self , lenses : Vec < lsp:: CodeLens > ) -> Vec < CodeLens > {
22482248 let text = self . text ( ) . clone ( ) ;
22492249 let Some ( language_server) = self
22502250 . language_servers_with_feature ( LanguageServerFeature :: CodeLens )
22512251 . next ( )
22522252 else {
2253- return ;
2253+ return Vec :: new ( ) ;
22542254 } ;
22552255 let offset_encoding = language_server. offset_encoding ( ) ;
2256- self . code_lenses = lenses
2256+ lenses
22572257 . into_iter ( )
22582258 . filter_map ( |l| {
2259- if let Some ( char_idx) = lsp_pos_to_pos ( & text, l. range . start , offset_encoding) {
2260- Some ( CodeLens {
2261- line : self . text . char_to_line ( char_idx) ,
2262- char_idx,
2263- lens : l,
2264- } )
2265- } else {
2266- None
2267- }
2259+ lsp_pos_to_pos ( & text, l. range . start , offset_encoding) . map ( |char_idx| CodeLens {
2260+ line : self . text . char_to_line ( char_idx) ,
2261+ char_idx,
2262+ lens : l,
2263+ } )
22682264 } )
2269- . collect ( ) ;
2265+ . collect ( )
2266+ }
2267+
2268+ pub fn set_code_lenses ( & mut self , lenses : Vec < lsp:: CodeLens > ) {
2269+ self . code_lenses = self . map_code_lenses ( lenses) ;
2270+ }
2271+
2272+ pub fn update_code_lenses ( & mut self , lenses : Vec < lsp:: CodeLens > ) {
2273+ for updated_lens in lenses {
2274+ if let Some ( existing_lens) = self . code_lenses . iter_mut ( ) . find ( |existing_lens| {
2275+ existing_lens. lens . range == updated_lens. range
2276+ && existing_lens. lens . data == updated_lens. data
2277+ } ) {
2278+ existing_lens. lens = updated_lens;
2279+ }
2280+ }
22702281 }
22712282
22722283 /// Get the document's auto pairs. If the document has a recognized
0 commit comments