From e75027b80a19ea7ba535af5539fd056293dfede2 Mon Sep 17 00:00:00 2001 From: csh Date: Sun, 14 Dec 2025 14:06:24 +0800 Subject: [PATCH] :wrench: chore(symbol): trace per-library file indexing - Log each indexed .tsf file at trace level during LoadSystemLibrary. - Include top-level symbol summary when a file is skipped for stem mismatch. --- lsp-server/src/manager/symbol.cppm | 46 +++++++++++++++++++++++++++++- 1 file changed, 45 insertions(+), 1 deletion(-) diff --git a/lsp-server/src/manager/symbol.cppm b/lsp-server/src/manager/symbol.cppm index dd21cfb..75d7720 100644 --- a/lsp-server/src/manager/symbol.cppm +++ b/lsp-server/src/manager/symbol.cppm @@ -248,6 +248,44 @@ namespace lsp::manager } return false; } + + std::string DescribeTopLevelSymbols(const language::symbol::SymbolTable& table) + { + std::vector parts; + for (const auto& wrapper : table.all_definitions()) + { + const auto& symbol = wrapper.get(); + switch (symbol.kind()) + { + case protocol::SymbolKind::Function: + parts.push_back("function:" + symbol.name()); + break; + case protocol::SymbolKind::Class: + parts.push_back("class:" + symbol.name()); + break; + case protocol::SymbolKind::Module: + parts.push_back("unit:" + symbol.name()); + break; + default: + break; + } + } + if (parts.empty()) + { + return ""; + } + + std::string result; + for (std::size_t i = 0; i < parts.size(); ++i) + { + if (i > 0) + { + result += ", "; + } + result += parts[i]; + } + return result; + } } Symbol::Symbol(EventBus& event_bus) : event_bus_(event_bus) @@ -293,9 +331,12 @@ namespace lsp::manager continue; } + spdlog::trace("Indexing library file: {}", entry.path().string()); + auto table = BuildSymbolTableFromFile(entry.path()); if (!table) { + spdlog::trace("Failed to build symbol table for: {}", entry.path().string()); ++failed; continue; } @@ -303,7 +344,10 @@ namespace lsp::manager auto stem = entry.path().stem().string(); if (!HasMatchingTopLevelSymbol(*table, stem)) { - spdlog::warn("Skipping system file {}: top-level symbol does not match file name", entry.path().string()); + spdlog::warn("Skipping system file {}: top-level symbol does not match file name (stem='{}', top-level={})", + entry.path().string(), + stem, + DescribeTopLevelSymbols(*table)); ++failed; continue; }