From 77bcd1c9d60092b8a43ca82ba97e9be0f17c530a Mon Sep 17 00:00:00 2001 From: saqut Date: Fri, 19 Jun 2026 23:03:41 +0300 Subject: [PATCH] =?UTF-8?q?refactor(ast):=20LiteralNode=20ve=20IdentifierN?= =?UTF-8?q?ode=20toJson=20spagetti=20=E2=86=92=20JsonObject?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Elle yönetilen ostringstream + virgül/kapanış manipülasyonu kaldırıldı; VariableDeclNode ile aynı JsonObject builder pattern'ına geçildi. Co-Authored-By: Claude Sonnet 4.6 --- src/parser/nodes/identifier.cpp | 17 ++++++----------- src/parser/nodes/literal.cpp | 28 +++++++++++----------------- 2 files changed, 17 insertions(+), 28 deletions(-) diff --git a/src/parser/nodes/identifier.cpp b/src/parser/nodes/identifier.cpp index f2286de..f30b3b7 100644 --- a/src/parser/nodes/identifier.cpp +++ b/src/parser/nodes/identifier.cpp @@ -1,6 +1,5 @@ #include "parser/nodes/identifier.hpp" #include -#include #include "parser/ast_json.hpp" IdentifierNode::IdentifierNode() { kind = ASTKind::Identifier; } @@ -11,14 +10,10 @@ void IdentifierNode::log(int indent) { } std::string IdentifierNode::toJson(int depth) { - std::string in = jsonIndent(depth); - std::string name = parserToken.token ? parserToken.token->token : "?"; - std::ostringstream ss; - ss << "{\n" - << in << " \"kind\": \"Identifier\",\n" - << in << " \"name\": \"" << jsonEscape(name) << "\",\n" - << in << " \"resolvedType\": " << resolvedTypeJson() << ",\n" - << in << " \"location\": " << loc.toJson() << "\n" - << in << "}"; - return ss.str(); + JsonObject obj(depth); + obj.add("kind", "Identifier"); + obj.add("name", parserToken.token ? parserToken.token->token : "?"); + obj.addRaw("resolvedType", resolvedTypeJson()); + obj.addRaw("location", loc.toJson()); + return obj.str(); } diff --git a/src/parser/nodes/literal.cpp b/src/parser/nodes/literal.cpp index 4b9db1e..73d8983 100644 --- a/src/parser/nodes/literal.cpp +++ b/src/parser/nodes/literal.cpp @@ -1,6 +1,5 @@ #include "parser/nodes/literal.hpp" #include -#include #include "parser/ast_json.hpp" LiteralNode::LiteralNode() { kind = ASTKind::Literal; } @@ -18,22 +17,17 @@ void LiteralNode::log(int indent) { } std::string LiteralNode::toJson(int depth) { - std::string in = jsonIndent(depth); std::string val = hasDirectValue ? std::to_string(directIntValue) : (parserToken.token ? parserToken.token->token : "?"); - std::ostringstream ss; - ss << "{\n" - << in << " \"kind\": \"Literal\",\n" - << in << " \"literalType\": \"" << literalTypeToString(literalType) << "\",\n" - << in << " \"value\": \"" << jsonEscape(val) << "\""; - if (literalType == LiteralType::INTEGER && literalBase != 10) { - ss << ",\n" << in << " \"base\": " << literalBase; - } - if (literalType == LiteralType::FLOAT) { - ss << ",\n" << in << " \"isFloat\": true"; - } - ss << ",\n" << in << " \"resolvedType\": " << resolvedTypeJson(); - ss << ",\n" << in << " \"location\": " << loc.toJson() << "\n" - << in << "}"; - return ss.str(); + JsonObject obj(depth); + obj.add("kind", "Literal"); + obj.add("literalType", literalTypeToString(literalType)); + obj.add("value", val); + if (literalType == LiteralType::INTEGER && literalBase != 10) + obj.add("base", literalBase); + if (literalType == LiteralType::FLOAT) + obj.add("isFloat", true); + obj.addRaw("resolvedType", resolvedTypeJson()); + obj.addRaw("location", loc.toJson()); + return obj.str(); }