Author: Jonas Devlieghere Date: 2026-02-12T09:09:47-08:00 New Revision: 5e2518f2cc54de788f3afcff5c334c7c8b79f476
URL: https://github.com/llvm/llvm-project/commit/5e2518f2cc54de788f3afcff5c334c7c8b79f476 DIFF: https://github.com/llvm/llvm-project/commit/5e2518f2cc54de788f3afcff5c334c7c8b79f476.diff LOG: [lldb] Convert highlighters to plugins (#181026) This PR converts the syntax highlighters to plugins. Previously, the highlighters were part of the Language plugin, using a library shared by the C-like languages. The Highlighters already had a plugin-like design, with a clang and default highlighter. This PR takes them out of the language plugin and into their own highlighter plugin. They are still accessed thought he HighlightManager. This change is motivated by #170250. It will allow us to have both a clang and tree-sitter based highlighter, as well as make it possible to have a highlighter for a language that doesn't have an upstream language plugin, like Swift or Rust. Added: lldb/source/Plugins/Highlighter/CMakeLists.txt lldb/source/Plugins/Highlighter/Clang/CMakeLists.txt lldb/source/Plugins/Highlighter/Clang/ClangHighlighter.cpp lldb/source/Plugins/Highlighter/Clang/ClangHighlighter.h lldb/source/Plugins/Highlighter/Default/CMakeLists.txt lldb/source/Plugins/Highlighter/Default/DefaultHighlighter.cpp lldb/source/Plugins/Highlighter/Default/DefaultHighlighter.h lldb/unittests/Highlighter/CMakeLists.txt lldb/unittests/Highlighter/HighlighterTest.cpp Modified: lldb/include/lldb/Core/Highlighter.h lldb/include/lldb/Core/PluginManager.h lldb/include/lldb/Target/Language.h lldb/include/lldb/lldb-private-interfaces.h lldb/source/Core/Highlighter.cpp lldb/source/Core/PluginManager.cpp lldb/source/Plugins/CMakeLists.txt lldb/source/Plugins/Language/CMakeLists.txt lldb/source/Plugins/Language/CPlusPlus/CMakeLists.txt lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.h lldb/source/Plugins/Language/ObjC/CMakeLists.txt lldb/source/Plugins/Language/ObjC/ObjCLanguage.h lldb/source/Plugins/Language/ObjCPlusPlus/CMakeLists.txt lldb/source/Plugins/Language/ObjCPlusPlus/ObjCPlusPlusLanguage.h lldb/source/Plugins/REPL/Clang/CMakeLists.txt lldb/unittests/CMakeLists.txt lldb/unittests/Language/CMakeLists.txt Removed: lldb/source/Plugins/Language/ClangCommon/CMakeLists.txt lldb/source/Plugins/Language/ClangCommon/ClangHighlighter.cpp lldb/source/Plugins/Language/ClangCommon/ClangHighlighter.h lldb/unittests/Language/Highlighting/CMakeLists.txt lldb/unittests/Language/Highlighting/HighlighterTest.cpp ################################################################################ diff --git a/lldb/include/lldb/Core/Highlighter.h b/lldb/include/lldb/Core/Highlighter.h index 58ecd37180e5f..fd3ac33ac21ea 100644 --- a/lldb/include/lldb/Core/Highlighter.h +++ b/lldb/include/lldb/Core/Highlighter.h @@ -13,6 +13,7 @@ #include <utility> #include <vector> +#include "lldb/Core/PluginManager.h" #include "lldb/Utility/Stream.h" #include "lldb/lldb-enumerations.h" #include "llvm/ADT/StringRef.h" @@ -88,7 +89,7 @@ struct HighlightStyle { }; /// Annotates source code with color attributes. -class Highlighter { +class Highlighter : public PluginInterface { public: Highlighter() = default; virtual ~Highlighter() = default; @@ -122,23 +123,11 @@ class Highlighter { llvm::StringRef previous_lines = "") const; }; -/// A default highlighter that only highlights the user cursor, but doesn't -/// do any other highlighting. -class DefaultHighlighter : public Highlighter { -public: - llvm::StringRef GetName() const override { return "none"; } - - void Highlight(const HighlightStyle &options, llvm::StringRef line, - std::optional<size_t> cursor_pos, - llvm::StringRef previous_lines, Stream &s) const override; -}; - /// Manages the available highlighters. class HighlighterManager { - DefaultHighlighter m_default; - public: /// Queries all known highlighter for one that can highlight some source code. + /// /// \param language_type /// The language type that the caller thinks the source code was given in. /// \param path @@ -149,9 +138,35 @@ class HighlighterManager { /// empty highlighter that does nothing. const Highlighter &getHighlighterFor(lldb::LanguageType language_type, llvm::StringRef path) const; - const Highlighter &getDefaultHighlighter() const { return m_default; } + +private: + mutable std::mutex m_mutex; + mutable llvm::DenseMap<lldb::LanguageType, std::unique_ptr<Highlighter>> + m_highlighters; }; } // namespace lldb_private +namespace llvm { + +/// DenseMapInfo implementation. +/// \{ +template <> struct DenseMapInfo<lldb::LanguageType> { + static inline lldb::LanguageType getEmptyKey() { + return lldb::eNumLanguageTypes; + } + static inline lldb::LanguageType getTombstoneKey() { + return lldb::eNumLanguageTypes; + } + static unsigned getHashValue(lldb::LanguageType language_type) { + return static_cast<unsigned>(language_type); + } + static bool isEqual(lldb::LanguageType LHS, lldb::LanguageType RHS) { + return LHS == RHS; + } +}; +/// \} + +} // namespace llvm + #endif // LLDB_CORE_HIGHLIGHTER_H diff --git a/lldb/include/lldb/Core/PluginManager.h b/lldb/include/lldb/Core/PluginManager.h index ab2ca58a88ddd..4d116f52460ff 100644 --- a/lldb/include/lldb/Core/PluginManager.h +++ b/lldb/include/lldb/Core/PluginManager.h @@ -620,6 +620,15 @@ class PluginManager { static LanguageSet GetREPLAllTypeSystemSupportedLanguages(); + // Higlhighter + static bool RegisterPlugin(llvm::StringRef name, llvm::StringRef description, + HighlighterCreateInstance create_callback); + + static bool UnregisterPlugin(HighlighterCreateInstance create_callback); + + static HighlighterCreateInstance + GetHighlighterCreateCallbackAtIndex(uint32_t idx); + // Some plug-ins might register a DebuggerInitializeCallback callback when // registering the plug-in. After a new Debugger instance is created, this // DebuggerInitialize function will get called. This allows plug-ins to diff --git a/lldb/include/lldb/Target/Language.h b/lldb/include/lldb/Target/Language.h index d59ea9f09b4c8..4b8d4eaf262a0 100644 --- a/lldb/include/lldb/Target/Language.h +++ b/lldb/include/lldb/Target/Language.h @@ -180,8 +180,6 @@ class Language : public PluginInterface { virtual bool IsSourceFile(llvm::StringRef file_path) const = 0; - virtual const Highlighter *GetHighlighter() const { return nullptr; } - virtual lldb::TypeCategoryImplSP GetFormatters(); virtual HardcodedFormatters::HardcodedFormatFinder GetHardcodedFormats(); diff --git a/lldb/include/lldb/lldb-private-interfaces.h b/lldb/include/lldb/lldb-private-interfaces.h index dbd81b0683f50..a87e01769c555 100644 --- a/lldb/include/lldb/lldb-private-interfaces.h +++ b/lldb/include/lldb/lldb-private-interfaces.h @@ -27,6 +27,7 @@ class Value; namespace lldb_private { class ScriptedInterfaceUsages; struct ScriptedFrameProviderDescriptor; +class Highlighter; typedef lldb::ABISP (*ABICreateInstance)(lldb::ProcessSP process_sp, const ArchSpec &arch); typedef std::unique_ptr<Architecture> (*ArchitectureCreateInstance)( @@ -136,6 +137,8 @@ typedef lldb::REPLSP (*REPLCreateInstance)(Status &error, const char *repl_options); typedef bool (*ScriptedInterfaceCreateInstance)(lldb::ScriptLanguage language, ScriptedInterfaceUsages usages); + +typedef Highlighter *(*HighlighterCreateInstance)(lldb::LanguageType language); typedef int (*ComparisonFunction)(const void *, const void *); typedef void (*DebuggerInitializeCallback)(Debugger &debugger); /// Trace diff --git a/lldb/source/Core/Highlighter.cpp b/lldb/source/Core/Highlighter.cpp index f49b778baba8c..abb6d3fa024c5 100644 --- a/lldb/source/Core/Highlighter.cpp +++ b/lldb/source/Core/Highlighter.cpp @@ -26,30 +26,6 @@ void HighlightStyle::ColorStyle::Set(llvm::StringRef prefix, m_suffix = FormatAnsiTerminalCodes(suffix); } -void DefaultHighlighter::Highlight(const HighlightStyle &options, - llvm::StringRef line, - std::optional<size_t> cursor_pos, - llvm::StringRef previous_lines, - Stream &s) const { - // If we don't have a valid cursor, then we just print the line as-is. - if (!cursor_pos || *cursor_pos >= line.size()) { - s << line; - return; - } - - // If we have a valid cursor, we have to apply the 'selected' style around - // the character below the cursor. - - // Split the line around the character which is below the cursor. - size_t column = *cursor_pos; - // Print the characters before the cursor. - s << line.substr(0, column); - // Print the selected character with the defined color codes. - options.selected.Apply(s, line.substr(column, 1)); - // Print the rest of the line. - s << line.substr(column + 1U); -} - static HighlightStyle::ColorStyle GetColor(const char *c) { return HighlightStyle::ColorStyle(c, "${ansi.normal}"); } @@ -65,10 +41,27 @@ HighlightStyle HighlightStyle::MakeVimStyle() { const Highlighter & HighlighterManager::getHighlighterFor(lldb::LanguageType language_type, llvm::StringRef path) const { - Language *language = lldb_private::Language::FindPlugin(language_type, path); - if (language && language->GetHighlighter()) - return *language->GetHighlighter(); - return m_default; + // The language may be able to provide a language type based on the path. + if (Language *language = + lldb_private::Language::FindPlugin(language_type, path)) + language_type = language->GetLanguageType(); + + std::lock_guard<std::mutex> guard(m_mutex); + auto it = m_highlighters.find(language_type); + if (it != m_highlighters.end()) + return *it->second; + + uint32_t idx = 0; + while (HighlighterCreateInstance create_instance = + PluginManager::GetHighlighterCreateCallbackAtIndex(idx++)) { + if (Highlighter *highlighter = create_instance(language_type)) + m_highlighters.try_emplace(language_type, + std::unique_ptr<Highlighter>(highlighter)); + } + + assert(m_highlighters.contains(language_type) && + "we should always find the default highlighter"); + return *m_highlighters[language_type]; } std::string Highlighter::Highlight(const HighlightStyle &options, diff --git a/lldb/source/Core/PluginManager.cpp b/lldb/source/Core/PluginManager.cpp index 835837e462edc..64130d700a006 100644 --- a/lldb/source/Core/PluginManager.cpp +++ b/lldb/source/Core/PluginManager.cpp @@ -1985,6 +1985,39 @@ LanguageSet PluginManager::GetREPLAllTypeSystemSupportedLanguages() { return all; } +#pragma mark Highlighter + +struct HighlighterInstance : public PluginInstance<HighlighterCreateInstance> { + HighlighterInstance(llvm::StringRef name, llvm::StringRef description, + CallbackType create_callback) + : PluginInstance<HighlighterCreateInstance>(name, description, + create_callback) {} +}; + +typedef PluginInstances<HighlighterInstance> HighlighterInstances; + +static HighlighterInstances &GetHighlighterInstances() { + static HighlighterInstances g_instances; + return g_instances; +} + +bool PluginManager::RegisterPlugin(llvm::StringRef name, + llvm::StringRef description, + HighlighterCreateInstance create_callback) { + return GetHighlighterInstances().RegisterPlugin(name, description, + create_callback); +} + +bool PluginManager::UnregisterPlugin( + HighlighterCreateInstance create_callback) { + return GetHighlighterInstances().UnregisterPlugin(create_callback); +} + +HighlighterCreateInstance +PluginManager::GetHighlighterCreateCallbackAtIndex(uint32_t idx) { + return GetHighlighterInstances().GetCallbackAtIndex(idx); +} + #pragma mark PluginManager void PluginManager::DebuggerInitialize(Debugger &debugger) { diff --git a/lldb/source/Plugins/CMakeLists.txt b/lldb/source/Plugins/CMakeLists.txt index b6878b21ff71a..bfc3d5e23c3b7 100644 --- a/lldb/source/Plugins/CMakeLists.txt +++ b/lldb/source/Plugins/CMakeLists.txt @@ -3,6 +3,7 @@ add_subdirectory(Architecture) add_subdirectory(Disassembler) add_subdirectory(DynamicLoader) add_subdirectory(ExpressionParser) +add_subdirectory(Highlighter) add_subdirectory(Instruction) add_subdirectory(InstrumentationRuntime) add_subdirectory(JITLoader) diff --git a/lldb/source/Plugins/Highlighter/CMakeLists.txt b/lldb/source/Plugins/Highlighter/CMakeLists.txt new file mode 100644 index 0000000000000..88033867b1a12 --- /dev/null +++ b/lldb/source/Plugins/Highlighter/CMakeLists.txt @@ -0,0 +1,2 @@ +add_subdirectory(Clang) +add_subdirectory(Default) diff --git a/lldb/source/Plugins/Language/ClangCommon/CMakeLists.txt b/lldb/source/Plugins/Highlighter/Clang/CMakeLists.txt similarity index 65% rename from lldb/source/Plugins/Language/ClangCommon/CMakeLists.txt rename to lldb/source/Plugins/Highlighter/Clang/CMakeLists.txt index 470dbc2030546..b723844f493ee 100644 --- a/lldb/source/Plugins/Language/ClangCommon/CMakeLists.txt +++ b/lldb/source/Plugins/Highlighter/Clang/CMakeLists.txt @@ -1,4 +1,4 @@ -add_lldb_library(lldbPluginClangCommon +add_lldb_library(lldbPluginHighlighterClang PLUGIN ClangHighlighter.cpp LINK_COMPONENTS diff --git a/lldb/source/Plugins/Language/ClangCommon/ClangHighlighter.cpp b/lldb/source/Plugins/Highlighter/Clang/ClangHighlighter.cpp similarity index 94% rename from lldb/source/Plugins/Language/ClangCommon/ClangHighlighter.cpp rename to lldb/source/Plugins/Highlighter/Clang/ClangHighlighter.cpp index 9cb5ea3078995..7480d9d78866b 100644 --- a/lldb/source/Plugins/Language/ClangCommon/ClangHighlighter.cpp +++ b/lldb/source/Plugins/Highlighter/Clang/ClangHighlighter.cpp @@ -8,6 +8,7 @@ #include "ClangHighlighter.h" +#include "lldb/Core/PluginManager.h" #include "lldb/Host/FileSystem.h" #include "lldb/Target/Language.h" #include "lldb/Utility/AnsiTerminal.h" @@ -20,6 +21,8 @@ #include "llvm/Support/MemoryBuffer.h" #include <optional> +LLDB_PLUGIN_DEFINE_ADV(ClangHighlighter, HighlighterClang) + using namespace lldb_private; bool ClangHighlighter::isKeyword(llvm::StringRef token) const { @@ -255,3 +258,18 @@ void ClangHighlighter::Highlight(const HighlightStyle &options, assert(false && "We couldn't find the user line in the input file?"); } } + +Highlighter *ClangHighlighter::CreateInstance(lldb::LanguageType language) { + if (Language::LanguageIsCFamily(language)) + return new ClangHighlighter(); + return nullptr; +} + +void ClangHighlighter::Initialize() { + PluginManager::RegisterPlugin(GetPluginNameStatic(), GetPluginNameStatic(), + CreateInstance); +} + +void ClangHighlighter::Terminate() { + PluginManager::UnregisterPlugin(CreateInstance); +} diff --git a/lldb/source/Plugins/Language/ClangCommon/ClangHighlighter.h b/lldb/source/Plugins/Highlighter/Clang/ClangHighlighter.h similarity index 72% rename from lldb/source/Plugins/Language/ClangCommon/ClangHighlighter.h rename to lldb/source/Plugins/Highlighter/Clang/ClangHighlighter.h index 20bb09502d42f..51a0461ca88ed 100644 --- a/lldb/source/Plugins/Language/ClangCommon/ClangHighlighter.h +++ b/lldb/source/Plugins/Highlighter/Clang/ClangHighlighter.h @@ -6,8 +6,8 @@ // //===----------------------------------------------------------------------===// -#ifndef LLDB_SOURCE_PLUGINS_LANGUAGE_CLANGCOMMON_CLANGHIGHLIGHTER_H -#define LLDB_SOURCE_PLUGINS_LANGUAGE_CLANGCOMMON_CLANGHIGHLIGHTER_H +#ifndef LLDB_SOURCE_PLUGINS_HIGHLIGHTER_CLANGHIGHLIGHTER_H +#define LLDB_SOURCE_PLUGINS_HIGHLIGHTER_CLANGHIGHLIGHTER_H #include "lldb/Utility/Stream.h" #include "llvm/ADT/StringSet.h" @@ -31,8 +31,16 @@ class ClangHighlighter : public Highlighter { /// Returns true if the given string represents a keywords in any Clang /// supported language. bool isKeyword(llvm::StringRef token) const; + + static Highlighter *CreateInstance(lldb::LanguageType language); + + static void Terminate(); + static void Initialize(); + + static llvm::StringRef GetPluginNameStatic() { return "Clang Highlighter"; } + llvm::StringRef GetPluginName() override { return GetPluginNameStatic(); } }; } // namespace lldb_private -#endif // LLDB_SOURCE_PLUGINS_LANGUAGE_CLANGCOMMON_CLANGHIGHLIGHTER_H +#endif diff --git a/lldb/source/Plugins/Highlighter/Default/CMakeLists.txt b/lldb/source/Plugins/Highlighter/Default/CMakeLists.txt new file mode 100644 index 0000000000000..31bbfdc43862a --- /dev/null +++ b/lldb/source/Plugins/Highlighter/Default/CMakeLists.txt @@ -0,0 +1,9 @@ +add_lldb_library(lldbPluginHighlighterDefault PLUGIN + DefaultHighlighter.cpp + + LINK_COMPONENTS + Support + LINK_LIBS + lldbCore + lldbUtility +) diff --git a/lldb/source/Plugins/Highlighter/Default/DefaultHighlighter.cpp b/lldb/source/Plugins/Highlighter/Default/DefaultHighlighter.cpp new file mode 100644 index 0000000000000..baef8f6938e94 --- /dev/null +++ b/lldb/source/Plugins/Highlighter/Default/DefaultHighlighter.cpp @@ -0,0 +1,50 @@ +//===----------------------------------------------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#include "DefaultHighlighter.h" + +LLDB_PLUGIN_DEFINE_ADV(DefaultHighlighter, HighlighterDefault) + +using namespace lldb_private; + +void DefaultHighlighter::Highlight(const HighlightStyle &options, + llvm::StringRef line, + std::optional<size_t> cursor_pos, + llvm::StringRef previous_lines, + Stream &s) const { + // If we don't have a valid cursor, then we just print the line as-is. + if (!cursor_pos || *cursor_pos >= line.size()) { + s << line; + return; + } + + // If we have a valid cursor, we have to apply the 'selected' style around + // the character below the cursor. + + // Split the line around the character which is below the cursor. + size_t column = *cursor_pos; + // Print the characters before the cursor. + s << line.substr(0, column); + // Print the selected character with the defined color codes. + options.selected.Apply(s, line.substr(column, 1)); + // Print the rest of the line. + s << line.substr(column + 1U); +} + +Highlighter *DefaultHighlighter::CreateInstance(lldb::LanguageType language) { + return new DefaultHighlighter(); +} + +void DefaultHighlighter::Initialize() { + PluginManager::RegisterPlugin(GetPluginNameStatic(), GetPluginNameStatic(), + CreateInstance); +} + +void DefaultHighlighter::Terminate() { + PluginManager::UnregisterPlugin(CreateInstance); +} diff --git a/lldb/source/Plugins/Highlighter/Default/DefaultHighlighter.h b/lldb/source/Plugins/Highlighter/Default/DefaultHighlighter.h new file mode 100644 index 0000000000000..ad8776a009580 --- /dev/null +++ b/lldb/source/Plugins/Highlighter/Default/DefaultHighlighter.h @@ -0,0 +1,37 @@ +//===----------------------------------------------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#ifndef LLDB_SOURCE_PLUGINS_HIGHLIGHTER_DEFAULTHIGHLIGHTER_H +#define LLDB_SOURCE_PLUGINS_HIGHLIGHTER_DEFAULTHIGHLIGHTER_H + +#include "lldb/Core/Highlighter.h" + +namespace lldb_private { + +/// A default highlighter that only highlights the user cursor, but doesn't +/// do any other highlighting. +class DefaultHighlighter : public Highlighter { +public: + llvm::StringRef GetName() const override { return "none"; } + + void Highlight(const HighlightStyle &options, llvm::StringRef line, + std::optional<size_t> cursor_pos, + llvm::StringRef previous_lines, Stream &s) const override; + + static Highlighter *CreateInstance(lldb::LanguageType language); + + static void Terminate(); + static void Initialize(); + + static llvm::StringRef GetPluginNameStatic() { return "Default Highlighter"; } + llvm::StringRef GetPluginName() override { return GetPluginNameStatic(); } +}; + +} // namespace lldb_private + +#endif diff --git a/lldb/source/Plugins/Language/CMakeLists.txt b/lldb/source/Plugins/Language/CMakeLists.txt index b432dd300668e..6367ab916c8fb 100644 --- a/lldb/source/Plugins/Language/CMakeLists.txt +++ b/lldb/source/Plugins/Language/CMakeLists.txt @@ -4,7 +4,6 @@ set_property(DIRECTORY PROPERTY LLDB_TOLERATED_PLUGIN_DEPENDENCIES TypeSystem ) -add_subdirectory(ClangCommon) add_subdirectory(CPlusPlus) add_subdirectory(ObjC) add_subdirectory(ObjCPlusPlus) diff --git a/lldb/source/Plugins/Language/CPlusPlus/CMakeLists.txt b/lldb/source/Plugins/Language/CPlusPlus/CMakeLists.txt index 79c0cc14ec644..08b3490888110 100644 --- a/lldb/source/Plugins/Language/CPlusPlus/CMakeLists.txt +++ b/lldb/source/Plugins/Language/CPlusPlus/CMakeLists.txt @@ -56,7 +56,6 @@ add_lldb_library(lldbPluginCPlusPlusLanguage PLUGIN lldbTarget lldbUtility lldbValueObject - lldbPluginClangCommon lldbPluginCPPRuntime lldbPluginTypeSystemClang ) diff --git a/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.h b/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.h index b5472340bd913..53fae3fe71e3a 100644 --- a/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.h +++ b/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.h @@ -14,7 +14,6 @@ #include "llvm/ADT/StringRef.h" -#include "Plugins/Language/ClangCommon/ClangHighlighter.h" #include "lldb/Target/Language.h" #include "lldb/Utility/ConstString.h" #include "lldb/lldb-private.h" @@ -22,8 +21,6 @@ namespace lldb_private { class CPlusPlusLanguage : public Language { - ClangHighlighter m_highlighter; - public: class CxxMethodName : public Language::MethodName { public: @@ -81,8 +78,6 @@ class CPlusPlusLanguage : public Language { bool IsSourceFile(llvm::StringRef file_path) const override; - const Highlighter *GetHighlighter() const override { return &m_highlighter; } - // Static Functions static void Initialize(); diff --git a/lldb/source/Plugins/Language/ObjC/CMakeLists.txt b/lldb/source/Plugins/Language/ObjC/CMakeLists.txt index b9fc5ce754c49..5e554b22030fa 100644 --- a/lldb/source/Plugins/Language/ObjC/CMakeLists.txt +++ b/lldb/source/Plugins/Language/ObjC/CMakeLists.txt @@ -22,7 +22,6 @@ add_lldb_library(lldbPluginObjCLanguage PLUGIN lldbUtility lldbValueObject lldbPluginAppleObjCRuntime - lldbPluginClangCommon lldbPluginTypeSystemClang CLANG_LIBS clangAST diff --git a/lldb/source/Plugins/Language/ObjC/ObjCLanguage.h b/lldb/source/Plugins/Language/ObjC/ObjCLanguage.h index ced6bd3290a86..cee80ed0b7f40 100644 --- a/lldb/source/Plugins/Language/ObjC/ObjCLanguage.h +++ b/lldb/source/Plugins/Language/ObjC/ObjCLanguage.h @@ -12,7 +12,6 @@ #include <cstring> #include <vector> -#include "Plugins/Language/ClangCommon/ClangHighlighter.h" #include "lldb/Target/Language.h" #include "lldb/Utility/ConstString.h" #include "lldb/lldb-private.h" @@ -20,8 +19,6 @@ namespace lldb_private { class ObjCLanguage : public Language { - ClangHighlighter m_highlighter; - public: class ObjCMethodName { public: @@ -164,8 +161,6 @@ class ObjCLanguage : public Language { bool IsSourceFile(llvm::StringRef file_path) const override; - const Highlighter *GetHighlighter() const override { return &m_highlighter; } - // Static Functions static void Initialize(); diff --git a/lldb/source/Plugins/Language/ObjCPlusPlus/CMakeLists.txt b/lldb/source/Plugins/Language/ObjCPlusPlus/CMakeLists.txt index 1aa5cc1ed4882..3f7249e4bf7ac 100644 --- a/lldb/source/Plugins/Language/ObjCPlusPlus/CMakeLists.txt +++ b/lldb/source/Plugins/Language/ObjCPlusPlus/CMakeLists.txt @@ -4,5 +4,4 @@ add_lldb_library(lldbPluginObjCPlusPlusLanguage PLUGIN LINK_LIBS lldbCore lldbTarget - lldbPluginClangCommon ) diff --git a/lldb/source/Plugins/Language/ObjCPlusPlus/ObjCPlusPlusLanguage.h b/lldb/source/Plugins/Language/ObjCPlusPlus/ObjCPlusPlusLanguage.h index 229dffe8462e4..ab45acd9c68db 100644 --- a/lldb/source/Plugins/Language/ObjCPlusPlus/ObjCPlusPlusLanguage.h +++ b/lldb/source/Plugins/Language/ObjCPlusPlus/ObjCPlusPlusLanguage.h @@ -9,15 +9,12 @@ #ifndef LLDB_SOURCE_PLUGINS_LANGUAGE_OBJCPLUSPLUS_OBJCPLUSPLUSLANGUAGE_H #define LLDB_SOURCE_PLUGINS_LANGUAGE_OBJCPLUSPLUS_OBJCPLUSPLUSLANGUAGE_H -#include "Plugins/Language/ClangCommon/ClangHighlighter.h" #include "lldb/Target/Language.h" #include "lldb/lldb-private.h" namespace lldb_private { class ObjCPlusPlusLanguage : public Language { - ClangHighlighter m_highlighter; - public: ObjCPlusPlusLanguage() = default; @@ -33,8 +30,6 @@ class ObjCPlusPlusLanguage : public Language { bool IsSourceFile(llvm::StringRef file_path) const override; - const Highlighter *GetHighlighter() const override { return &m_highlighter; } - // Static Functions static void Initialize(); diff --git a/lldb/source/Plugins/REPL/Clang/CMakeLists.txt b/lldb/source/Plugins/REPL/Clang/CMakeLists.txt index 3a7e188d7a29a..c020ab82ad292 100644 --- a/lldb/source/Plugins/REPL/Clang/CMakeLists.txt +++ b/lldb/source/Plugins/REPL/Clang/CMakeLists.txt @@ -10,7 +10,6 @@ add_lldb_library(lldbPluginClangREPL PLUGIN lldbSymbol lldbTarget lldbUtility - lldbPluginClangCommon lldbPluginCPPRuntime lldbPluginTypeSystemClang ) diff --git a/lldb/unittests/CMakeLists.txt b/lldb/unittests/CMakeLists.txt index 194dd425430e2..76d8b7391c5cf 100644 --- a/lldb/unittests/CMakeLists.txt +++ b/lldb/unittests/CMakeLists.txt @@ -64,6 +64,7 @@ add_subdirectory(DataFormatter) add_subdirectory(Disassembler) add_subdirectory(Editline) add_subdirectory(Expression) +add_subdirectory(Highlighter) add_subdirectory(Host) add_subdirectory(Instruction) add_subdirectory(Interpreter) diff --git a/lldb/unittests/Language/Highlighting/CMakeLists.txt b/lldb/unittests/Highlighter/CMakeLists.txt similarity index 71% rename from lldb/unittests/Language/Highlighting/CMakeLists.txt rename to lldb/unittests/Highlighter/CMakeLists.txt index 576f8dff10f03..255f7bccf3e73 100644 --- a/lldb/unittests/Language/Highlighting/CMakeLists.txt +++ b/lldb/unittests/Highlighter/CMakeLists.txt @@ -2,7 +2,9 @@ add_lldb_unittest(HighlighterTests HighlighterTest.cpp LINK_LIBS + lldbPluginHighlighterDefault + lldbPluginHighlighterClang lldbPluginCPlusPlusLanguage lldbPluginObjCLanguage lldbPluginObjCPlusPlusLanguage - ) +) diff --git a/lldb/unittests/Language/Highlighting/HighlighterTest.cpp b/lldb/unittests/Highlighter/HighlighterTest.cpp similarity index 95% rename from lldb/unittests/Language/Highlighting/HighlighterTest.cpp rename to lldb/unittests/Highlighter/HighlighterTest.cpp index 150b356efe595..6c0c5694967ce 100644 --- a/lldb/unittests/Language/Highlighting/HighlighterTest.cpp +++ b/lldb/unittests/Highlighter/HighlighterTest.cpp @@ -8,12 +8,14 @@ #include "gtest/gtest.h" -#include "lldb/Core/Highlighter.h" -#include "lldb/Host/FileSystem.h" - +#include "Plugins/Highlighter/Clang/ClangHighlighter.h" +#include "Plugins/Highlighter/Default/DefaultHighlighter.h" #include "Plugins/Language/CPlusPlus/CPlusPlusLanguage.h" #include "Plugins/Language/ObjC/ObjCLanguage.h" #include "Plugins/Language/ObjCPlusPlus/ObjCPlusPlusLanguage.h" +#include "lldb/Core/Highlighter.h" +#include "lldb/Host/FileSystem.h" + #include "TestingSupport/SubsystemRAII.h" #include <optional> @@ -21,8 +23,10 @@ using namespace lldb_private; namespace { class HighlighterTest : public testing::Test { - SubsystemRAII<FileSystem, CPlusPlusLanguage, ObjCLanguage, - ObjCPlusPlusLanguage> + // We need the language plugins for detecting the language based on the + // filename. + SubsystemRAII<FileSystem, ClangHighlighter, DefaultHighlighter, + CPlusPlusLanguage, ObjCLanguage, ObjCPlusPlusLanguage> subsystems; }; } // namespace @@ -88,7 +92,8 @@ static std::string highlightDefault(llvm::StringRef code, HighlightStyle style, std::optional<size_t> cursor = std::optional<size_t>()) { HighlighterManager mgr; - return mgr.getDefaultHighlighter().Highlight(style, code, cursor); + return mgr.getHighlighterFor(lldb::LanguageType::eLanguageTypeUnknown, "") + .Highlight(style, code, cursor); } TEST_F(HighlighterTest, DefaultHighlighter) { diff --git a/lldb/unittests/Language/CMakeLists.txt b/lldb/unittests/Language/CMakeLists.txt index 6f173568c76e6..a0bdc62af98c6 100644 --- a/lldb/unittests/Language/CMakeLists.txt +++ b/lldb/unittests/Language/CMakeLists.txt @@ -1,4 +1,3 @@ add_subdirectory(CPlusPlus) add_subdirectory(CLanguages) -add_subdirectory(Highlighting) add_subdirectory(ObjC) _______________________________________________ lldb-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
