fix some clang-tidy warnings

This commit is contained in:
pantor
2025-10-18 06:42:10 -07:00
parent edab682601
commit 4c6b263c2f
6 changed files with 112 additions and 112 deletions

View File

@@ -164,7 +164,7 @@ public:
}
std::string load_file(const std::string& filename) {
Parser parser(parser_config, lexer_config, template_storage, function_storage);
const Parser parser(parser_config, lexer_config, template_storage, function_storage);
return Parser::load_file(input_path / filename);
}

View File

@@ -63,7 +63,7 @@ public:
size_t pos;
AstNode(size_t pos): pos(pos) {}
explicit AstNode(size_t pos): pos(pos) {}
virtual ~AstNode() {}
};
@@ -73,7 +73,7 @@ public:
explicit BlockNode(): AstNode(0) {}
void accept(NodeVisitor& v) const {
void accept(NodeVisitor& v) const override {
v.visit(*this);
}
};
@@ -84,7 +84,7 @@ public:
explicit TextNode(size_t pos, size_t length): AstNode(pos), length(length) {}
void accept(NodeVisitor& v) const {
void accept(NodeVisitor& v) const override {
v.visit(*this);
}
};
@@ -93,7 +93,7 @@ class ExpressionNode : public AstNode {
public:
explicit ExpressionNode(size_t pos): AstNode(pos) {}
void accept(NodeVisitor& v) const {
void accept(NodeVisitor& v) const override {
v.visit(*this);
}
};
@@ -104,7 +104,7 @@ public:
explicit LiteralNode(std::string_view data_text, size_t pos): ExpressionNode(pos), value(json::parse(data_text)) {}
void accept(NodeVisitor& v) const {
void accept(NodeVisitor& v) const override {
v.visit(*this);
}
};
@@ -127,7 +127,7 @@ public:
explicit DataNode(std::string_view ptr_name, size_t pos): ExpressionNode(pos), name(ptr_name), ptr(json::json_pointer(convert_dot_to_ptr(ptr_name))) {}
void accept(NodeVisitor& v) const {
void accept(NodeVisitor& v) const override {
v.visit(*this);
}
};
@@ -247,7 +247,7 @@ public:
}
}
void accept(NodeVisitor& v) const {
void accept(NodeVisitor& v) const override {
v.visit(*this);
}
};
@@ -259,14 +259,14 @@ public:
explicit ExpressionListNode(): AstNode(0) {}
explicit ExpressionListNode(size_t pos): AstNode(pos) {}
void accept(NodeVisitor& v) const {
void accept(NodeVisitor& v) const override {
v.visit(*this);
}
};
class StatementNode : public AstNode {
public:
StatementNode(size_t pos): AstNode(pos) {}
explicit StatementNode(size_t pos): AstNode(pos) {}
virtual void accept(NodeVisitor& v) const = 0;
};
@@ -277,7 +277,7 @@ public:
BlockNode body;
BlockNode* const parent;
ForStatementNode(BlockNode* const parent, size_t pos): StatementNode(pos), parent(parent) {}
explicit ForStatementNode(BlockNode* const parent, size_t pos): StatementNode(pos), parent(parent) {}
virtual void accept(NodeVisitor& v) const = 0;
};
@@ -288,7 +288,7 @@ public:
explicit ForArrayStatementNode(const std::string& value, BlockNode* const parent, size_t pos): ForStatementNode(parent, pos), value(value) {}
void accept(NodeVisitor& v) const {
void accept(NodeVisitor& v) const override {
v.visit(*this);
}
};
@@ -301,7 +301,7 @@ public:
explicit ForObjectStatementNode(const std::string& key, const std::string& value, BlockNode* const parent, size_t pos)
: ForStatementNode(parent, pos), key(key), value(value) {}
void accept(NodeVisitor& v) const {
void accept(NodeVisitor& v) const override {
v.visit(*this);
}
};
@@ -319,7 +319,7 @@ public:
explicit IfStatementNode(BlockNode* const parent, size_t pos): StatementNode(pos), parent(parent), is_nested(false) {}
explicit IfStatementNode(bool is_nested, BlockNode* const parent, size_t pos): StatementNode(pos), parent(parent), is_nested(is_nested) {}
void accept(NodeVisitor& v) const {
void accept(NodeVisitor& v) const override {
v.visit(*this);
}
};
@@ -330,7 +330,7 @@ public:
explicit IncludeStatementNode(const std::string& file, size_t pos): StatementNode(pos), file(file) {}
void accept(NodeVisitor& v) const {
void accept(NodeVisitor& v) const override {
v.visit(*this);
}
};
@@ -341,7 +341,7 @@ public:
explicit ExtendsStatementNode(const std::string& file, size_t pos): StatementNode(pos), file(file) {}
void accept(NodeVisitor& v) const {
void accept(NodeVisitor& v) const override {
v.visit(*this);
}
};
@@ -354,7 +354,7 @@ public:
explicit BlockStatementNode(BlockNode* const parent, const std::string& name, size_t pos): StatementNode(pos), name(name), parent(parent) {}
void accept(NodeVisitor& v) const {
void accept(NodeVisitor& v) const override {
v.visit(*this);
}
};
@@ -366,7 +366,7 @@ public:
explicit SetStatementNode(const std::string& key, size_t pos): StatementNode(pos), key(key) {}
void accept(NodeVisitor& v) const {
void accept(NodeVisitor& v) const override {
v.visit(*this);
}
};

