@@ -2240,29 +2240,40 @@ impl Document {
22402240 & self . code_lenses
22412241 }
22422242
2243- pub fn set_code_lenses ( & mut self , lenses : Vec < lsp:: CodeLens > ) {
2243+ fn map_code_lenses ( & self , lenses : Vec < lsp:: CodeLens > ) -> Vec < CodeLens > {
22442244 let text = self . text ( ) . clone ( ) ;
22452245 let Some ( language_server) = self
22462246 . language_servers_with_feature ( LanguageServerFeature :: CodeLens )
22472247 . next ( )
22482248 else {
2249- return ;
2249+ return Vec :: new ( ) ;
22502250 } ;
22512251 let offset_encoding = language_server. offset_encoding ( ) ;
2252- self . code_lenses = lenses
2252+ lenses
22532253 . into_iter ( )
22542254 . filter_map ( |l| {
2255- if let Some ( char_idx) = lsp_pos_to_pos ( & text, l. range . start , offset_encoding) {
2256- Some ( CodeLens {
2257- line : self . text . char_to_line ( char_idx) ,
2258- char_idx,
2259- lens : l,
2260- } )
2261- } else {
2262- None
2263- }
2255+ lsp_pos_to_pos ( & text, l. range . start , offset_encoding) . map ( |char_idx| CodeLens {
2256+ line : self . text . char_to_line ( char_idx) ,
2257+ char_idx,
2258+ lens : l,
2259+ } )
22642260 } )
2265- . collect ( ) ;
2261+ . collect ( )
2262+ }
2263+
2264+ pub fn set_code_lenses ( & mut self , lenses : Vec < lsp:: CodeLens > ) {
2265+ self . code_lenses = self . map_code_lenses ( lenses) ;
2266+ }
2267+
2268+ pub fn update_code_lenses ( & mut self , lenses : Vec < lsp:: CodeLens > ) {
2269+ for updated_lens in lenses {
2270+ if let Some ( existing_lens) = self . code_lenses . iter_mut ( ) . find ( |existing_lens| {
2271+ existing_lens. lens . range == updated_lens. range
2272+ && existing_lens. lens . data == updated_lens. data
2273+ } ) {
2274+ existing_lens. lens = updated_lens;
2275+ }
2276+ }
22662277 }
22672278
22682279 /// Get the document's auto pairs. If the document has a recognized
0 commit comments