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) { 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); return Parser::load_file(input_path / filename);
} }

View File

@@ -63,7 +63,7 @@ public:
size_t pos; size_t pos;
AstNode(size_t pos): pos(pos) {} explicit AstNode(size_t pos): pos(pos) {}
virtual ~AstNode() {} virtual ~AstNode() {}
}; };
@@ -73,7 +73,7 @@ public:
explicit BlockNode(): AstNode(0) {} explicit BlockNode(): AstNode(0) {}
void accept(NodeVisitor& v) const { void accept(NodeVisitor& v) const override {
v.visit(*this); v.visit(*this);
} }
}; };
@@ -84,7 +84,7 @@ public:
explicit TextNode(size_t pos, size_t length): AstNode(pos), length(length) {} 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); v.visit(*this);
} }
}; };
@@ -93,7 +93,7 @@ class ExpressionNode : public AstNode {
public: public:
explicit ExpressionNode(size_t pos): AstNode(pos) {} explicit ExpressionNode(size_t pos): AstNode(pos) {}
void accept(NodeVisitor& v) const { void accept(NodeVisitor& v) const override {
v.visit(*this); 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)) {} 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); 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))) {} 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); v.visit(*this);
} }
}; };
@@ -247,7 +247,7 @@ public:
} }
} }
void accept(NodeVisitor& v) const { void accept(NodeVisitor& v) const override {
v.visit(*this); v.visit(*this);
} }
}; };
@@ -259,14 +259,14 @@ public:
explicit ExpressionListNode(): AstNode(0) {} explicit ExpressionListNode(): AstNode(0) {}
explicit ExpressionListNode(size_t pos): AstNode(pos) {} explicit ExpressionListNode(size_t pos): AstNode(pos) {}
void accept(NodeVisitor& v) const { void accept(NodeVisitor& v) const override {
v.visit(*this); v.visit(*this);
} }
}; };
class StatementNode : public AstNode { class StatementNode : public AstNode {
public: public:
StatementNode(size_t pos): AstNode(pos) {} explicit StatementNode(size_t pos): AstNode(pos) {}
virtual void accept(NodeVisitor& v) const = 0; virtual void accept(NodeVisitor& v) const = 0;
}; };
@@ -277,7 +277,7 @@ public:
BlockNode body; BlockNode body;
BlockNode* const parent; 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; 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) {} 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); v.visit(*this);
} }
}; };
@@ -301,7 +301,7 @@ public:
explicit ForObjectStatementNode(const std::string& key, const std::string& value, BlockNode* const parent, size_t pos) explicit ForObjectStatementNode(const std::string& key, const std::string& value, BlockNode* const parent, size_t pos)
: ForStatementNode(parent, pos), key(key), value(value) {} : ForStatementNode(parent, pos), key(key), value(value) {}
void accept(NodeVisitor& v) const { void accept(NodeVisitor& v) const override {
v.visit(*this); 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(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) {} 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); v.visit(*this);
} }
}; };
@@ -330,7 +330,7 @@ public:
explicit IncludeStatementNode(const std::string& file, size_t pos): StatementNode(pos), file(file) {} 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); v.visit(*this);
} }
}; };
@@ -341,7 +341,7 @@ public:
explicit ExtendsStatementNode(const std::string& file, size_t pos): StatementNode(pos), file(file) {} 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); 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) {} 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); v.visit(*this);
} }
}; };
@@ -366,7 +366,7 @@ public:
explicit SetStatementNode(const std::string& key, size_t pos): StatementNode(pos), key(key) {} 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); v.visit(*this);
} }
}; };

View File

