Merge pull request #94635 from dalexeev/gds-fix-false-positive-enum-without-default
GDScript: Fix false positive cases of `ENUM_VARIABLE_WITHOUT_DEFAULT`
This commit is contained in:
commit
f6c7b00a41
2 changed files with 16 additions and 2 deletions
|
@ -1967,8 +1967,8 @@ void GDScriptAnalyzer::resolve_assignable(GDScriptParser::AssignableNode *p_assi
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef DEBUG_ENABLED
|
#ifdef DEBUG_ENABLED
|
||||||
if (!has_specified_type) {
|
|
||||||
const bool is_parameter = p_assignable->type == GDScriptParser::Node::PARAMETER;
|
const bool is_parameter = p_assignable->type == GDScriptParser::Node::PARAMETER;
|
||||||
|
if (!has_specified_type) {
|
||||||
const String declaration_type = is_constant ? "Constant" : (is_parameter ? "Parameter" : "Variable");
|
const String declaration_type = is_constant ? "Constant" : (is_parameter ? "Parameter" : "Variable");
|
||||||
if (p_assignable->infer_datatype || is_constant) {
|
if (p_assignable->infer_datatype || is_constant) {
|
||||||
// Do not produce the `INFERRED_DECLARATION` warning on type import because there is no way to specify the true type.
|
// Do not produce the `INFERRED_DECLARATION` warning on type import because there is no way to specify the true type.
|
||||||
|
@ -1980,7 +1980,7 @@ void GDScriptAnalyzer::resolve_assignable(GDScriptParser::AssignableNode *p_assi
|
||||||
} else {
|
} else {
|
||||||
parser->push_warning(p_assignable, GDScriptWarning::UNTYPED_DECLARATION, declaration_type, p_assignable->identifier->name);
|
parser->push_warning(p_assignable, GDScriptWarning::UNTYPED_DECLARATION, declaration_type, p_assignable->identifier->name);
|
||||||
}
|
}
|
||||||
} else if (specified_type.kind == GDScriptParser::DataType::ENUM && p_assignable->initializer == nullptr) {
|
} else if (!is_parameter && specified_type.kind == GDScriptParser::DataType::ENUM && p_assignable->initializer == nullptr) {
|
||||||
// Warn about enum variables without default value. Unless the enum defines the "0" value, then it's fine.
|
// Warn about enum variables without default value. Unless the enum defines the "0" value, then it's fine.
|
||||||
bool has_zero_value = false;
|
bool has_zero_value = false;
|
||||||
for (const KeyValue<StringName, int64_t> &kv : specified_type.enum_values) {
|
for (const KeyValue<StringName, int64_t> &kv : specified_type.enum_values) {
|
||||||
|
|
|
@ -7,3 +7,17 @@ var has_no_zero: HasNoZero # Warning, because there is no `0` in the enum.
|
||||||
func test():
|
func test():
|
||||||
print(has_zero)
|
print(has_zero)
|
||||||
print(has_no_zero)
|
print(has_no_zero)
|
||||||
|
|
||||||
|
|
||||||
|
# GH-94634. A parameter is either mandatory or has a default value.
|
||||||
|
func test_no_exec(param: HasNoZero) -> void:
|
||||||
|
print(param)
|
||||||
|
|
||||||
|
# Loop iterator always has a value.
|
||||||
|
for i: HasNoZero in HasNoZero.values():
|
||||||
|
print(i)
|
||||||
|
|
||||||
|
match param:
|
||||||
|
# Pattern bind always has a value.
|
||||||
|
var x:
|
||||||
|
print(x)
|
||||||
|
|
Loading…
Reference in a new issue