From 091669800d6339a3c5c89733aeb16826b70dd775 Mon Sep 17 00:00:00 2001 From: David Malcolm Date: Fri, 10 Apr 2026 18:05:08 -0400 Subject: [PATCH 46/48] FIXME: show IDs in json-rpc log --- gcc/lsp/json-rpc.cc | 18 +++++++++++++++--- gcc/lsp/lsp-logging.cc | 29 ++++++++++++++++++++++++++++- gcc/lsp/lsp-logging.h | 8 ++++++++ 3 files changed, 51 insertions(+), 4 deletions(-) diff --git a/gcc/lsp/json-rpc.cc b/gcc/lsp/json-rpc.cc index 9492fa58330..5b74ae09110 100644 --- a/gcc/lsp/json-rpc.cc +++ b/gcc/lsp/json-rpc.cc @@ -234,8 +234,14 @@ consume_json_message (json::value &&jv_msg) { /* "method" and "id": this is a JSON-RPC request. */ if (logger) - logger->log ("JSON-RPC call(FIXME): \"%s\"", - method_str->get_string ()); + { + logger->start_log_line (); + logger->log_partial ("JSON-RPC request("); + req_id->dump (logger->get_file (), false); + logger->log_partial ("): \"%s\"", + method_str->get_string ()); + logger->end_log_line (); + } json_rpc::request req (method_str->get_string (), std::move (params), std::move (req_id)); @@ -259,7 +265,13 @@ consume_json_message (json::value &&jv_msg) { /* "id" without "method": this is a JSON-RPC response or error. */ if (logger) - logger->log ("JSON-RPC response(FIXME)"); + { + logger->start_log_line (); + logger->log_partial ("JSON-RPC response("); + req_id->dump (logger->get_file (), false); + logger->log_partial (")"); + logger->end_log_line (); + } if (auto result = msg_obj.maybe_take ("result")) { auto resp = json_rpc::response::success (std::move (req_id), diff --git a/gcc/lsp/lsp-logging.cc b/gcc/lsp/lsp-logging.cc index f56a94dbbac..10c056acdb2 100644 --- a/gcc/lsp/lsp-logging.cc +++ b/gcc/lsp/lsp-logging.cc @@ -107,12 +107,39 @@ logger::log (const char *fmt, ...) void logger::log_va (const char *fmt, va_list ap) +{ + start_log_line (); + vfprintf (m_f_out, fmt, ap); + end_log_line (); +} + +void +logger::start_log_line () { emit_start_color (); fprintf (m_f_out, "%s: ", m_prefix.c_str ()); for (int i = 0; i < m_indent_level; i++) fputc (' ', m_f_out); - vfprintf (m_f_out, fmt, ap); +} + +void +logger::log_partial (const char *fmt, ...) +{ + va_list ap; + va_start (ap, fmt); + log_va_partial (fmt, &ap); + va_end (ap); +} + +void +logger::log_va_partial (const char *fmt, va_list *ap) +{ + vfprintf (m_f_out, fmt, *ap); +} + +void +logger::end_log_line () +{ fprintf (m_f_out, "\n"); emit_stop_color (); fflush (m_f_out); diff --git a/gcc/lsp/lsp-logging.h b/gcc/lsp/lsp-logging.h index 6da65a98894..85bb748878a 100644 --- a/gcc/lsp/lsp-logging.h +++ b/gcc/lsp/lsp-logging.h @@ -58,6 +58,12 @@ class logger GNU_PRINTF(2, 3); void log_va (const char *fmt, va_list ap) GNU_PRINTF(2, 0); + void start_log_line (); + void log_partial (const char *fmt, ...) + GNU_PRINTF(2, 3); + void log_va_partial (const char *fmt, va_list *ap) + GNU_PRINTF(2, 0); + void end_log_line (); void enter_scope (const char *scope_name); void exit_scope (const char *scope_name); @@ -65,6 +71,8 @@ class logger void emit_start_color (); void emit_stop_color (); + FILE *get_file () const { return m_f_out; } + private: int m_refcount; FILE *m_f_out; -- 2.49.0