Skip to content

Commit

Permalink
Merge pull request #89382 from dcaoc03/master
Browse files Browse the repository at this point in the history
Fix enum autocompletion for core classes
  • Loading branch information
akien-mga committed Apr 9, 2024
2 parents c8fb248 + 935ea10 commit 9a9045c
Show file tree
Hide file tree
Showing 5 changed files with 59 additions and 7 deletions.
44 changes: 37 additions & 7 deletions modules/gdscript/gdscript_editor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -651,6 +651,21 @@ static int _get_enum_constant_location(const StringName &p_class, const StringNa
return depth | ScriptLanguage::LOCATION_PARENT_MASK;
}

static int _get_enum_location(const StringName &p_class, const StringName &p_enum) {
if (!ClassDB::has_enum(p_class, p_enum)) {
return ScriptLanguage::LOCATION_OTHER;
}

int depth = 0;
StringName class_test = p_class;
while (class_test && !ClassDB::has_enum(class_test, p_enum, true)) {
class_test = ClassDB::get_parent_class(class_test);
depth++;
}

return depth | ScriptLanguage::LOCATION_PARENT_MASK;
}

// END LOCATION METHODS

static String _trim_parent_class(const String &p_class, const String &p_base_class) {
Expand Down Expand Up @@ -1202,13 +1217,15 @@ static void _find_identifiers_in_base(const GDScriptCompletionIdentifier &p_base
return;
}

List<StringName> enums;
ClassDB::get_enum_list(type, &enums);
for (const StringName &E : enums) {
int location = p_recursion_depth + _get_enum_location(type, E);
ScriptLanguage::CodeCompletionOption option(E, ScriptLanguage::CODE_COMPLETION_KIND_ENUM, location);
r_result.insert(option.display, option);
}

if (p_types_only) {
List<StringName> enums;
ClassDB::get_enum_list(type, &enums);
for (const StringName &E : enums) {
ScriptLanguage::CodeCompletionOption option(E, ScriptLanguage::CODE_COMPLETION_KIND_ENUM);
r_result.insert(option.display, option);
}
return;
}

Expand Down Expand Up @@ -1268,7 +1285,20 @@ static void _find_identifiers_in_base(const GDScriptCompletionIdentifier &p_base
}
return;
} break;
case GDScriptParser::DataType::ENUM:
case GDScriptParser::DataType::ENUM: {
String type_str = base_type.native_type;
StringName type = type_str.get_slicec('.', 0);
StringName type_enum = base_type.enum_type;

List<StringName> enum_values;
ClassDB::get_enum_constants(type, type_enum, &enum_values);
for (const StringName &E : enum_values) {
int location = p_recursion_depth + _get_enum_constant_location(type, E);
ScriptLanguage::CodeCompletionOption option(E, ScriptLanguage::CODE_COMPLETION_KIND_CONSTANT, location);
r_result.insert(option.display, option);
}
}
[[fallthrough]];
case GDScriptParser::DataType::BUILTIN: {
if (p_types_only) {
return;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
[output]
include=[
{"display": "DrawMode",
"location": 256},
{"display": "Anchor",
"location": 257},
{"display": "TextureRepeat",
"location": 258},
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
extends Control

func _ready():
var t = BaseButton.➡
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
[output]
include=[
{"display": "HEURISTIC_MAX"},
{"display": "HEURISTIC_OCTILE"},
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
extends Control

func _ready():
AStarGrid2D.Heuristic.➡

0 comments on commit 9a9045c

Please sign in to comment.