Skip to content

Commit 34b5cb4

Browse files
authored
Merge pull request #905 from phanen/st-find-decl
fix(semantic_token): find decl before check global var
2 parents 6e776f0 + e6b89dc commit 34b5cb4

File tree

1 file changed

+37
-36
lines changed

1 file changed

+37
-36
lines changed

crates/emmylua_ls/src/handlers/semantic_token/build_semantic_tokens.rs

Lines changed: 37 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -859,39 +859,42 @@ fn handle_name_node(
859859
return Some(());
860860
}
861861

862-
// 检查是否是 Lua 内置全局变量
863-
if matches!(
864-
name_text,
865-
"_G" | "_ENV"
866-
| "_VERSION"
867-
| "arg"
868-
| "package"
869-
| "require"
870-
| "load"
871-
| "loadfile"
872-
| "dofile"
873-
| "print"
874-
| "assert"
875-
| "error"
876-
| "warn"
877-
| "type"
878-
| "getmetatable"
879-
| "setmetatable"
880-
| "rawget"
881-
| "rawset"
882-
| "rawequal"
883-
| "rawlen"
884-
| "next"
885-
| "pairs"
886-
| "ipairs"
887-
| "tostring"
888-
| "tonumber"
889-
| "select"
890-
| "unpack"
891-
| "pcall"
892-
| "xpcall"
893-
| "collectgarbage"
894-
) {
862+
// 先查找声明,如果找不到声明再检查是否是 Lua 内置全局变量
863+
let semantic_decl = semantic_model.find_decl(node.clone().into(), SemanticDeclLevel::default());
864+
if semantic_decl.is_none()
865+
&& matches!(
866+
name_text,
867+
"_G" | "_ENV"
868+
| "_VERSION"
869+
| "arg"
870+
| "package"
871+
| "require"
872+
| "load"
873+
| "loadfile"
874+
| "dofile"
875+
| "print"
876+
| "assert"
877+
| "error"
878+
| "warn"
879+
| "type"
880+
| "getmetatable"
881+
| "setmetatable"
882+
| "rawget"
883+
| "rawset"
884+
| "rawequal"
885+
| "rawlen"
886+
| "next"
887+
| "pairs"
888+
| "ipairs"
889+
| "tostring"
890+
| "tonumber"
891+
| "select"
892+
| "unpack"
893+
| "pcall"
894+
| "xpcall"
895+
| "collectgarbage"
896+
)
897+
{
895898
builder.push_with_modifiers(
896899
name_token.syntax(),
897900
SemanticTokenType::FUNCTION,
@@ -902,9 +905,7 @@ fn handle_name_node(
902905
);
903906
return Some(());
904907
}
905-
906-
let semantic_decl =
907-
semantic_model.find_decl(node.clone().into(), SemanticDeclLevel::default())?;
908+
let semantic_decl = semantic_decl?;
908909
match semantic_decl {
909910
LuaSemanticDeclId::Member(member_id) => {
910911
let decl_type = semantic_model.get_type(member_id.into());

0 commit comments

Comments
 (0)