1
0
mirror of https://github.com/godotengine/godot.git synced 2025-11-16 14:00:40 +00:00

Fix lookup symbol for super()

This commit is contained in:
Chaosus
2025-07-08 16:07:08 +03:00
parent 4d1f26e1fd
commit c232b7c717
4 changed files with 30 additions and 1 deletions

View File

@@ -3755,6 +3755,8 @@ static void _find_call_arguments(GDScriptParser::CompletionContext &p_context, c
}
}
} break;
case GDScriptParser::COMPLETION_SUPER:
break;
case GDScriptParser::COMPLETION_SUPER_METHOD: {
if (!completion_context.current_class) {
break;
@@ -4315,6 +4317,13 @@ static Error _lookup_symbol_from_base(const GDScriptParser::DataType &p_base, co
return OK;
}
} break;
case GDScriptParser::COMPLETION_SUPER: {
if (context.current_class && context.current_function) {
if (_lookup_symbol_from_base(context.current_class->base_type, context.current_function->info.name, r_result) == OK) {
return OK;
}
}
} break;
case GDScriptParser::COMPLETION_SUPER_METHOD:
case GDScriptParser::COMPLETION_METHOD:
case GDScriptParser::COMPLETION_ASSIGN:

View File

@@ -3371,6 +3371,9 @@ GDScriptParser::ExpressionNode *GDScriptParser::parse_call(ExpressionNode *p_pre
if (previous.type == GDScriptTokenizer::Token::SUPER) {
// Super call.
call->is_super = true;
if (!check(GDScriptTokenizer::Token::PERIOD)) {
make_completion_context(COMPLETION_SUPER, call);
}
push_multiline(true);
if (match(GDScriptTokenizer::Token::PARENTHESIS_OPEN)) {
// Implicit call to the parent method of the same name.
@@ -3387,7 +3390,7 @@ GDScriptParser::ExpressionNode *GDScriptParser::parse_call(ExpressionNode *p_pre
}
} else {
consume(GDScriptTokenizer::Token::PERIOD, R"(Expected "." or "(" after "super".)");
make_completion_context(COMPLETION_SUPER_METHOD, call, true);
make_completion_context(COMPLETION_SUPER_METHOD, call);
if (!consume(GDScriptTokenizer::Token::IDENTIFIER, R"(Expected function name after ".".)")) {
pop_multiline();
complete_extents(call);

View File

@@ -1300,6 +1300,7 @@ public:
COMPLETION_PROPERTY_METHOD, // Property setter or getter (list available methods).
COMPLETION_RESOURCE_PATH, // For load/preload.
COMPLETION_SUBSCRIPT, // Inside id[|].
COMPLETION_SUPER, // super(), used for lookup.
COMPLETION_SUPER_METHOD, // After super.
COMPLETION_TYPE_ATTRIBUTE, // Attribute in type name (Type.|).
COMPLETION_TYPE_NAME, // Name of type (after :).

View File

@@ -0,0 +1,16 @@
extends Node
class Inner1:
# ^^^^^^ class1 -> class1
func _init():
# ^^^^^ class1:init
pass
class Inner2 extends Inner1:
# | | ^^^^^^ -> class1
# ^^^^^^ class2 -> class2
func _init():
# ^^^^^ class2:init
super ()
# ^^^^^ -> class1:init
pass