@@ -48,11 +48,11 @@ class Parser {
std::stack<ForStatementNode*> for_statement_stack; std::stack<ForStatementNode*> for_statement_stack;
std::stack<BlockStatementNode*> block_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())); INJA_THROW(ParserError(message, lexer.current_position()));
} }
inline void get_next_token() { void get_next_token() {
if (have_peek_tok) { if (have_peek_tok) {
tok = peek_tok; tok = peek_tok;
have_peek_tok = false; have_peek_tok = false;
@@ -61,19 +61,19 @@ class Parser {
} }
} }
inline void get_peek_token() { void get_peek_token() {
if (!have_peek_tok) { if (!have_peek_tok) {
peek_tok = lexer.scan(); peek_tok = lexer.scan();
have_peek_tok = true; 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()); 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)); 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(); auto function = operator_stack.top();
operator_stack.pop(); operator_stack.pop();

View File

@@ -196,7 +196,7 @@ class Renderer : public NodeVisitor {
return result; return result;
} }
void visit(const BlockNode& node) { void visit(const BlockNode& node) override {
for (const auto& n : node.nodes) { for (const auto& n : node.nodes) {
n->accept(*this); 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); 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); data_eval_stack.push(&node.value);
} }
void visit(const DataNode& node) { void visit(const DataNode& node) override {
if (additional_data.contains(node.ptr)) { if (additional_data.contains(node.ptr)) {
data_eval_stack.push(&(additional_data[node.ptr])); data_eval_stack.push(&(additional_data[node.ptr]));
} else if (data_input->contains(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) { switch (node.operation) {
case Op::Not: { case Op::Not: {
const auto args = get_arguments<1>(node); 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)); 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); const auto result = eval_expression_list(node.condition);
if (!result->is_array()) { if (!result->is_array()) {
throw_renderer_error("object must be an array", node); 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); const auto result = eval_expression_list(node.condition);
if (!result->is_object()) { if (!result->is_object()) {
throw_renderer_error("object must be an object", node); 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); const auto result = eval_expression_list(node.condition);
if (truthy(result.get())) { if (truthy(result.get())) {
node.true_statement.accept(*this); 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); auto sub_renderer = Renderer(config, template_storage, function_storage);
const auto included_template_it = template_storage.find(node.file); const auto included_template_it = template_storage.find(node.file);
if (included_template_it != template_storage.end()) { 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); const auto included_template_it = template_storage.find(node.file);
if (included_template_it != template_storage.end()) { if (included_template_it != template_storage.end()) {
const Template* parent_template = &included_template_it->second; 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; const size_t old_level = current_level;
current_level = 0; current_level = 0;
current_template = template_stack.front(); current_template = template_stack.front();
@@ -646,7 +646,7 @@ class Renderer : public NodeVisitor {
current_template = template_stack.back(); current_template = template_stack.back();
} }
void visit(const SetStatementNode& node) { void visit(const SetStatementNode& node) override {
std::string ptr = node.key; std::string ptr = node.key;
replace_substring(ptr, ".", "/"); replace_substring(ptr, ".", "/");
ptr = "/" + ptr; ptr = "/" + ptr;
@@ -654,7 +654,7 @@ class Renderer : public NodeVisitor {
} }
public: 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) {} : 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) { 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. * \brief A class for counting statistics on a Template.
*/ */
class StatisticsVisitor : public NodeVisitor { class StatisticsVisitor : public NodeVisitor {
void visit(const BlockNode& node) { void visit(const BlockNode& node) override {
for (const auto& n : node.nodes) { for (const auto& n : node.nodes) {
n->accept(*this); n->accept(*this);
} }
} }
void visit(const TextNode&) {} void visit(const TextNode&) override {}
void visit(const ExpressionNode&) {} void visit(const ExpressionNode&) override {}
void visit(const LiteralNode&) {} void visit(const LiteralNode&) override {}
void visit(const DataNode&) { void visit(const DataNode&) override {
variable_counter += 1; variable_counter += 1;
} }
void visit(const FunctionNode& node) { void visit(const FunctionNode& node) override {
for (const auto& n : node.arguments) { for (const auto& n : node.arguments) {
n->accept(*this); n->accept(*this);
} }
} }
void visit(const ExpressionListNode& node) { void visit(const ExpressionListNode& node) override {
node.root->accept(*this); node.root->accept(*this);
} }
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 {
node.condition.accept(*this); node.condition.accept(*this);
node.body.accept(*this); node.body.accept(*this);
} }
void visit(const ForObjectStatementNode& node) { void visit(const ForObjectStatementNode& node) override {
node.condition.accept(*this); node.condition.accept(*this);
node.body.accept(*this); node.body.accept(*this);
} }
void visit(const IfStatementNode& node) { void visit(const IfStatementNode& node) override {
node.condition.accept(*this); node.condition.accept(*this);
node.true_statement.accept(*this); node.true_statement.accept(*this);
node.false_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); node.block.accept(*this);
} }
void visit(const SetStatementNode&) {} void visit(const SetStatementNode&) override {}
public: public:
size_t variable_counter; size_t variable_counter;

View File

@@ -428,7 +428,7 @@ public:
size_t pos; size_t pos;
AstNode(size_t pos): pos(pos) {} explicit AstNode(size_t pos): pos(pos) {}
virtual ~AstNode() {} virtual ~AstNode() {}
}; };
@@ -438,7 +438,7 @@ public:
explicit BlockNode(): AstNode(0) {} explicit BlockNode(): AstNode(0) {}
void accept(NodeVisitor& v) const { void accept(NodeVisitor& v) const override {
v.visit(*this); v.visit(*this);
} }
}; };
@@ -449,7 +449,7 @@ public:
explicit TextNode(size_t pos, size_t length): AstNode(pos), length(length) {} 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); v.visit(*this);
} }
}; };
@@ -458,7 +458,7 @@ class ExpressionNode : public AstNode {
public: public:
explicit ExpressionNode(size_t pos): AstNode(pos) {} explicit ExpressionNode(size_t pos): AstNode(pos) {}
void accept(NodeVisitor& v) const { void accept(NodeVisitor& v) const override {
v.visit(*this); 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)) {} 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); 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))) {} 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); v.visit(*this);
} }
}; };
@@ -612,7 +612,7 @@ public:
} }
} }
void accept(NodeVisitor& v) const { void accept(NodeVisitor& v) const override {
v.visit(*this); v.visit(*this);
} }
}; };
@@ -624,14 +624,14 @@ public:
explicit ExpressionListNode(): AstNode(0) {} explicit ExpressionListNode(): AstNode(0) {}
explicit ExpressionListNode(size_t pos): AstNode(pos) {} explicit ExpressionListNode(size_t pos): AstNode(pos) {}
void accept(NodeVisitor& v) const { void accept(NodeVisitor& v) const override {
v.visit(*this); v.visit(*this);
} }
}; };
class StatementNode : public AstNode { class StatementNode : public AstNode {
public: public:
StatementNode(size_t pos): AstNode(pos) {} explicit StatementNode(size_t pos): AstNode(pos) {}
virtual void accept(NodeVisitor& v) const = 0; virtual void accept(NodeVisitor& v) const = 0;
}; };
@@ -642,7 +642,7 @@ public:
BlockNode body; BlockNode body;
BlockNode* const parent; 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; 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) {} 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); v.visit(*this);
} }
}; };
@@ -666,7 +666,7 @@ public:
explicit ForObjectStatementNode(const std::string& key, const std::string& value, BlockNode* const parent, size_t pos) explicit ForObjectStatementNode(const std::string& key, const std::string& value, BlockNode* const parent, size_t pos)
: ForStatementNode(parent, pos), key(key), value(value) {} : ForStatementNode(parent, pos), key(key), value(value) {}
void accept(NodeVisitor& v) const { void accept(NodeVisitor& v) const override {
v.visit(*this); 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(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) {} 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); v.visit(*this);
} }
}; };
@@ -695,7 +695,7 @@ public:
explicit IncludeStatementNode(const std::string& file, size_t pos): StatementNode(pos), file(file) {} 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); v.visit(*this);
} }
}; };
@@ -706,7 +706,7 @@ public:
explicit ExtendsStatementNode(const std::string& file, size_t pos): StatementNode(pos), file(file) {} 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); 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) {} 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); v.visit(*this);
} }
}; };
@@ -731,7 +731,7 @@ public:
explicit SetStatementNode(const std::string& key, size_t pos): StatementNode(pos), key(key) {} 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); v.visit(*this);
} }
}; };
@@ -753,58 +753,58 @@ namespace inja {
* \brief A class for counting statistics on a Template. * \brief A class for counting statistics on a Template.
*/ */
class StatisticsVisitor : public NodeVisitor { class StatisticsVisitor : public NodeVisitor {
void visit(const BlockNode& node) { void visit(const BlockNode& node) override {
for (const auto& n : node.nodes) { for (const auto& n : node.nodes) {
n->accept(*this); n->accept(*this);
} }
} }
void visit(const TextNode&) {} void visit(const TextNode&) override {}
void visit(const ExpressionNode&) {} void visit(const ExpressionNode&) override {}
void visit(const LiteralNode&) {} void visit(const LiteralNode&) override {}
void visit(const DataNode&) { void visit(const DataNode&) override {
variable_counter += 1; variable_counter += 1;
} }
void visit(const FunctionNode& node) { void visit(const FunctionNode& node) override {
for (const auto& n : node.arguments) { for (const auto& n : node.arguments) {
n->accept(*this); n->accept(*this);
} }
} }
void visit(const ExpressionListNode& node) { void visit(const ExpressionListNode& node) override {
node.root->accept(*this); node.root->accept(*this);
} }
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 {
node.condition.accept(*this); node.condition.accept(*this);
node.body.accept(*this); node.body.accept(*this);
} }
void visit(const ForObjectStatementNode& node) { void visit(const ForObjectStatementNode& node) override {
node.condition.accept(*this); node.condition.accept(*this);
node.body.accept(*this); node.body.accept(*this);
} }
void visit(const IfStatementNode& node) { void visit(const IfStatementNode& node) override {
node.condition.accept(*this); node.condition.accept(*this);
node.true_statement.accept(*this); node.true_statement.accept(*this);
node.false_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); node.block.accept(*this);
} }
void visit(const SetStatementNode&) {} void visit(const SetStatementNode&) override {}
public: public:
size_t variable_counter; size_t variable_counter;
@@ -1498,11 +1498,11 @@ class Parser {
std::stack<ForStatementNode*> for_statement_stack; std::stack<ForStatementNode*> for_statement_stack;
std::stack<BlockStatementNode*> block_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())); INJA_THROW(ParserError(message, lexer.current_position()));
} }
inline void get_next_token() { void get_next_token() {
if (have_peek_tok) { if (have_peek_tok) {
tok = peek_tok; tok = peek_tok;
have_peek_tok = false; have_peek_tok = false;
@@ -1511,19 +1511,19 @@ class Parser {
} }
} }
inline void get_peek_token() { void get_peek_token() {
if (!have_peek_tok) { if (!have_peek_tok) {
peek_tok = lexer.scan(); peek_tok = lexer.scan();
have_peek_tok = true; 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()); 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)); 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(); auto function = operator_stack.top();
operator_stack.pop(); operator_stack.pop();
@@ -2349,7 +2349,7 @@ class Renderer : public NodeVisitor {
return result; return result;
} }
void visit(const BlockNode& node) { void visit(const BlockNode& node) override {
for (const auto& n : node.nodes) { for (const auto& n : node.nodes) {
n->accept(*this); 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); 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); data_eval_stack.push(&node.value);
} }
void visit(const DataNode& node) { void visit(const DataNode& node) override {
if (additional_data.contains(node.ptr)) { if (additional_data.contains(node.ptr)) {
data_eval_stack.push(&(additional_data[node.ptr])); data_eval_stack.push(&(additional_data[node.ptr]));
} else if (data_input->contains(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) { switch (node.operation) {
case Op::Not: { case Op::Not: {
const auto args = get_arguments<1>(node); 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)); 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); const auto result = eval_expression_list(node.condition);
if (!result->is_array()) { if (!result->is_array()) {
throw_renderer_error("object must be an array", node); 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); const auto result = eval_expression_list(node.condition);
if (!result->is_object()) { if (!result->is_object()) {
throw_renderer_error("object must be an object", node); 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); const auto result = eval_expression_list(node.condition);
if (truthy(result.get())) { if (truthy(result.get())) {
node.true_statement.accept(*this); 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); auto sub_renderer = Renderer(config, template_storage, function_storage);
const auto included_template_it = template_storage.find(node.file); const auto included_template_it = template_storage.find(node.file);
if (included_template_it != template_storage.end()) { 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); const auto included_template_it = template_storage.find(node.file);
if (included_template_it != template_storage.end()) { if (included_template_it != template_storage.end()) {
const Template* parent_template = &included_template_it->second; 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; const size_t old_level = current_level;
current_level = 0; current_level = 0;
current_template = template_stack.front(); current_template = template_stack.front();
@@ -2799,7 +2799,7 @@ class Renderer : public NodeVisitor {
current_template = template_stack.back(); current_template = template_stack.back();
} }
void visit(const SetStatementNode& node) { void visit(const SetStatementNode& node) override {
std::string ptr = node.key; std::string ptr = node.key;
replace_substring(ptr, ".", "/"); replace_substring(ptr, ".", "/");
ptr = "/" + ptr; ptr = "/" + ptr;
@@ -2807,7 +2807,7 @@ class Renderer : public NodeVisitor {
} }
public: 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) {} : 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) { 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) { 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); return Parser::load_file(input_path / filename);
} }