@@ -325,10 +325,13 @@ pub enum SymbolNavigationKind {
325
325
Extab ,
326
326
}
327
327
328
+ #[ derive( Debug , Clone , Eq , PartialEq ) ]
328
329
pub enum HoverItemColor {
329
330
Normal , // Gray
330
331
Emphasized , // White
331
332
Special , // Blue
333
+ Delete , // Red
334
+ Insert , // Green
332
335
}
333
336
334
337
pub enum HoverItem {
@@ -355,7 +358,12 @@ pub fn symbol_context(obj: &Object, symbol_index: usize) -> Vec<ContextItem> {
355
358
out
356
359
}
357
360
358
- pub fn symbol_hover ( obj : & Object , symbol_index : usize , addend : i64 ) -> Vec < HoverItem > {
361
+ pub fn symbol_hover (
362
+ obj : & Object ,
363
+ symbol_index : usize ,
364
+ addend : i64 ,
365
+ color : HoverItemColor ,
366
+ ) -> Vec < HoverItem > {
359
367
let symbol = & obj. symbols [ symbol_index] ;
360
368
let addend_str = match addend. cmp ( & 0i64 ) {
361
369
Ordering :: Greater => format ! ( "+{:x}" , addend) ,
@@ -366,44 +374,44 @@ pub fn symbol_hover(obj: &Object, symbol_index: usize, addend: i64) -> Vec<Hover
366
374
out. push ( HoverItem :: Text {
367
375
label : "Name" . into ( ) ,
368
376
value : format ! ( "{}{}" , symbol. name, addend_str) ,
369
- color : HoverItemColor :: Normal ,
377
+ color : color . clone ( ) ,
370
378
} ) ;
371
379
if let Some ( demangled_name) = & symbol. demangled_name {
372
380
out. push ( HoverItem :: Text {
373
381
label : "Demangled" . into ( ) ,
374
382
value : demangled_name. into ( ) ,
375
- color : HoverItemColor :: Normal ,
383
+ color : color . clone ( ) ,
376
384
} ) ;
377
385
}
378
386
if let Some ( section) = symbol. section {
379
387
out. push ( HoverItem :: Text {
380
388
label : "Section" . into ( ) ,
381
389
value : obj. sections [ section] . name . clone ( ) ,
382
- color : HoverItemColor :: Normal ,
390
+ color : color . clone ( ) ,
383
391
} ) ;
384
392
out. push ( HoverItem :: Text {
385
393
label : "Address" . into ( ) ,
386
394
value : format ! ( "{:x}{}" , symbol. address, addend_str) ,
387
- color : HoverItemColor :: Normal ,
395
+ color : color . clone ( ) ,
388
396
} ) ;
389
397
if symbol. flags . contains ( SymbolFlag :: SizeInferred ) {
390
398
out. push ( HoverItem :: Text {
391
399
label : "Size" . into ( ) ,
392
400
value : format ! ( "{:x} (inferred)" , symbol. size) ,
393
- color : HoverItemColor :: Normal ,
401
+ color : color . clone ( ) ,
394
402
} ) ;
395
403
} else {
396
404
out. push ( HoverItem :: Text {
397
405
label : "Size" . into ( ) ,
398
406
value : format ! ( "{:x}" , symbol. size) ,
399
- color : HoverItemColor :: Normal ,
407
+ color : color . clone ( ) ,
400
408
} ) ;
401
409
}
402
410
if let Some ( align) = symbol. align {
403
411
out. push ( HoverItem :: Text {
404
412
label : "Alignment" . into ( ) ,
405
413
value : align. get ( ) . to_string ( ) ,
406
- color : HoverItemColor :: Normal ,
414
+ color : color . clone ( ) ,
407
415
} ) ;
408
416
}
409
417
if let Some ( address) = symbol. virtual_address {
@@ -443,22 +451,31 @@ pub fn relocation_context(
443
451
out
444
452
}
445
453
446
- pub fn relocation_hover ( obj : & Object , reloc : ResolvedRelocation ) -> Vec < HoverItem > {
454
+ pub fn relocation_hover (
455
+ obj : & Object ,
456
+ reloc : ResolvedRelocation ,
457
+ color : HoverItemColor ,
458
+ ) -> Vec < HoverItem > {
447
459
let mut out = Vec :: new ( ) ;
448
460
if let Some ( name) = obj. arch . reloc_name ( reloc. relocation . flags ) {
449
461
out. push ( HoverItem :: Text {
450
462
label : "Relocation" . into ( ) ,
451
463
value : name. to_string ( ) ,
452
- color : HoverItemColor :: Normal ,
464
+ color : color . clone ( ) ,
453
465
} ) ;
454
466
} else {
455
467
out. push ( HoverItem :: Text {
456
468
label : "Relocation" . into ( ) ,
457
469
value : format ! ( "<{:?}>" , reloc. relocation. flags) ,
458
- color : HoverItemColor :: Normal ,
470
+ color : color . clone ( ) ,
459
471
} ) ;
460
472
}
461
- out. append ( & mut symbol_hover ( obj, reloc. relocation . target_symbol , reloc. relocation . addend ) ) ;
473
+ out. append ( & mut symbol_hover (
474
+ obj,
475
+ reloc. relocation . target_symbol ,
476
+ reloc. relocation . addend ,
477
+ color. clone ( ) ,
478
+ ) ) ;
462
479
out
463
480
}
464
481
@@ -545,7 +562,7 @@ pub fn instruction_hover(
545
562
}
546
563
if let Some ( reloc) = resolved. relocation {
547
564
out. push ( HoverItem :: Separator ) ;
548
- out. append ( & mut relocation_hover ( obj, reloc) ) ;
565
+ out. append ( & mut relocation_hover ( obj, reloc, HoverItemColor :: Normal ) ) ;
549
566
if let Some ( ty) = obj. arch . guess_data_type ( resolved) {
550
567
let literals = display_ins_data_literals ( obj, resolved) ;
551
568
if !literals. is_empty ( ) {
0 commit comments