Skip to content

Commit f9bfd7d

Browse files
committed
Fix infer hover and semantic token
1 parent 7f15cb4 commit f9bfd7d

File tree

4 files changed

+27
-7
lines changed

4 files changed

+27
-7
lines changed

crates/emmylua_code_analysis/src/db_index/type/humanize_type.rs

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@ use std::collections::HashSet;
33
use itertools::Itertools;
44

55
use crate::{
6-
AsyncState, DbIndex, GenericTpl, LuaAliasCallType, LuaFunctionType, LuaGenericType,
7-
LuaInstanceType, LuaIntersectionType, LuaMemberKey, LuaMemberOwner, LuaObjectType,
8-
LuaSignatureId, LuaStringTplType, LuaTupleType, LuaType, LuaTypeDeclId, LuaUnionType,
9-
TypeSubstitutor, VariadicType,
6+
AsyncState, DbIndex, GenericTpl, LuaAliasCallType, LuaConditionalType, LuaFunctionType,
7+
LuaGenericType, LuaInstanceType, LuaIntersectionType, LuaMemberKey, LuaMemberOwner,
8+
LuaObjectType, LuaSignatureId, LuaStringTplType, LuaTupleType, LuaType, LuaTypeDeclId,
9+
LuaUnionType, TypeSubstitutor, VariadicType,
1010
};
1111

1212
use super::{LuaAliasCallKind, LuaMultiLineUnion};
@@ -107,6 +107,9 @@ pub fn humanize_type(db: &DbIndex, ty: &LuaType, level: RenderLevel) -> String {
107107
}
108108
LuaType::ConstTplRef(const_tpl) => humanize_const_tpl_ref_type(const_tpl),
109109
LuaType::Language(s) => s.to_string(),
110+
LuaType::Conditional(c) => humanize_conditional_type(db, c, level),
111+
LuaType::ConditionalInfer(s) => s.to_string(),
112+
LuaType::Never => "never".to_string(),
110113
_ => "unknown".to_string(),
111114
}
112115
}
@@ -633,6 +636,18 @@ fn humanize_const_tpl_ref_type(const_tpl: &GenericTpl) -> String {
633636
const_tpl.get_name().to_string()
634637
}
635638

639+
fn humanize_conditional_type(
640+
db: &DbIndex,
641+
conditional: &LuaConditionalType,
642+
level: RenderLevel,
643+
) -> String {
644+
let check_type = humanize_type(db, conditional.get_condition(), level.next_level());
645+
let true_type = humanize_type(db, conditional.get_true_type(), level.next_level());
646+
let false_type = humanize_type(db, conditional.get_false_type(), level.next_level());
647+
648+
format!("{} and {} or {}", check_type, true_type, false_type)
649+
}
650+
636651
fn humanize_str_tpl_ref_type(str_tpl: &LuaStringTplType) -> String {
637652
let prefix = str_tpl.get_prefix();
638653
if prefix.is_empty() {

crates/emmylua_parser/src/grammar/doc/test.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2981,7 +2981,7 @@ Syntax(Chunk)@0..69
29812981
Token(TkDocExtends)@37..44 "extends"
29822982
Token(TkWhitespace)@44..45 " "
29832983
Syntax(TypeInfer)@45..52
2984-
Token(TkName)@45..50 "infer"
2984+
Token(TkDocInfer)@45..50 "infer"
29852985
Token(TkWhitespace)@50..51 " "
29862986
Syntax(DocGenericParameter)@51..52
29872987
Token(TkName)@51..52 "P"
@@ -3039,7 +3039,7 @@ Syntax(Chunk)@0..106
30393039
Token(TkColon)@64..65 ":"
30403040
Token(TkWhitespace)@65..66 " "
30413041
Syntax(TypeInfer)@66..73
3042-
Token(TkName)@66..71 "infer"
3042+
Token(TkDocInfer)@66..71 "infer"
30433043
Token(TkWhitespace)@71..72 " "
30443044
Syntax(DocGenericParameter)@72..73
30453045
Token(TkName)@72..73 "P"
@@ -3251,7 +3251,7 @@ Syntax(Chunk)@0..106
32513251
Token(TkColon)@66..67 ":"
32523252
Token(TkWhitespace)@67..68 " "
32533253
Syntax(TypeInfer)@68..75
3254-
Token(TkName)@68..73 "infer"
3254+
Token(TkDocInfer)@68..73 "infer"
32553255
Token(TkWhitespace)@73..74 " "
32563256
Syntax(DocGenericParameter)@74..75
32573257
Token(TkName)@74..75 "P"

crates/emmylua_parser/src/grammar/doc/types.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -484,6 +484,7 @@ fn parse_name_type(p: &mut LuaDocParser) -> DocParseResult {
484484

485485
fn parse_infer_type(p: &mut LuaDocParser) -> DocParseResult {
486486
let m = p.mark(LuaSyntaxKind::TypeInfer);
487+
p.set_current_token_kind(LuaTokenKind::TkDocInfer);
487488
p.bump();
488489
let param = p.mark(LuaSyntaxKind::DocGenericParameter);
489490
expect_token(p, LuaTokenKind::TkName)?;

crates/emmylua_parser/src/parser/lua_doc_parser.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -297,6 +297,10 @@ impl<'b> LuaDocParser<'_, 'b> {
297297
pub fn set_parser_state(&mut self, state: LuaDocParserState) {
298298
self.state = state;
299299
}
300+
301+
pub fn set_current_token_kind(&mut self, kind: LuaTokenKind) {
302+
self.current_token = kind;
303+
}
300304
}
301305

302306
fn is_invalid_kind(kind: LuaTokenKind) -> bool {

0 commit comments

Comments
 (0)