https://github.com/charles-zablit updated https://github.com/llvm/llvm-project/pull/168603
>From 2cc2c6b71bd9074464f3a979a1327f0d61ecdb5e Mon Sep 17 00:00:00 2001 From: Charles Zablit <[email protected]> Date: Wed, 19 Nov 2025 12:10:08 +0100 Subject: [PATCH 1/4] [NFC][lldb] move DiagnosticsRendering to Host --- lldb/include/lldb/Expression/DiagnosticManager.h | 2 +- .../lldb/{Utility => Host/common}/DiagnosticsRendering.h | 0 lldb/include/lldb/Interpreter/CommandReturnObject.h | 2 +- lldb/include/lldb/ValueObject/DILParser.h | 2 +- lldb/source/Commands/CommandObjectExpression.cpp | 2 +- lldb/source/Host/CMakeLists.txt | 1 + lldb/source/{Utility => Host/common}/DiagnosticsRendering.cpp | 2 +- lldb/source/Interpreter/CommandReturnObject.cpp | 2 +- lldb/source/Interpreter/Options.cpp | 2 +- lldb/source/Utility/CMakeLists.txt | 1 - lldb/source/ValueObject/DILParser.cpp | 2 +- lldb/unittests/Utility/DiagnosticsRenderingTest.cpp | 2 +- llvm/utils/gn/secondary/lldb/source/Host/BUILD.gn | 1 + llvm/utils/gn/secondary/lldb/source/Utility/BUILD.gn | 1 - 14 files changed, 11 insertions(+), 11 deletions(-) rename lldb/include/lldb/{Utility => Host/common}/DiagnosticsRendering.h (100%) rename lldb/source/{Utility => Host/common}/DiagnosticsRendering.cpp (99%) diff --git a/lldb/include/lldb/Expression/DiagnosticManager.h b/lldb/include/lldb/Expression/DiagnosticManager.h index fc49349d1b7c3..c7e02d80cf750 100644 --- a/lldb/include/lldb/Expression/DiagnosticManager.h +++ b/lldb/include/lldb/Expression/DiagnosticManager.h @@ -12,7 +12,7 @@ #include "lldb/lldb-defines.h" #include "lldb/lldb-types.h" -#include "lldb/Utility/DiagnosticsRendering.h" +#include "lldb/Host/common/DiagnosticsRendering.h" #include "lldb/Utility/FileSpec.h" #include "lldb/Utility/Status.h" diff --git a/lldb/include/lldb/Utility/DiagnosticsRendering.h b/lldb/include/lldb/Host/common/DiagnosticsRendering.h similarity index 100% rename from lldb/include/lldb/Utility/DiagnosticsRendering.h rename to lldb/include/lldb/Host/common/DiagnosticsRendering.h diff --git a/lldb/include/lldb/Interpreter/CommandReturnObject.h b/lldb/include/lldb/Interpreter/CommandReturnObject.h index d53aeb81be2ba..0742f1b836f5e 100644 --- a/lldb/include/lldb/Interpreter/CommandReturnObject.h +++ b/lldb/include/lldb/Interpreter/CommandReturnObject.h @@ -10,7 +10,7 @@ #define LLDB_INTERPRETER_COMMANDRETURNOBJECT_H #include "lldb/Host/StreamFile.h" -#include "lldb/Utility/DiagnosticsRendering.h" +#include "lldb/Host/common/DiagnosticsRendering.h" #include "lldb/Utility/StreamString.h" #include "lldb/Utility/StreamTee.h" #include "lldb/Utility/StructuredData.h" diff --git a/lldb/include/lldb/ValueObject/DILParser.h b/lldb/include/lldb/ValueObject/DILParser.h index d17ed66d9b3ee..c9d28333ffed1 100644 --- a/lldb/include/lldb/ValueObject/DILParser.h +++ b/lldb/include/lldb/ValueObject/DILParser.h @@ -9,8 +9,8 @@ #ifndef LLDB_VALUEOBJECT_DILPARSER_H #define LLDB_VALUEOBJECT_DILPARSER_H +#include "lldb/Host/common/DiagnosticsRendering.h" #include "lldb/Target/ExecutionContextScope.h" -#include "lldb/Utility/DiagnosticsRendering.h" #include "lldb/Utility/Status.h" #include "lldb/ValueObject/DILAST.h" #include "lldb/ValueObject/DILLexer.h" diff --git a/lldb/source/Commands/CommandObjectExpression.cpp b/lldb/source/Commands/CommandObjectExpression.cpp index 197bffe9c982f..4919bd3639d3e 100644 --- a/lldb/source/Commands/CommandObjectExpression.cpp +++ b/lldb/source/Commands/CommandObjectExpression.cpp @@ -13,6 +13,7 @@ #include "lldb/Expression/UserExpression.h" #include "lldb/Host/OptionParser.h" #include "lldb/Host/StreamFile.h" +#include "lldb/Host/common/DiagnosticsRendering.h" #include "lldb/Interpreter/CommandInterpreter.h" #include "lldb/Interpreter/CommandOptionArgumentTable.h" #include "lldb/Interpreter/CommandReturnObject.h" @@ -21,7 +22,6 @@ #include "lldb/Target/Process.h" #include "lldb/Target/StackFrame.h" #include "lldb/Target/Target.h" -#include "lldb/Utility/DiagnosticsRendering.h" #include "lldb/lldb-enumerations.h" #include "lldb/lldb-forward.h" #include "lldb/lldb-private-enumerations.h" diff --git a/lldb/source/Host/CMakeLists.txt b/lldb/source/Host/CMakeLists.txt index c9e8afe48fcde..3184d3a1ead0d 100644 --- a/lldb/source/Host/CMakeLists.txt +++ b/lldb/source/Host/CMakeLists.txt @@ -17,6 +17,7 @@ macro(add_host_subdirectory group) endmacro() add_host_subdirectory(common + common/DiagnosticsRendering.cpp common/FileAction.cpp common/FileCache.cpp common/File.cpp diff --git a/lldb/source/Utility/DiagnosticsRendering.cpp b/lldb/source/Host/common/DiagnosticsRendering.cpp similarity index 99% rename from lldb/source/Utility/DiagnosticsRendering.cpp rename to lldb/source/Host/common/DiagnosticsRendering.cpp index 8c21e661ce764..f2cd3968967fb 100644 --- a/lldb/source/Utility/DiagnosticsRendering.cpp +++ b/lldb/source/Host/common/DiagnosticsRendering.cpp @@ -6,7 +6,7 @@ // //===----------------------------------------------------------------------===// -#include "lldb/Utility/DiagnosticsRendering.h" +#include "lldb/Host/common/DiagnosticsRendering.h" #include <cstdint> using namespace lldb_private; diff --git a/lldb/source/Interpreter/CommandReturnObject.cpp b/lldb/source/Interpreter/CommandReturnObject.cpp index 0a2948e8e6ca4..ef5bfae1bd1bd 100644 --- a/lldb/source/Interpreter/CommandReturnObject.cpp +++ b/lldb/source/Interpreter/CommandReturnObject.cpp @@ -8,7 +8,7 @@ #include "lldb/Interpreter/CommandReturnObject.h" -#include "lldb/Utility/DiagnosticsRendering.h" +#include "lldb/Host/common/DiagnosticsRendering.h" #include "lldb/Utility/Status.h" #include "lldb/Utility/StreamString.h" diff --git a/lldb/source/Interpreter/Options.cpp b/lldb/source/Interpreter/Options.cpp index cae617813d2fd..73b817ece16be 100644 --- a/lldb/source/Interpreter/Options.cpp +++ b/lldb/source/Interpreter/Options.cpp @@ -14,13 +14,13 @@ #include <set> #include "lldb/Host/OptionParser.h" +#include "lldb/Host/common/DiagnosticsRendering.h" #include "lldb/Interpreter/CommandCompletions.h" #include "lldb/Interpreter/CommandInterpreter.h" #include "lldb/Interpreter/CommandObject.h" #include "lldb/Interpreter/CommandReturnObject.h" #include "lldb/Target/Target.h" #include "lldb/Utility/AnsiTerminal.h" -#include "lldb/Utility/DiagnosticsRendering.h" #include "lldb/Utility/StreamString.h" #include "llvm/ADT/STLExtras.h" diff --git a/lldb/source/Utility/CMakeLists.txt b/lldb/source/Utility/CMakeLists.txt index 1dd4d63f7016f..338b8bd8b0ef1 100644 --- a/lldb/source/Utility/CMakeLists.txt +++ b/lldb/source/Utility/CMakeLists.txt @@ -38,7 +38,6 @@ add_lldb_library(lldbUtility NO_INTERNAL_DEPENDENCIES DataEncoder.cpp DataExtractor.cpp Diagnostics.cpp - DiagnosticsRendering.cpp Environment.cpp ErrorMessages.cpp Event.cpp diff --git a/lldb/source/ValueObject/DILParser.cpp b/lldb/source/ValueObject/DILParser.cpp index 566bcaf81094a..82b97aafe2261 100644 --- a/lldb/source/ValueObject/DILParser.cpp +++ b/lldb/source/ValueObject/DILParser.cpp @@ -12,8 +12,8 @@ //===----------------------------------------------------------------------===// #include "lldb/ValueObject/DILParser.h" +#include "lldb/Host/common/DiagnosticsRendering.h" #include "lldb/Target/ExecutionContextScope.h" -#include "lldb/Utility/DiagnosticsRendering.h" #include "lldb/ValueObject/DILAST.h" #include "lldb/ValueObject/DILEval.h" #include "llvm/ADT/StringRef.h" diff --git a/lldb/unittests/Utility/DiagnosticsRenderingTest.cpp b/lldb/unittests/Utility/DiagnosticsRenderingTest.cpp index 4e5e0bb7dc355..851b478def32e 100644 --- a/lldb/unittests/Utility/DiagnosticsRenderingTest.cpp +++ b/lldb/unittests/Utility/DiagnosticsRenderingTest.cpp @@ -1,4 +1,4 @@ -#include "lldb/Utility/DiagnosticsRendering.h" +#include "lldb/Host/common/DiagnosticsRendering.h" #include "lldb/Utility/StreamString.h" #include "gtest/gtest.h" diff --git a/llvm/utils/gn/secondary/lldb/source/Host/BUILD.gn b/llvm/utils/gn/secondary/lldb/source/Host/BUILD.gn index 10c5f95edf5fd..af4533285d3e9 100644 --- a/llvm/utils/gn/secondary/lldb/source/Host/BUILD.gn +++ b/llvm/utils/gn/secondary/lldb/source/Host/BUILD.gn @@ -16,6 +16,7 @@ static_library("Host") { ] public_deps = [ "//llvm/utils/gn/build/libs/xml" ] sources = [ + "common/DiagnosticsRendering.cpp", "common/File.cpp", "common/FileAction.cpp", "common/FileCache.cpp", diff --git a/llvm/utils/gn/secondary/lldb/source/Utility/BUILD.gn b/llvm/utils/gn/secondary/lldb/source/Utility/BUILD.gn index 4221fab1e237b..5faa365bb7bdb 100644 --- a/llvm/utils/gn/secondary/lldb/source/Utility/BUILD.gn +++ b/llvm/utils/gn/secondary/lldb/source/Utility/BUILD.gn @@ -21,7 +21,6 @@ static_library("Utility") { "DataEncoder.cpp", "DataExtractor.cpp", "Diagnostics.cpp", - "DiagnosticsRendering.cpp", "Environment.cpp", "ErrorMessages.cpp", "Event.cpp", >From 80e4d5bb544bed2d1da979fae9f0009198553e38 Mon Sep 17 00:00:00 2001 From: Charles Zablit <[email protected]> Date: Wed, 19 Nov 2025 12:42:03 +0100 Subject: [PATCH 2/4] fixup! [NFC][lldb] move DiagnosticsRendering to Host --- lldb/unittests/Host/common/CMakeLists.txt | 1 + .../{Utility => Host/common}/DiagnosticsRenderingTest.cpp | 0 lldb/unittests/Utility/CMakeLists.txt | 1 - 3 files changed, 1 insertion(+), 1 deletion(-) rename lldb/unittests/{Utility => Host/common}/DiagnosticsRenderingTest.cpp (100%) diff --git a/lldb/unittests/Host/common/CMakeLists.txt b/lldb/unittests/Host/common/CMakeLists.txt index 2934e6f0b4315..8aa2dfb4e8e1e 100644 --- a/lldb/unittests/Host/common/CMakeLists.txt +++ b/lldb/unittests/Host/common/CMakeLists.txt @@ -1,4 +1,5 @@ set (FILES + DiagnosticsRenderingTest.cpp ZipFileResolverTest.cpp ) diff --git a/lldb/unittests/Utility/DiagnosticsRenderingTest.cpp b/lldb/unittests/Host/common/DiagnosticsRenderingTest.cpp similarity index 100% rename from lldb/unittests/Utility/DiagnosticsRenderingTest.cpp rename to lldb/unittests/Host/common/DiagnosticsRenderingTest.cpp diff --git a/lldb/unittests/Utility/CMakeLists.txt b/lldb/unittests/Utility/CMakeLists.txt index aed4177f5edee..2bdd50291d2ae 100644 --- a/lldb/unittests/Utility/CMakeLists.txt +++ b/lldb/unittests/Utility/CMakeLists.txt @@ -10,7 +10,6 @@ add_lldb_unittest(UtilityTests DataBufferTest.cpp DataEncoderTest.cpp DataExtractorTest.cpp - DiagnosticsRenderingTest.cpp EnvironmentTest.cpp EventTest.cpp FileSpecListTest.cpp >From 41676badbd630bdc67bedb99a6facc39825323df Mon Sep 17 00:00:00 2001 From: Charles Zablit <[email protected]> Date: Tue, 18 Nov 2025 22:41:43 +0100 Subject: [PATCH 3/4] [lldb] improve the heuristics for checking if a terminal supports Unicode --- lldb/include/lldb/Host/Terminal.h | 11 +++++++++++ lldb/source/Host/common/DiagnosticsRendering.cpp | 8 +++----- lldb/source/Host/common/Terminal.cpp | 15 +++++++++++++++ 3 files changed, 29 insertions(+), 5 deletions(-) diff --git a/lldb/include/lldb/Host/Terminal.h b/lldb/include/lldb/Host/Terminal.h index da0d05e8bd265..6da5d45644b28 100644 --- a/lldb/include/lldb/Host/Terminal.h +++ b/lldb/include/lldb/Host/Terminal.h @@ -169,6 +169,17 @@ class TerminalState { lldb::pid_t m_process_group = -1; ///< Cached process group information. }; +/// Returns whether or not the current terminal supports Unicode rendering. +/// +/// The value is cached after the first computation. +/// +/// On POSIX systems, we check if the LANG environment variable contains the +/// substring "UTF-8"; +/// +/// On Windows, we check that we are running from the Windows Terminal +/// application. +bool TerminalSupportsUnicode(); + } // namespace lldb_private #endif // LLDB_HOST_TERMINAL_H diff --git a/lldb/source/Host/common/DiagnosticsRendering.cpp b/lldb/source/Host/common/DiagnosticsRendering.cpp index f2cd3968967fb..c7e083573c631 100644 --- a/lldb/source/Host/common/DiagnosticsRendering.cpp +++ b/lldb/source/Host/common/DiagnosticsRendering.cpp @@ -7,6 +7,8 @@ //===----------------------------------------------------------------------===// #include "lldb/Host/common/DiagnosticsRendering.h" +#include "lldb/Host/Terminal.h" + #include <cstdint> using namespace lldb_private; @@ -97,12 +99,8 @@ void RenderDiagnosticDetails(Stream &stream, return; } - // Since there is no other way to find this out, use the color - // attribute as a proxy for whether the terminal supports Unicode - // characters. In the future it might make sense to move this into - // Host so it can be customized for a specific platform. llvm::StringRef cursor, underline, vbar, joint, hbar, spacer; - if (stream.AsRawOstream().colors_enabled()) { + if (TerminalSupportsUnicode()) { cursor = "˄"; underline = "˜"; vbar = "│"; diff --git a/lldb/source/Host/common/Terminal.cpp b/lldb/source/Host/common/Terminal.cpp index 436dfd8130d9b..825e9e0aee78e 100644 --- a/lldb/source/Host/common/Terminal.cpp +++ b/lldb/source/Host/common/Terminal.cpp @@ -472,3 +472,18 @@ bool TerminalState::TTYStateIsValid() const { return bool(m_data); } bool TerminalState::ProcessGroupIsValid() const { return static_cast<int32_t>(m_process_group) != -1; } + +bool lldb_private::TerminalSupportsUnicode() { + static std::optional<bool> result; + if (result) + return result.value(); +#ifdef _WIN32 + return true; +#else + const char *lang_var = std::getenv("LANG"); + if (!lang_var) + return false; + result = llvm::StringRef(lang_var).lower().find("utf-8") != std::string::npos; +#endif + return result.value(); +} >From 58fc9bb87cf9290a590d691cb967308669218306 Mon Sep 17 00:00:00 2001 From: Charles Zablit <[email protected]> Date: Wed, 19 Nov 2025 15:01:23 +0100 Subject: [PATCH 4/4] fixup! [lldb] improve the heuristics for checking if a terminal supports Unicode --- lldb/include/lldb/Host/Terminal.h | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/lldb/include/lldb/Host/Terminal.h b/lldb/include/lldb/Host/Terminal.h index 6da5d45644b28..bfcd66b13ded8 100644 --- a/lldb/include/lldb/Host/Terminal.h +++ b/lldb/include/lldb/Host/Terminal.h @@ -174,10 +174,11 @@ class TerminalState { /// The value is cached after the first computation. /// /// On POSIX systems, we check if the LANG environment variable contains the -/// substring "UTF-8"; +/// substring "UTF-8", case insensitive. /// -/// On Windows, we check that we are running from the Windows Terminal -/// application. +/// On Windows, we always return true since we use the `WriteConsoleW` API +/// internally. Note that the default Windows codepage (437) does not support +/// all Unicode characters. This function does not check the codepage. bool TerminalSupportsUnicode(); } // namespace lldb_private _______________________________________________ lldb-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
