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

Reply via email to