diff --git a/Core/GDCore/Events/Builtin/RepeatEvent.cpp b/Core/GDCore/Events/Builtin/RepeatEvent.cpp index 48bf0900a6b1..b9c952a21926 100644 --- a/Core/GDCore/Events/Builtin/RepeatEvent.cpp +++ b/Core/GDCore/Events/Builtin/RepeatEvent.cpp @@ -49,7 +49,7 @@ vector > RepeatEvent::GetAllExpressionsWithMetadata() { vector > allExpressionsWithMetadata; - auto metadata = gd::ParameterMetadata().SetType("number"); + auto metadata = gd::ParameterMetadata().SetType("number").SetDescription(_("Number of repeats")); allExpressionsWithMetadata.push_back( std::make_pair(&repeatNumberExpression, metadata)); @@ -75,7 +75,7 @@ vector > RepeatEvent::GetAllExpressionsWithMetadata() const { vector > allExpressionsWithMetadata; - auto metadata = gd::ParameterMetadata().SetType("number"); + auto metadata = gd::ParameterMetadata().SetType("number").SetDescription(_("Number of repeats")); allExpressionsWithMetadata.push_back( std::make_pair(&repeatNumberExpression, metadata)); diff --git a/Core/GDCore/IDE/Events/ExpressionValidator.cpp b/Core/GDCore/IDE/Events/ExpressionValidator.cpp index cacb35887fa4..a46eff7ef705 100644 --- a/Core/GDCore/IDE/Events/ExpressionValidator.cpp +++ b/Core/GDCore/IDE/Events/ExpressionValidator.cpp @@ -408,7 +408,13 @@ ExpressionValidator::Type ExpressionValidator::ValidateFunction( parentType = StringToType(parameterMetadata.GetType()); auto parentParameterExtraInfo = currentParameterExtraInfo; currentParameterExtraInfo = ¶meterMetadata.GetExtraInfo(); + + auto parentParameterName = currentParameterName; + currentParameterName = parameterMetadata.GetDescription(); + parameter->Visit(*this); + + currentParameterName = parentParameterName; currentParameterExtraInfo = parentParameterExtraInfo; parentType = currentParentType; diff --git a/Core/GDCore/IDE/Events/ExpressionValidator.h b/Core/GDCore/IDE/Events/ExpressionValidator.h index c46f4724ef90..52ba9abc6624 100644 --- a/Core/GDCore/IDE/Events/ExpressionValidator.h +++ b/Core/GDCore/IDE/Events/ExpressionValidator.h @@ -40,7 +40,8 @@ class GD_CORE_API ExpressionValidator : public ExpressionParser2NodeWorker { ExpressionValidator(const gd::Platform &platform_, const gd::ProjectScopedContainers & projectScopedContainers_, const gd::String &rootType_, - const gd::String &extraInfo_ = emptyParameterExtraInfo) + const gd::String &extraInfo_ = emptyParameterExtraInfo, + const gd::String &contextDescription_ = "") : platform(platform_), projectScopedContainers(projectScopedContainers_), parentType(StringToType(gd::ValueTypeMetadata::GetExpressionPrimitiveValueType(rootType_))), @@ -48,7 +49,8 @@ class GD_CORE_API ExpressionValidator : public ExpressionParser2NodeWorker { forbidsUsageOfBracketsBecauseParentIsObject(false), currentParameterExtraInfo(&extraInfo_), variableObjectName(), - variableObjectNameLocation() {}; + variableObjectNameLocation(), + currentParameterName(contextDescription_) {}; virtual ~ExpressionValidator(){}; /** @@ -384,6 +386,11 @@ class GD_CORE_API ExpressionValidator : public ExpressionParser2NodeWorker { // It can't happen. message = _("You must enter a valid expression."); } + + if (!currentParameterName.empty()) { + message += " " + _("Parameter:") + " " + currentParameterName; + } + RaiseTypeError(message, node.location); childType = Type::Empty; } @@ -570,6 +577,7 @@ class GD_CORE_API ExpressionValidator : public ExpressionParser2NodeWorker { gd::String variableObjectName; gd::ExpressionParserLocation variableObjectNameLocation; const gd::String *currentParameterExtraInfo; + gd::String currentParameterName; const gd::Platform &platform; const gd::ProjectScopedContainers &projectScopedContainers; }; diff --git a/Core/GDCore/IDE/InstructionValidator.cpp b/Core/GDCore/IDE/InstructionValidator.cpp index 5608df5af254..2ed054325668 100644 --- a/Core/GDCore/IDE/InstructionValidator.cpp +++ b/Core/GDCore/IDE/InstructionValidator.cpp @@ -69,7 +69,8 @@ ParameterValidationResult InstructionValidator::ValidateParameter( *instruction.GetParameter(parameterIndex).GetRootNode(); ExpressionValidator expressionValidator(platform, projectScopedContainers, parameterType, - parameterMetadata.GetExtraInfo()); + parameterMetadata.GetExtraInfo(), + parameterMetadata.GetDescription()); expressionNode.Visit(expressionValidator); if (!expressionValidator.GetAllErrors().empty()) {