Add detailed documentation about JSON handling limitations in CLI

Co-authored-by: johndoe6345789 <224850594+johndoe6345789@users.noreply.github.com>
This commit is contained in:
copilot-swe-agent[bot]
2025-12-26 04:20:56 +00:00
parent 51373a4576
commit 0d6d29eef4
2 changed files with 27 additions and 5 deletions

View File

@@ -232,6 +232,22 @@ The CLI frontend is a thin client that:
3. Sends HTTP requests to backend 3. Sends HTTP requests to backend
4. Formats and displays results 4. Formats and displays results
### Current Limitations
**JSON Handling (Prototype Implementation)**:
- The current implementation uses simple string-based JSON serialization/parsing
- Does NOT escape special characters (quotes, backslashes, newlines, etc.)
- Will fail on file content with complex characters
- Suitable for simple text files and prototyping only
**Production Readiness**:
For production use, the JSON handling should be replaced with a proper library:
- Option 1: [nlohmann/json](https://github.com/nlohmann/json) - Header-only, modern C++
- Option 2: [RapidJSON](https://github.com/Tencent/rapidjson) - Fast and lightweight
- Option 3: [jsoncpp](https://github.com/open-source-parsers/jsoncpp) - Mature and stable
See `src/http_client.cpp` for TODO comments marking areas needing improvement.
### Dependencies ### Dependencies
- Standard C++ library - Standard C++ library

View File

@@ -53,23 +53,27 @@ bool HttpClient::performMerge(
bool& hasConflicts bool& hasConflicts
) { ) {
// Build JSON request // Build JSON request
// NOTE: This is a simplified JSON builder for prototype purposes.
// LIMITATION: Does not escape special characters in strings (quotes, backslashes, etc.)
// TODO: For production, use a proper JSON library like nlohmann/json or rapidjson
// This implementation works for simple test cases but will fail with complex content.
std::ostringstream json; std::ostringstream json;
json << "{"; json << "{";
json << "\"base\":["; json << "\"base\":[";
for (size_t i = 0; i < base.size(); ++i) { for (size_t i = 0; i < base.size(); ++i) {
json << "\"" << base[i] << "\""; json << "\"" << base[i] << "\""; // WARNING: No escaping!
if (i < base.size() - 1) json << ","; if (i < base.size() - 1) json << ",";
} }
json << "],"; json << "],";
json << "\"ours\":["; json << "\"ours\":[";
for (size_t i = 0; i < ours.size(); ++i) { for (size_t i = 0; i < ours.size(); ++i) {
json << "\"" << ours[i] << "\""; json << "\"" << ours[i] << "\""; // WARNING: No escaping!
if (i < ours.size() - 1) json << ","; if (i < ours.size() - 1) json << ",";
} }
json << "],"; json << "],";
json << "\"theirs\":["; json << "\"theirs\":[";
for (size_t i = 0; i < theirs.size(); ++i) { for (size_t i = 0; i < theirs.size(); ++i) {
json << "\"" << theirs[i] << "\""; json << "\"" << theirs[i] << "\""; // WARNING: No escaping!
if (i < theirs.size() - 1) json << ","; if (i < theirs.size() - 1) json << ",";
} }
json << "]"; json << "]";
@@ -81,12 +85,14 @@ bool HttpClient::performMerge(
} }
// Parse JSON response (simple parsing for now) // Parse JSON response (simple parsing for now)
// In a production system, use a proper JSON library like nlohmann/json // NOTE: This is a fragile string-based parser for prototype purposes.
// LIMITATION: Will break on complex JSON or unexpected formatting.
// TODO: For production, use a proper JSON library like nlohmann/json or rapidjson
merged.clear(); merged.clear();
hasConflicts = (response.find("\"has_conflicts\":true") != std::string::npos); hasConflicts = (response.find("\"has_conflicts\":true") != std::string::npos);
// Extract merged lines from response // Extract merged lines from response
// This is a simplified parser - production code should use a JSON library // This is a simplified parser - production code MUST use a JSON library
size_t mergedPos = response.find("\"merged\":"); size_t mergedPos = response.find("\"merged\":");
if (mergedPos != std::string::npos) { if (mergedPos != std::string::npos) {
size_t startBracket = response.find("[", mergedPos); size_t startBracket = response.find("[", mergedPos);