|
1 | 1 | use emmylua_code_analysis::{ |
2 | | - LuaDecl, LuaMemberId, LuaMemberOwner, LuaSemanticDeclId, LuaType, LuaTypeDeclId, |
| 2 | + LuaDecl, LuaDeclExtra, LuaMemberId, LuaMemberOwner, LuaSemanticDeclId, LuaType, LuaTypeDeclId, |
3 | 3 | SemanticDeclLevel, SemanticModel, |
4 | 4 | }; |
5 | 5 | use emmylua_parser::{ |
@@ -564,7 +564,6 @@ fn handle_name_node( |
564 | 564 |
|
565 | 565 | let semantic_decl = |
566 | 566 | semantic_model.find_decl(node.clone().into(), SemanticDeclLevel::default())?; |
567 | | - |
568 | 567 | match semantic_decl { |
569 | 568 | LuaSemanticDeclId::Member(member_id) => { |
570 | 569 | let decl_type = semantic_model.get_type(member_id.into()); |
@@ -621,13 +620,26 @@ fn handle_name_node( |
621 | 620 | } |
622 | 621 | } |
623 | 622 | } |
624 | | - _ => { |
625 | | - if decl.is_param() { |
626 | | - (SemanticTokenType::PARAMETER, None) |
627 | | - } else { |
628 | | - (SemanticTokenType::VARIABLE, None) |
| 623 | + _ => match &decl.extra { |
| 624 | + LuaDeclExtra::Param { |
| 625 | + idx, signature_id, .. |
| 626 | + } => { |
| 627 | + let signature = semantic_model |
| 628 | + .get_db() |
| 629 | + .get_signature_index() |
| 630 | + .get(&signature_id)?; |
| 631 | + if let Some(param_info) = signature.get_param_info_by_id(*idx) { |
| 632 | + if param_info.type_ref.is_function() { |
| 633 | + (SemanticTokenType::FUNCTION, None) |
| 634 | + } else { |
| 635 | + (SemanticTokenType::PARAMETER, None) |
| 636 | + } |
| 637 | + } else { |
| 638 | + (SemanticTokenType::VARIABLE, None) |
| 639 | + } |
629 | 640 | } |
630 | | - } |
| 641 | + _ => (SemanticTokenType::VARIABLE, None), |
| 642 | + }, |
631 | 643 | }; |
632 | 644 |
|
633 | 645 | if let Some(modifier) = modifier { |
|
0 commit comments