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
