Skip to content

Commit 4ee8e72

Browse files
authored
Release 0.9.2 preparation (#112)
* Fix PVS studio warnings * Fix clang warning * Fix and improve diagnostic for imported/included templates #63 * Add extra tests for render-time diagnostic * Update thirdparty references * Update reference to variant-lite * Update reference to expected-lite * Fix build
1 parent 4231ceb commit 4ee8e72

26 files changed

+205
-75
lines changed

include/jinja2cpp/error_info.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,9 @@ enum class ErrorCode
3434
TemplateNotFound,
3535
TemplateNotParsed,
3636
InvalidValueType,
37+
InvalidTemplateName,
3738
ExtensionDisabled,
39+
TemplateEnvAbsent,
3840
};
3941

4042
struct SourceLocation

include/jinja2cpp/filesystem_handler.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ class RealFileSystem : public IFilesystemHandler
4848

4949
void SetRootFolder(std::string newRoot)
5050
{
51-
m_rootFolder = newRoot;
51+
m_rootFolder = std::move(newRoot);
5252
}
5353

5454
CharFileStreamPtr OpenStream(const std::string& name) const override;

src/error_info.cpp

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,8 +110,11 @@ void RenderErrorInfo(std::basic_ostream<CharT>& os, const ErrorInfoTpl<CharT>& e
110110
os << UNIVERSAL_STR("Parse error");
111111
break;
112112
case ErrorCode::UnexpectedException:
113-
os << UNIVERSAL_STR("Unexpected exception occurred during template processing");
113+
{
114+
auto& extraParams = errInfo.GetExtraParams();
115+
os << UNIVERSAL_STR("Unexpected exception occurred during template processing. Exception: ") << extraParams[0];
114116
break;
117+
}
115118
case ErrorCode::YetUnsupported:
116119
os << UNIVERSAL_STR("This feature has not been supported yet");
117120
break;
@@ -197,12 +200,18 @@ void RenderErrorInfo(std::basic_ostream<CharT>& os, const ErrorInfoTpl<CharT>& e
197200
case ErrorCode::TemplateNotFound:
198201
os << UNIVERSAL_STR("Template(s) not found: ") << errInfo.GetExtraParams()[0];
199202
break;
203+
case ErrorCode::InvalidTemplateName:
204+
os << UNIVERSAL_STR("Invalid template name: ") << errInfo.GetExtraParams()[0];
205+
break;
200206
case ErrorCode::InvalidValueType:
201207
os << UNIVERSAL_STR("Invalid value type");
202208
break;
203209
case ErrorCode::ExtensionDisabled:
204210
os << UNIVERSAL_STR("Extension disabled");
205211
break;
212+
case ErrorCode::TemplateEnvAbsent:
213+
os << UNIVERSAL_STR("Template environment doesn't set");
214+
break;
206215
}
207216
os << std::endl << errInfo.GetLocationDescr();
208217
}

src/expression_evaluator.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -181,9 +181,9 @@ InternalValue DictCreator::Evaluate(RenderContext& context)
181181
return MapAdapter::CreateAdapter(std::move(result));;
182182
}
183183

184-
ExpressionFilter::ExpressionFilter(std::string filterName, CallParams params)
184+
ExpressionFilter::ExpressionFilter(const std::string& filterName, CallParams params)
185185
{
186-
m_filter = CreateFilter(std::move(filterName), std::move(params));
186+
m_filter = CreateFilter(filterName, std::move(params));
187187
if (!m_filter)
188188
throw std::runtime_error("Can't find filter '" + filterName + "'");
189189
}
@@ -196,10 +196,10 @@ InternalValue ExpressionFilter::Evaluate(const InternalValue& baseVal, RenderCon
196196
return m_filter->Filter(baseVal, context);
197197
}
198198

199-
IsExpression::IsExpression(ExpressionEvaluatorPtr<> value, std::string tester, CallParams params)
199+
IsExpression::IsExpression(ExpressionEvaluatorPtr<> value, const std::string& tester, CallParams params)
200200
: m_value(value)
201201
{
202-
m_tester = CreateTester(std::move(tester), std::move(params));
202+
m_tester = CreateTester(tester, std::move(params));
203203
if (!m_tester)
204204
throw std::runtime_error("Can't find tester '" + tester + "'");
205205
}

src/expression_evaluator.h

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ struct ParsedArguments
4949
std::unordered_map<std::string, ExpressionEvaluatorPtr<>> extraKwArgs;
5050
std::vector<ExpressionEvaluatorPtr<>> extraPosArgs;
5151

