[clang-tools-extra] Symbol tags in SymbolInformation, WorkspaceSymbol, CallHierarchyItem and TypeHierarchyItem (PR #170103)

Dimitri Ratz via cfe-commits cfe-commits at lists.llvm.org
Tue Apr 14 04:00:09 PDT 2026


================
@@ -208,21 +320,47 @@ SymbolTags computeSymbolTags(const NamedDecl &ND) {
   return Result;
 }
 
+std::vector<SymbolTag> expandTagBitmask(const SymbolTags STGS) {
+  std::vector<SymbolTag> Tags;
+
+  if (STGS == 0)
+    return Tags;
+
+  // No filtering required since this function is only used for Symbols from the
+  // index, which have already been filtered in getSymbolTags(const NamedDecl
+  // &ND).
+
+  // Iterate through SymbolTag enum values and collect any that are present in
+  // the bitmask. SymbolTag values are in the numeric range
+  // [FirstTag .. LastTag].
+  constexpr unsigned MinTag = static_cast<unsigned>(SymbolTag::FirstTag);
+  constexpr unsigned MaxTag = static_cast<unsigned>(SymbolTag::LastTag);
+  for (unsigned I = MinTag; I <= MaxTag; ++I) {
+    auto ST = static_cast<SymbolTag>(I);
+    if (STGS & toSymbolTagBitmask(ST))
+      Tags.push_back(ST);
+  }
+  return Tags;
+}
+
 std::vector<SymbolTag> getSymbolTags(const NamedDecl &ND) {
   const auto symbolTags = computeSymbolTags(ND);
----------------
ratzdi wrote:

done.

https://github.com/llvm/llvm-project/pull/170103


More information about the cfe-commits mailing list