From a59e86a3da15293af3991ec240261331f4cfbb4c Mon Sep 17 00:00:00 2001 From: Vaxry Date: Wed, 7 May 2025 23:03:03 +0100 Subject: [PATCH] parser: change expression syntax to avoid bash clashes changes from $() to {{}} to avoid clashing with bash syntax --- src/config.cpp | 8 ++++---- tests/config/config.conf | 4 ++-- tests/parse/main.cpp | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/config.cpp b/src/config.cpp index a4f99d9..6698f50 100644 --- a/src/config.cpp +++ b/src/config.cpp @@ -644,9 +644,9 @@ CParseResult CConfig::parseLine(std::string line, bool dynamic) { // parse expressions $(somevar + 2) // We only support single expressions for now - while (RHS.contains("$(")) { - const auto BEGIN_EXPR = RHS.find("$("); - const auto END_EXPR = RHS.find(')', BEGIN_EXPR + 2); + while (RHS.contains("{{")) { + const auto BEGIN_EXPR = RHS.find("{{"); + const auto END_EXPR = RHS.find("}}", BEGIN_EXPR + 2); if (END_EXPR != std::string::npos) { // try to parse the expression const auto RESULT = impl->parseExpression(RHS.substr(BEGIN_EXPR + 2, END_EXPR - BEGIN_EXPR - 2)); @@ -655,7 +655,7 @@ CParseResult CConfig::parseLine(std::string line, bool dynamic) { return result; } - RHS = RHS.substr(0, BEGIN_EXPR) + std::format("{}", RESULT.value()) + RHS.substr(END_EXPR + 1); + RHS = RHS.substr(0, BEGIN_EXPR) + std::format("{}", RESULT.value()) + RHS.substr(END_EXPR + 2); } else break; } diff --git a/tests/config/config.conf b/tests/config/config.conf index 0087f1b..9a4450b 100644 --- a/tests/config/config.conf +++ b/tests/config/config.conf @@ -14,8 +14,8 @@ $MY_VAR = 1337 $MY_VAR_2 = $MY_VAR testVar = $MY_VAR$MY_VAR_2 -$EXPR_VAR = $(MY_VAR + 2) -testExpr = $(EXPR_VAR - 4) +$EXPR_VAR = {{MY_VAR + 2}} +testExpr = {{EXPR_VAR - 4}} testEnv = $SHELL diff --git a/tests/parse/main.cpp b/tests/parse/main.cpp index 2ceeb0c..bacd22f 100644 --- a/tests/parse/main.cpp +++ b/tests/parse/main.cpp @@ -249,7 +249,7 @@ int main(int argc, char** argv, char** envp) { EXPECT(std::any_cast(config.getConfigValue("testStringRecursive")), std::string{"dbc"}); // test dynamic exprs - EXPECT(config.parseDynamic("testExpr = $(EXPR_VAR * 2)").error, false); + EXPECT(config.parseDynamic("testExpr = {{EXPR_VAR * 2}}").error, false); EXPECT(std::any_cast(config.getConfigValue("testExpr")), 1339L * 2); // test env variables