[clang-tools-extra] 263300b - [clangd] Enforce SymbolKind YAML coverage with -Wswitch (#225945)
via cfe-commits
cfe-commits at lists.llvm.org
Wed Sep 23 16:56:32 PDT 2026
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
}
};
More information about the cfe-commits
mailing list