1- use futures_util:: { stream:: FuturesOrdered , FutureExt } ;
1+ use futures_util:: {
2+ future:: { ready, Either } ,
3+ stream:: FuturesOrdered ,
4+ FutureExt ,
5+ } ;
26use helix_lsp:: {
37 block_on,
48 lsp:: {
@@ -1460,10 +1464,8 @@ fn compute_inlay_hints_for_view(
14601464impl ui:: menu:: Item for lsp:: CodeLens {
14611465 type Data = ( ) ;
14621466 fn format ( & self , _data : & Self :: Data ) -> Row < ' _ > {
1463- match & self . command {
1464- Some ( cmd) => cmd. title . as_str ( ) . into ( ) ,
1465- None => "needs resolve" . into ( ) ,
1466- }
1467+ // Safety: assumes that only resolved code lenses are passed to the menu
1468+ self . command . as_ref ( ) . unwrap ( ) . title . as_str ( ) . into ( )
14671469 }
14681470}
14691471
@@ -1475,7 +1477,7 @@ pub fn show_code_lenses_under_cursor(cx: &mut Context) {
14751477 let language_server_id = language_server. id ( ) ;
14761478
14771479 if doc
1478- . language_servers_with_feature ( LanguageServerFeature :: Hover )
1480+ . language_servers_with_feature ( LanguageServerFeature :: CodeLens )
14791481 . count ( )
14801482 == 0
14811483 {
@@ -1484,21 +1486,28 @@ pub fn show_code_lenses_under_cursor(cx: &mut Context) {
14841486 return ;
14851487 }
14861488
1487- let request = match language_server. code_lens ( doc. identifier ( ) ) {
1488- Some ( future) => future,
1489- None => {
1490- // TODO: error log?
1491- return ;
1492- }
1493- } ;
1489+ let mut futures: FuturesOrdered < _ > = doc
1490+ . code_lenses ( )
1491+ . iter ( )
1492+ . filter_map ( |c| {
1493+ if c. command . is_some ( ) {
1494+ let cloned = c. clone ( ) ;
1495+ Some ( Either :: Left ( ready ( Ok ( cloned) ) ) )
1496+ } else {
1497+ language_server
1498+ . resolve_code_lens ( c. clone ( ) )
1499+ . map ( Either :: Right )
1500+ }
1501+ } )
1502+ . collect ( ) ;
14941503
14951504 cx. jobs . callback ( async move {
14961505 let mut lenses = Vec :: new ( ) ;
1497-
1498- match request . await {
1499- Ok ( Some ( resp ) ) => lenses = resp ,
1500- Ok ( None ) => { }
1501- Err ( err ) => log :: error! ( "while fetching code lenses: {err}" ) ,
1506+ while let Some ( response ) = futures . next ( ) . await {
1507+ match response {
1508+ Ok ( item ) => lenses. push ( item ) ,
1509+ Err ( err ) => log :: error! ( "Error requesting document symbols: {err}" ) ,
1510+ }
15021511 }
15031512
15041513 let call = move |editor : & mut Editor , compositor : & mut Compositor | {
0 commit comments