View File

@@ -48,11 +48,11 @@ class Parser {
std::stack<ForStatementNode*> for_statement_stack;
std::stack<BlockStatementNode*> block_statement_stack;
inline void throw_parser_error(const std::string& message) const {
void throw_parser_error(const std::string& message) const {
INJA_THROW(ParserError(message, lexer.current_position()));
}
inline void get_next_token() {
void get_next_token() {
if (have_peek_tok) {
tok = peek_tok;
have_peek_tok = false;
@@ -61,19 +61,19 @@ class Parser {
}
}
inline void get_peek_token() {
void get_peek_token() {
if (!have_peek_tok) {
peek_tok = lexer.scan();
have_peek_tok = true;
}
}
inline void add_literal(Arguments &arguments, const char* content_ptr) {
void add_literal(Arguments &arguments, const char* content_ptr) {
const std::string_view data_text(literal_start.data(), tok.text.data() - literal_start.data() + tok.text.size());
arguments.emplace_back(std::make_shared<LiteralNode>(data_text, data_text.data() - content_ptr));
}
inline void add_operator(Arguments &arguments, OperatorStack &operator_stack) {
void add_operator(Arguments &arguments, OperatorStack &operator_stack) {
auto function = operator_stack.top();
operator_stack.pop();

View File

@@ -196,7 +196,7 @@ class Renderer : public NodeVisitor {
return result;
}
void visit(const BlockNode& node) {
void visit(const BlockNode& node) override {
for (const auto& n : node.nodes) {
n->accept(*this);
@@ -206,17 +206,17 @@ class Renderer : public NodeVisitor {
}
}
void visit(const TextNode& node) {
void visit(const TextNode& node) override {
output_stream->write(current_template->content.c_str() + node.pos, node.length);
}
void visit(const ExpressionNode&) {}
void visit(const ExpressionNode&) override {}
void visit(const LiteralNode& node) {
void visit(const LiteralNode& node) override {
data_eval_stack.push(&node.value);
}
void visit(const DataNode& node) {
void visit(const DataNode& node) override {
if (additional_data.contains(node.ptr)) {
data_eval_stack.push(&(additional_data[node.ptr]));
} else if (data_input->contains(node.ptr)) {
@@ -236,7 +236,7 @@ class Renderer : public NodeVisitor {
}
}
void visit(const FunctionNode& node) {
void visit(const FunctionNode& node) override {
switch (node.operation) {
case Op::Not: {
const auto args = get_arguments<1>(node);
@@ -516,15 +516,15 @@ class Renderer : public NodeVisitor {
}
}
void visit(const ExpressionListNode& node) {
void visit(const ExpressionListNode& node) override {
print_data(eval_expression_list(node));
}
void visit(const StatementNode&) {}
void visit(const StatementNode&) override {}
void visit(const ForStatementNode&) {}
void visit(const ForStatementNode&) override {}
void visit(const ForArrayStatementNode& node) {
void visit(const ForArrayStatementNode& node) override {
const auto result = eval_expression_list(node.condition);
if (!result->is_array()) {
throw_renderer_error("object must be an array", node);
@@ -563,7 +563,7 @@ class Renderer : public NodeVisitor {
}
}
void visit(const ForObjectStatementNode& node) {
void visit(const ForObjectStatementNode& node) override {
const auto result = eval_expression_list(node.condition);
if (!result->is_object()) {
throw_renderer_error("object must be an object", node);
@@ -602,7 +602,7 @@ class Renderer : public NodeVisitor {
}
}
void visit(const IfStatementNode& node) {
void visit(const IfStatementNode& node) override {
const auto result = eval_expression_list(node.condition);
if (truthy(result.get())) {
node.true_statement.accept(*this);
@@ -611,7 +611,7 @@ class Renderer : public NodeVisitor {
}
}
void visit(const IncludeStatementNode& node) {
void visit(const IncludeStatementNode& node) override {
auto sub_renderer = Renderer(config, template_storage, function_storage);
const auto included_template_it = template_storage.find(node.file);
if (included_template_it != template_storage.end()) {
@@ -621,7 +621,7 @@ class Renderer : public NodeVisitor {
}
}
void visit(const ExtendsStatementNode& node) {
void visit(const ExtendsStatementNode& node) override {
const auto included_template_it = template_storage.find(node.file);
if (included_template_it != template_storage.end()) {
const Template* parent_template = &included_template_it->second;
@@ -632,7 +632,7 @@ class Renderer : public NodeVisitor {
}
}
void visit(const BlockStatementNode& node) {
void visit(const BlockStatementNode& node) override {
const size_t old_level = current_level;
current_level = 0;
current_template = template_stack.front();
@@ -646,7 +646,7 @@ class Renderer : public NodeVisitor {
current_template = template_stack.back();
}
void visit(const SetStatementNode& node) {
void visit(const SetStatementNode& node) override {
std::string ptr = node.key;
replace_substring(ptr, ".", "/");
ptr = "/" + ptr;
@@ -654,7 +654,7 @@ class Renderer : public NodeVisitor {
}
public:
Renderer(const RenderConfig& config, const TemplateStorage& template_storage, const FunctionStorage& function_storage)
explicit Renderer(const RenderConfig& config, const TemplateStorage& template_storage, const FunctionStorage& function_storage)
: config(config), template_storage(template_storage), function_storage(function_storage) {}
void render_to(std::ostream& os, const Template& tmpl, const json& data, json* loop_data = nullptr) {

View File

@@ -9,58 +9,58 @@ namespace inja {
* \brief A class for counting statistics on a Template.
*/
class StatisticsVisitor : public NodeVisitor {
void visit(const BlockNode& node) {
void visit(const BlockNode& node) override {
for (const auto& n : node.nodes) {
n->accept(*this);
}
}
void visit(const TextNode&) {}
void visit(const ExpressionNode&) {}
void visit(const LiteralNode&) {}
void visit(const TextNode&) override {}
void visit(const ExpressionNode&) override {}
void visit(const LiteralNode&) override {}
void visit(const DataNode&) {
void visit(const DataNode&) override {
variable_counter += 1;
}
void visit(const FunctionNode& node) {
void visit(const FunctionNode& node) override {
for (const auto& n : node.arguments) {
n->accept(*this);
}
}
void visit(const ExpressionListNode& node) {
void visit(const ExpressionListNode& node) override {
node.root->accept(*this);
}
void visit(const StatementNode&) {}
void visit(const ForStatementNode&) {}
void visit(const StatementNode&) override {}
void visit(const ForStatementNode&) override {}
void visit(const ForArrayStatementNode& node) {
void visit(const ForArrayStatementNode& node) override {
node.condition.accept(*this);
node.body.accept(*this);
}
void visit(const ForObjectStatementNode& node) {
void visit(const ForObjectStatementNode& node) override {
node.condition.accept(*this);
node.body.accept(*this);
}
void visit(const IfStatementNode& node) {
void visit(const IfStatementNode& node) override {
node.condition.accept(*this);
node.true_statement.accept(*this);
node.false_statement.accept(*this);
}
void visit(const IncludeStatementNode&) {}
void visit(const IncludeStatementNode&) override {}
void visit(const ExtendsStatementNode&) {}
void visit(const ExtendsStatementNode&) override {}
void visit(const BlockStatementNode& node) {
void visit(const BlockStatementNode& node) override {
node.block.accept(*this);
}
void visit(const SetStatementNode&) {}
void visit(const SetStatementNode&) override {}
public:
size_t variable_counter;

View File

@@ -428,7 +428,7 @@ public:
size_t pos;
AstNode(size_t pos): pos(pos) {}
explicit AstNode(size_t pos): pos(pos) {}
virtual ~AstNode() {}
};
@@ -438,7 +438,7 @@ public:
explicit BlockNode(): AstNode(0) {}
void accept(NodeVisitor& v) const {
void accept(NodeVisitor& v) const override {
v.visit(*this);
}
};
@@ -449,7 +449,7 @@ public:
explicit TextNode(size_t pos, size_t length): AstNode(pos), length(length) {}
void accept(NodeVisitor& v) const {
void accept(NodeVisitor& v) const override {
v.visit(*this);
}
};
@@ -458,7 +458,7 @@ class ExpressionNode : public AstNode {
public:
explicit ExpressionNode(size_t pos): AstNode(pos) {}
void accept(NodeVisitor& v) const {
void accept(NodeVisitor& v) const override {
v.visit(*this);
}
};
@@ -469,7 +469,7 @@ public:
explicit LiteralNode(std::string_view data_text, size_t pos): ExpressionNode(pos), value(json::parse(data_text)) {}
void accept(NodeVisitor& v) const {
void accept(NodeVisitor& v) const override {
v.visit(*this);
}
};
@@ -492,7 +492,7 @@ public:
explicit DataNode(std::string_view ptr_name, size_t pos): ExpressionNode(pos), name(ptr_name), ptr(json::json_pointer(convert_dot_to_ptr(ptr_name))) {}
void accept(NodeVisitor& v) const {
void accept(NodeVisitor& v) const override {
v.visit(*this);
}
};
@@ -612,7 +612,7 @@ public:
}
}
void accept(NodeVisitor& v) const {
void accept(NodeVisitor& v) const override {
v.visit(*this);
}
};
@@ -624,14 +624,14 @@ public:
explicit ExpressionListNode(): AstNode(0) {}
explicit ExpressionListNode(size_t pos): AstNode(pos) {}
void accept(NodeVisitor& v) const {
void accept(NodeVisitor& v) const override {
v.visit(*this);
}
};
class StatementNode : public AstNode {
public:
StatementNode(size_t pos): AstNode(pos) {}
explicit StatementNode(size_t pos): AstNode(pos) {}
virtual void accept(NodeVisitor& v) const = 0;
};
@@ -642,7 +642,7 @@ public:
BlockNode body;
BlockNode* const parent;
ForStatementNode(BlockNode* const parent, size_t pos): StatementNode(pos), parent(parent) {}
explicit ForStatementNode(BlockNode* const parent, size_t pos): StatementNode(pos), parent(parent) {}
virtual void accept(NodeVisitor& v) const = 0;
};
@@ -653,7 +653,7 @@ public:
explicit ForArrayStatementNode(const std::string& value, BlockNode* const parent, size_t pos): ForStatementNode(parent, pos), value(value) {}
void accept(NodeVisitor& v) const {
void accept(NodeVisitor& v) const override {
v.visit(*this);
}
};
@@ -666,7 +666,7 @@ public:
explicit ForObjectStatementNode(const std::string& key, const std::string& value, BlockNode* const parent, size_t pos)
: ForStatementNode(parent, pos), key(key), value(value) {}
void accept(NodeVisitor& v) const {
void accept(NodeVisitor& v) const override {
v.visit(*this);
}
};
@@ -684,7 +684,7 @@ public:
explicit IfStatementNode(BlockNode* const parent, size_t pos): StatementNode(pos), parent(parent), is_nested(false) {}
explicit IfStatementNode(bool is_nested, BlockNode* const parent, size_t pos): StatementNode(pos), parent(parent), is_nested(is_nested) {}
void accept(NodeVisitor& v) const {
void accept(NodeVisitor& v) const override {
v.visit(*this);
}
};
@@ -695,7 +695,7 @@ public:
explicit IncludeStatementNode(const std::string& file, size_t pos): StatementNode(pos), file(file) {}
void accept(NodeVisitor& v) const {
void accept(NodeVisitor& v) const override {
v.visit(*this);
}
};
@@ -706,7 +706,7 @@ public:
explicit ExtendsStatementNode(const std::string& file, size_t pos): StatementNode(pos), file(file) {}
void accept(NodeVisitor& v) const {
void accept(NodeVisitor& v) const override {
v.visit(*this);
}
};
@@ -719,7 +719,7 @@ public:
explicit BlockStatementNode(BlockNode* const parent, const std::string& name, size_t pos): StatementNode(pos), name(name), parent(parent) {}
void accept(NodeVisitor& v) const {
void accept(NodeVisitor& v) const override {
v.visit(*this);
}
};
@@ -731,7 +731,7 @@ public:
explicit SetStatementNode(const std::string& key, size_t pos): StatementNode(pos), key(key) {}
void accept(NodeVisitor& v) const {
void accept(NodeVisitor& v) const override {
v.visit(*this);
}
};
@@ -753,58 +753,58 @@ namespace inja {
* \brief A class for counting statistics on a Template.
*/
class StatisticsVisitor : public NodeVisitor {
void visit(const BlockNode& node) {
void visit(const BlockNode& node) override {
for (const auto& n : node.nodes) {
n->accept(*this);
}
}
void visit(const TextNode&) {}
void visit(const ExpressionNode&) {}
void visit(const LiteralNode&) {}
void visit(const TextNode&) override {}
void visit(const ExpressionNode&) override {}
void visit(const LiteralNode&) override {}
void visit(const DataNode&) {
void visit(const DataNode&) override {
variable_counter += 1;
}
void visit(const FunctionNode& node) {
void visit(const FunctionNode& node) override {
for (const auto& n : node.arguments) {
n->accept(*this);
}
}
void visit(const ExpressionListNode& node) {
void visit(const ExpressionListNode& node) override {
node.root->accept(*this);
}
void visit(const StatementNode&) {}
void visit(const ForStatementNode&) {}
void visit(const StatementNode&) override {}
void visit(const ForStatementNode&) override {}
void visit(const ForArrayStatementNode& node) {
void visit(const ForArrayStatementNode& node) override {
node.condition.accept(*this);
node.body.accept(*this);
}
void visit(const ForObjectStatementNode& node) {
void visit(const ForObjectStatementNode& node) override {
node.condition.accept(*this);
node.body.accept(*this);
}
void visit(const IfStatementNode& node) {
void visit(const IfStatementNode& node) override {
node.condition.accept(*this);
node.true_statement.accept(*this);
node.false_statement.accept(*this);
}
void visit(const IncludeStatementNode&) {}
void visit(const IncludeStatementNode&) override {}
void visit(const ExtendsStatementNode&) {}
void visit(const ExtendsStatementNode&) override {}
void visit(const BlockStatementNode& node) {
void visit(const BlockStatementNode& node) override {
node.block.accept(*this);
}
void visit(const SetStatementNode&) {}
void visit(const SetStatementNode&) override {}
public:
size_t variable_counter;
@@ -1498,11 +1498,11 @@ class Parser {
std::stack<ForStatementNode*> for_statement_stack;
std::stack<BlockStatementNode*> block_statement_stack;
inline void throw_parser_error(const std::string& message) const {
void throw_parser_error(const std::string& message) const {
INJA_THROW(ParserError(message, lexer.current_position()));
}
inline void get_next_token() {
void get_next_token() {
if (have_peek_tok) {
tok = peek_tok;
have_peek_tok = false;
@@ -1511,19 +1511,19 @@ class Parser {
}
}
inline void get_peek_token() {
void get_peek_token() {
if (!have_peek_tok) {
peek_tok = lexer.scan();
have_peek_tok = true;
}
}
inline void add_literal(Arguments &arguments, const char* content_ptr) {
void add_literal(Arguments &arguments, const char* content_ptr) {
const std::string_view data_text(literal_start.data(), tok.text.data() - literal_start.data() + tok.text.size());
arguments.emplace_back(std::make_shared<LiteralNode>(data_text, data_text.data() - content_ptr));
}
inline void add_operator(Arguments &arguments, OperatorStack &operator_stack) {
void add_operator(Arguments &arguments, OperatorStack &operator_stack) {
auto function = operator_stack.top();
operator_stack.pop();
@@ -2349,7 +2349,7 @@ class Renderer : public NodeVisitor {
return result;
}
void visit(const BlockNode& node) {
void visit(const BlockNode& node) override {
for (const auto& n : node.nodes) {
n->accept(*this);
@@ -2359,17 +2359,17 @@ class Renderer : public NodeVisitor {
}
}
void visit(const TextNode& node) {
void visit(const TextNode& node) override {
output_stream->write(current_template->content.c_str() + node.pos, node.length);
}
void visit(const ExpressionNode&) {}
void visit(const ExpressionNode&) override {}
void visit(const LiteralNode& node) {
void visit(const LiteralNode& node) override {
data_eval_stack.push(&node.value);
}
void visit(const DataNode& node) {
void visit(const DataNode& node) override {
if (additional_data.contains(node.ptr)) {
data_eval_stack.push(&(additional_data[node.ptr]));
} else if (data_input->contains(node.ptr)) {
@@ -2389,7 +2389,7 @@ class Renderer : public NodeVisitor {
}
}
void visit(const FunctionNode& node) {
void visit(const FunctionNode& node) override {
switch (node.operation) {
case Op::Not: {
const auto args = get_arguments<1>(node);
@@ -2669,15 +2669,15 @@ class Renderer : public NodeVisitor {
}
}
void visit(const ExpressionListNode& node) {
void visit(const ExpressionListNode& node) override {
print_data(eval_expression_list(node));
}
void visit(const StatementNode&) {}
void visit(const StatementNode&) override {}
void visit(const ForStatementNode&) {}
void visit(const ForStatementNode&) override {}
void visit(const ForArrayStatementNode& node) {
void visit(const ForArrayStatementNode& node) override {
const auto result = eval_expression_list(node.condition);
if (!result->is_array()) {
throw_renderer_error("object must be an array", node);
@@ -2716,7 +2716,7 @@ class Renderer : public NodeVisitor {
}
}
void visit(const ForObjectStatementNode& node) {
void visit(const ForObjectStatementNode& node) override {
const auto result = eval_expression_list(node.condition);
if (!result->is_object()) {
throw_renderer_error("object must be an object", node);
@@ -2755,7 +2755,7 @@ class Renderer : public NodeVisitor {
}
}
void visit(const IfStatementNode& node) {
void visit(const IfStatementNode& node) override {
const auto result = eval_expression_list(node.condition);
if (truthy(result.get())) {
node.true_statement.accept(*this);
@@ -2764,7 +2764,7 @@ class Renderer : public NodeVisitor {
}
}
void visit(const IncludeStatementNode& node) {
void visit(const IncludeStatementNode& node) override {
auto sub_renderer = Renderer(config, template_storage, function_storage);
const auto included_template_it = template_storage.find(node.file);
if (included_template_it != template_storage.end()) {
@@ -2774,7 +2774,7 @@ class Renderer : public NodeVisitor {
}
}
void visit(const ExtendsStatementNode& node) {
void visit(const ExtendsStatementNode& node) override {
const auto included_template_it = template_storage.find(node.file);
if (included_template_it != template_storage.end()) {
const Template* parent_template = &included_template_it->second;
@@ -2785,7 +2785,7 @@ class Renderer : public NodeVisitor {
}
}
void visit(const BlockStatementNode& node) {
void visit(const BlockStatementNode& node) override {
const size_t old_level = current_level;
current_level = 0;
current_template = template_stack.front();
@@ -2799,7 +2799,7 @@ class Renderer : public NodeVisitor {
current_template = template_stack.back();
}
void visit(const SetStatementNode& node) {
void visit(const SetStatementNode& node) override {
std::string ptr = node.key;
replace_substring(ptr, ".", "/");
ptr = "/" + ptr;
@@ -2807,7 +2807,7 @@ class Renderer : public NodeVisitor {
}
public:
Renderer(const RenderConfig& config, const TemplateStorage& template_storage, const FunctionStorage& function_storage)
explicit Renderer(const RenderConfig& config, const TemplateStorage& template_storage, const FunctionStorage& function_storage)
: config(config), template_storage(template_storage), function_storage(function_storage) {}
void render_to(std::ostream& os, const Template& tmpl, const json& data, json* loop_data = nullptr) {
@@ -2983,7 +2983,7 @@ public:
}
std::string load_file(const std::string& filename) {
Parser parser(parser_config, lexer_config, template_storage, function_storage);
const Parser parser(parser_config, lexer_config, template_storage, function_storage);
return Parser::load_file(input_path / filename);
}