summaryrefslogtreecommitdiffstats
path: root/modules/gdscript/gdscript_editor.cpp
diff options
context:
space:
mode:
authorRémi Verschelde <rverschelde@gmail.com>2023-10-11 22:44:35 +0200
committerRémi Verschelde <rverschelde@gmail.com>2023-10-11 22:44:35 +0200
commit2c79bc686e2d7c0e42c86ea2ef01d2618df8bb91 (patch)
tree096c555ce14bae73d71a76986c38e29f03f1de66 /modules/gdscript/gdscript_editor.cpp
parent3126001ef061f1d6683e8a83f0050b246b0ec1ed (diff)
parent496bee3bc726b0306c038b360c6a8c02533074b7 (diff)
downloadredot-engine-2c79bc686e2d7c0e42c86ea2ef01d2618df8bb91.tar.gz
Merge pull request #83150 from dalexeev/gds-autocomplete-static-var-on-class
GDScript: Add autocompletion for static variables accessed via class
Diffstat (limited to 'modules/gdscript/gdscript_editor.cpp')
-rw-r--r--modules/gdscript/gdscript_editor.cpp23
1 files changed, 13 insertions, 10 deletions
diff --git a/modules/gdscript/gdscript_editor.cpp b/modules/gdscript/gdscript_editor.cpp
index e40f692889..724715d9e5 100644
--- a/modules/gdscript/gdscript_editor.cpp
+++ b/modules/gdscript/gdscript_editor.cpp
@@ -984,7 +984,7 @@ static void _find_identifiers_in_class(const GDScriptParser::ClassNode *p_class,
ScriptLanguage::CodeCompletionOption option;
switch (member.type) {
case GDScriptParser::ClassNode::Member::VARIABLE:
- if (p_only_functions || outer || (p_static)) {
+ if (p_only_functions || outer || (p_static && !member.variable->is_static)) {
continue;
}
option = ScriptLanguage::CodeCompletionOption(member.variable->identifier->name, ScriptLanguage::CODE_COMPLETION_KIND_MEMBER, location);
@@ -1293,7 +1293,7 @@ static void _find_identifiers(const GDScriptParser::CompletionContext &p_context
static const char *_keywords_with_space[] = {
"and", "not", "or", "in", "as", "class", "class_name", "extends", "is", "func", "signal", "await",
- "const", "enum", "static", "var", "if", "elif", "else", "for", "match", "while",
+ "const", "enum", "static", "var", "if", "elif", "else", "for", "match", "when", "while",
nullptr
};
@@ -2198,7 +2198,7 @@ static bool _guess_identifier_type_from_base(GDScriptParser::CompletionContext &
}
return true;
case GDScriptParser::ClassNode::Member::VARIABLE:
- if (!is_static) {
+ if (!is_static || member.variable->is_static) {
if (member.variable->get_datatype().is_set() && !member.variable->get_datatype().is_variant()) {
r_type.type = member.variable->get_datatype();
return true;
@@ -2273,16 +2273,19 @@ static bool _guess_identifier_type_from_base(GDScriptParser::CompletionContext &
return true;
}
- if (!is_static) {
- List<PropertyInfo> members;
+ List<PropertyInfo> members;
+ if (is_static) {
+ scr->get_property_list(&members);
+ } else {
scr->get_script_property_list(&members);
- for (const PropertyInfo &prop : members) {
- if (prop.name == p_identifier) {
- r_type = _type_from_property(prop);
- return true;
- }
+ }
+ for (const PropertyInfo &prop : members) {
+ if (prop.name == p_identifier) {
+ r_type = _type_from_property(prop);
+ return true;
}
}
+
Ref<Script> parent = scr->get_base_script();
if (parent.is_valid()) {
base_type.script_type = parent;