@@ -287,7 +287,11 @@ fn test_get_command_delete_sign() {}
287
287
288
288
use diff;
289
289
290
- pub fn get_command_update_signs ( signs_prev : & [ Sign ] , signs : & [ Sign ] , filename : & str ) -> String {
290
+ pub fn get_command_update_signs ( signs_prev : & [ Sign ] , signs : & [ Sign ] , filename : & str ) -> ( Vec < Sign > , String ) {
291
+ // Sign id might become different due to lines shifting. Use sign's existing sign id to
292
+ // track same sign.
293
+ let mut signs_next = vec ! [ ] ;
294
+
291
295
let mut cmd = "echo" . to_owned ( ) ;
292
296
for comp in diff:: slice ( signs_prev, signs) {
293
297
match comp {
@@ -296,16 +300,28 @@ pub fn get_command_update_signs(signs_prev: &[Sign], signs: &[Sign], filename: &
296
300
}
297
301
diff:: Result :: Right ( sign) => {
298
302
cmd += & get_command_add_sign ( sign, filename) ;
303
+ signs_next. push ( sign. clone ( ) ) ;
304
+ }
305
+ diff:: Result :: Both ( sign, _) => {
306
+ signs_next. push ( sign. clone ( ) ) ;
299
307
}
300
- diff:: Result :: Both ( _, _) => ( ) ,
301
308
}
302
309
}
303
310
304
- cmd
311
+ ( signs_next , cmd)
305
312
}
306
313
307
314
#[ test]
308
- fn test_get_command_update_signs ( ) { }
315
+ fn test_get_command_update_signs ( ) {
316
+ let signs_prev = vec ! [ Sign :: new( 1 , "abcde" . to_string( ) , DiagnosticSeverity :: Error ) ] ;
317
+ let signs = vec ! [ Sign :: new( 3 , "abcde" . to_string( ) , DiagnosticSeverity :: Error ) ] ;
318
+ let ( signs_next, cmd) = get_command_update_signs ( & signs_prev, & signs, "f" ) ;
319
+ assert_eq ! (
320
+ serde_json:: to_string( & signs_next) . unwrap( ) ,
321
+ "[{\" id\" :75000,\" line\" :1,\" text\" :\" abcde\" ,\" severity\" :1}]"
322
+ ) ;
323
+ assert_eq ! ( cmd, "echo" ) ;
324
+ }
309
325
310
326
pub trait Merge {
311
327
fn merge ( & mut self , other : Self ) -> ( ) ;
0 commit comments