52-
ExpressionEvaluatorPtr<> operator[](std::string name) const
52+
ExpressionEvaluatorPtr<> operator[](const std::string& name) const
5353
{
5454
auto p = args.find(name);
5555
if (p == args.end())
@@ -67,15 +67,15 @@ class FullExpressionEvaluator : public ExpressionEvaluatorBase
6767
public:
6868
void SetExpression(ExpressionEvaluatorPtr<Expression> expr)
6969
{
70-
m_expression = expr;
70+
m_expression = std::move(expr);
7171
}
7272
void SetFilter(ExpressionEvaluatorPtr<ExpressionFilter> expr)
7373
{
74-
m_filter = expr;
74+
m_filter = std::move(expr);
7575
}
7676
void SetTester(ExpressionEvaluatorPtr<IfExpression> expr)
7777
{
78-
m_tester = expr;
78+
m_tester = std::move(expr);
7979
}
8080
InternalValue Evaluate(RenderContext& values) override;
8181
void Render(OutStream &stream, RenderContext &values) override;
@@ -204,7 +204,7 @@ class IsExpression : public Expression
204204

205205
using TesterFactoryFn = std::function<std::shared_ptr<ITester> (CallParams params)>;
206206

207-
IsExpression(ExpressionEvaluatorPtr<> value, std::string tester, CallParams params);
207+
IsExpression(ExpressionEvaluatorPtr<> value, const std::string& tester, CallParams params);
208208
InternalValue Evaluate(RenderContext& context) override;
209209

210210
private:
@@ -293,12 +293,12 @@ class ExpressionFilter
293293

294294
using FilterFactoryFn = std::function<std::shared_ptr<IExpressionFilter> (CallParams params)>;
295295

296-
ExpressionFilter(std::string filterName, CallParams params);
296+
ExpressionFilter(const std::string& filterName, CallParams params);
297297

298298
InternalValue Evaluate(const InternalValue& baseVal, RenderContext& context);
299299
void SetParentFilter(std::shared_ptr<ExpressionFilter> parentFilter)
300300
{
301-
m_parentFilter = parentFilter;
301+
m_parentFilter = std::move(parentFilter);
302302
}
303303
private:
304304
std::shared_ptr<IExpressionFilter> m_filter;
@@ -322,7 +322,7 @@ class IfExpression
322322

323323
void SetAltValue(ExpressionEvaluatorPtr<> altValue)
324324
{
325-
m_altValue = altValue;
325+
m_altValue = std::move(altValue);
326326
}
327327

328328
private:

src/expression_parser.cpp

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ auto ReplaceErrorIfPossible(T& result, const Token& pivotTok, ErrorCode newError
1717
return result.get_unexpected();
1818
}
1919

20-
ExpressionParser::ExpressionParser(const Settings& /* settings */)
20+
ExpressionParser::ExpressionParser(const Settings& /* settings */, TemplateEnv* /* env */)
2121
{
2222

2323
}
@@ -63,13 +63,10 @@ ExpressionParser::ParseResult<ExpressionEvaluatorPtr<FullExpressionEvaluator>> E
6363

6464
if (includeIfPart && lexer.EatIfEqual(Keyword::If))
6565
{
66-
if (includeIfPart)
67-
{
68-
auto ifExpr = ParseIfExpression(lexer);
69-
if (!ifExpr)
70-
return ifExpr.get_unexpected();
71-
evaluator->SetTester(*ifExpr);
72-
}
66+
auto ifExpr = ParseIfExpression(lexer);
67+
if (!ifExpr)
68+
return ifExpr.get_unexpected();
69+
evaluator->SetTester(*ifExpr);
7370
}
7471

7572
saver.Commit();

src/expression_parser.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ class ExpressionParser
1717
template<typename T>
1818
using ParseResult = nonstd::expected<T, ParseError>;
1919

20-
ExpressionParser(const Settings& settings);
20+
explicit ExpressionParser(const Settings& settings, TemplateEnv* env = nullptr);
2121
ParseResult<RendererPtr> Parse(LexScanner& lexer);
2222
ParseResult<ExpressionEvaluatorPtr<FullExpressionEvaluator>> ParseFullExpression(LexScanner& lexer, bool includeIfPart = true);
2323
ParseResult<CallParams> ParseCallParams(LexScanner& lexer);

src/filesystem_handler.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ WCharFileStreamPtr MemoryFileSystem::OpenWStream(const std::string& name) const
7171
}
7272

7373
RealFileSystem::RealFileSystem(std::string rootFolder)
74-
: m_rootFolder(rootFolder)
74+
: m_rootFolder(std::move(rootFolder))
7575
{
7676

7777
}

src/filters.cpp

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -537,10 +537,8 @@ SequenceAccessor::SequenceAccessor(FilterParams params, SequenceAccessor::Mode m
537537
case LengthMode:
538538
break;
539539
case MaxItemMode:
540-
ParseParams({{"case_sensitive", false, InternalValue(false)}, {"attribute", false}}, params);
541-
break;
542-
case MinItemMode:
543-
ParseParams({{"case_sensitive", false, InternalValue(false)}, {"attribute", false}}, params);
540+
case MinItemMode:
541+
ParseParams({{"case_sensitive", false, InternalValue(false)}, {"attribute", false}}, params);
544542
break;
545543
case RandomMode:
546544
case ReverseMode:

src/function_base.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ class FunctionBase
1111
public:
1212
protected:
1313
bool ParseParams(const std::initializer_list<ArgumentInfo>& argsInfo, const CallParams& params);
14-
InternalValue GetArgumentValue(std::string argName, RenderContext& context, InternalValue defVal = InternalValue());
14+
InternalValue GetArgumentValue(const std::string& argName, RenderContext& context, InternalValue defVal = InternalValue());
1515

1616
protected:
1717
ParsedArguments m_args;
@@ -26,7 +26,7 @@ inline bool FunctionBase::ParseParams(const std::initializer_list<ArgumentInfo>&
2626
return result;
2727
}
2828

29-
inline InternalValue FunctionBase::GetArgumentValue(std::string argName, RenderContext& context, InternalValue defVal)
29+
inline InternalValue FunctionBase::GetArgumentValue(const std::string& argName, RenderContext& context, InternalValue defVal)
3030
{
3131
auto argExpr = m_args[argName];
3232
return argExpr ? argExpr->Evaluate(context) : std::move(defVal);

0 commit comments

Comments
 (0)