|
@@ -2864,6 +2864,11 @@ void GDScriptAnalyzer::reduce_binary_op(GDScriptParser::BinaryOpNode *p_binary_o
|
|
result.type_source = GDScriptParser::DataType::ANNOTATED_EXPLICIT;
|
|
result.type_source = GDScriptParser::DataType::ANNOTATED_EXPLICIT;
|
|
result.kind = GDScriptParser::DataType::BUILTIN;
|
|
result.kind = GDScriptParser::DataType::BUILTIN;
|
|
result.builtin_type = Variant::BOOL;
|
|
result.builtin_type = Variant::BOOL;
|
|
|
|
+ } else if (p_binary_op->variant_op == Variant::OP_MODULE && left_type.builtin_type == Variant::STRING) {
|
|
|
|
+ // The modulo operator (%) on string acts as formatting and will always return a string.
|
|
|
|
+ result.type_source = left_type.type_source;
|
|
|
|
+ result.kind = GDScriptParser::DataType::BUILTIN;
|
|
|
|
+ result.builtin_type = Variant::STRING;
|
|
} else if (left_type.is_variant() || right_type.is_variant()) {
|
|
} else if (left_type.is_variant() || right_type.is_variant()) {
|
|
// Cannot infer type because one operand can be anything.
|
|
// Cannot infer type because one operand can be anything.
|
|
result.kind = GDScriptParser::DataType::VARIANT;
|
|
result.kind = GDScriptParser::DataType::VARIANT;
|