Author: Andre Sun
Date: 2026-09-23T23:56:23Z
New Revision: 263300bfce487bc7a115a31f59619568d9a20632

URL: 
https://github.com/llvm/llvm-project/commit/263300bfce487bc7a115a31f59619568d9a20632
DIFF: 
https://github.com/llvm/llvm-project/commit/263300bfce487bc7a115a31f59619568d9a20632.diff

LOG: [clangd] Enforce SymbolKind YAML coverage with -Wswitch (#225945)

Turn the SymbolKind YAML mappings into switch cases so missing mappings
trigger -Wswitch.

Follow-up to #222070.

Added: 
    

Modified: 
    clang-tools-extra/clangd/index/YAMLSerialization.cpp

Removed: 
    


################################################################################
diff  --git a/clang-tools-extra/clangd/index/YAMLSerialization.cpp 
b/clang-tools-extra/clangd/index/YAMLSerialization.cpp
index e042877a469c6..a0b4288a0c503 100644
--- a/clang-tools-extra/clangd/index/YAMLSerialization.cpp
+++ b/clang-tools-extra/clangd/index/YAMLSerialization.cpp
@@ -262,42 +262,51 @@ template <> struct 
ScalarEnumerationTraits<SymbolLanguage> {
 
 template <> struct ScalarEnumerationTraits<SymbolKind> {
   static void enumeration(IO &IO, SymbolKind &Value) {
-#define DEFINE_ENUM(name) IO.enumCase(Value, #name, SymbolKind::name)
-
-    DEFINE_ENUM(Unknown);
-    DEFINE_ENUM(Module);
-    DEFINE_ENUM(Namespace);
-    DEFINE_ENUM(NamespaceAlias);
-    DEFINE_ENUM(Macro);
-    DEFINE_ENUM(IncludeDirective);
-    DEFINE_ENUM(Enum);
-    DEFINE_ENUM(Struct);
-    DEFINE_ENUM(Class);
-    DEFINE_ENUM(Protocol);
-    DEFINE_ENUM(Extension);
-    DEFINE_ENUM(Union);
-    DEFINE_ENUM(TypeAlias);
-    DEFINE_ENUM(Function);
-    DEFINE_ENUM(Variable);
-    DEFINE_ENUM(Field);
-    DEFINE_ENUM(EnumConstant);
-    DEFINE_ENUM(InstanceMethod);
-    DEFINE_ENUM(ClassMethod);
-    DEFINE_ENUM(StaticMethod);
-    DEFINE_ENUM(InstanceProperty);
-    DEFINE_ENUM(ClassProperty);
-    DEFINE_ENUM(StaticProperty);
-    DEFINE_ENUM(Constructor);
-    DEFINE_ENUM(Destructor);
-    DEFINE_ENUM(ConversionFunction);
-    DEFINE_ENUM(Parameter);
-    DEFINE_ENUM(Using);
-    DEFINE_ENUM(TemplateTypeParm);
-    DEFINE_ENUM(TemplateTemplateParm);
-    DEFINE_ENUM(NonTypeTemplateParm);
-    DEFINE_ENUM(Concept);
+#define DEFINE_ENUM_FINAL(name)                                                
\
+  case SymbolKind::name:                                                       
\
+    IO.enumCase(Value, #name, SymbolKind::name)
+#define DEFINE_ENUM(name)                                                      
\
+  DEFINE_ENUM_FINAL(name);                                                     
\
+  [[fallthrough]]
+
+    SymbolKind Start = SymbolKind::Unknown;
+    switch (Start) {
+      DEFINE_ENUM(Unknown);
+      DEFINE_ENUM(Module);
+      DEFINE_ENUM(Namespace);
+      DEFINE_ENUM(NamespaceAlias);
+      DEFINE_ENUM(Macro);
+      DEFINE_ENUM(IncludeDirective);
+      DEFINE_ENUM(Enum);
+      DEFINE_ENUM(Struct);
+      DEFINE_ENUM(Class);
+      DEFINE_ENUM(Protocol);
+      DEFINE_ENUM(Extension);
+      DEFINE_ENUM(Union);
+      DEFINE_ENUM(TypeAlias);
+      DEFINE_ENUM(Function);
+      DEFINE_ENUM(Variable);
+      DEFINE_ENUM(Field);
+      DEFINE_ENUM(EnumConstant);
+      DEFINE_ENUM(InstanceMethod);
+      DEFINE_ENUM(ClassMethod);
+      DEFINE_ENUM(StaticMethod);
+      DEFINE_ENUM(InstanceProperty);
+      DEFINE_ENUM(ClassProperty);
+      DEFINE_ENUM(StaticProperty);
+      DEFINE_ENUM(Constructor);
+      DEFINE_ENUM(Destructor);
+      DEFINE_ENUM(ConversionFunction);
+      DEFINE_ENUM(Parameter);
+      DEFINE_ENUM(Using);
+      DEFINE_ENUM(TemplateTypeParm);
+      DEFINE_ENUM(TemplateTemplateParm);
+      DEFINE_ENUM(NonTypeTemplateParm);
+      DEFINE_ENUM_FINAL(Concept);
+    }
 
 #undef DEFINE_ENUM
+#undef DEFINE_ENUM_FINAL
   }
 };
 


        
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to