xref: /llvm-project/clang-tools-extra/clang-tidy/modernize/UseDesignatedInitializersCheck.h (revision 31b84d459cea6bde7f8cb232e70ffb0cf8e5d1ed)
1525fe449SDanny Mösch //===--- UseDesignatedInitializersCheck.h - clang-tidy ----------*- C++ -*-===//
2525fe449SDanny Mösch //
3525fe449SDanny Mösch // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4525fe449SDanny Mösch // See https://llvm.org/LICENSE.txt for license information.
5525fe449SDanny Mösch // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6525fe449SDanny Mösch //
7525fe449SDanny Mösch //===----------------------------------------------------------------------===//
8525fe449SDanny Mösch 
9525fe449SDanny Mösch #ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_MODERNIZE_USEDESIGNATEDINITIALIZERSCHECK_H
10525fe449SDanny Mösch #define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_MODERNIZE_USEDESIGNATEDINITIALIZERSCHECK_H
11525fe449SDanny Mösch 
12525fe449SDanny Mösch #include "../ClangTidyCheck.h"
13525fe449SDanny Mösch 
14525fe449SDanny Mösch namespace clang::tidy::modernize {
15525fe449SDanny Mösch 
16525fe449SDanny Mösch /// Finds initializer lists for aggregate type that could be
17525fe449SDanny Mösch /// written as designated initializers instead.
18525fe449SDanny Mösch ///
19525fe449SDanny Mösch /// For the user-facing documentation see:
20525fe449SDanny Mösch /// http://clang.llvm.org/extra/clang-tidy/checks/modernize/use-designated-initializers.html
21525fe449SDanny Mösch class UseDesignatedInitializersCheck : public ClangTidyCheck {
22525fe449SDanny Mösch public:
23525fe449SDanny Mösch   UseDesignatedInitializersCheck(StringRef Name, ClangTidyContext *Context);
24525fe449SDanny Mösch   void registerMatchers(ast_matchers::MatchFinder *Finder) override;
25525fe449SDanny Mösch   void check(const ast_matchers::MatchFinder::MatchResult &Result) override;
26525fe449SDanny Mösch   void storeOptions(ClangTidyOptions::OptionMap &Opts) override;
27525fe449SDanny Mösch 
getCheckTraversalKind()28525fe449SDanny Mösch   std::optional<TraversalKind> getCheckTraversalKind() const override {
29525fe449SDanny Mösch     return TK_IgnoreUnlessSpelledInSource;
30525fe449SDanny Mösch   }
31525fe449SDanny Mösch 
isLanguageVersionSupported(const LangOptions & LangOpts)32*31b84d45SPiotr Zegar   bool isLanguageVersionSupported(const LangOptions &LangOpts) const override {
33*31b84d45SPiotr Zegar     return LangOpts.CPlusPlus20 || LangOpts.C99 ||
34*31b84d45SPiotr Zegar            (LangOpts.CPlusPlus && !StrictCppStandardCompliance) ||
35*31b84d45SPiotr Zegar            (!LangOpts.CPlusPlus && !LangOpts.ObjC &&
36*31b84d45SPiotr Zegar             !StrictCStandardCompliance);
37*31b84d45SPiotr Zegar   }
38*31b84d45SPiotr Zegar 
39525fe449SDanny Mösch private:
40525fe449SDanny Mösch   bool IgnoreSingleElementAggregates;
41525fe449SDanny Mösch   bool RestrictToPODTypes;
42525fe449SDanny Mösch   bool IgnoreMacros;
43*31b84d45SPiotr Zegar   bool StrictCStandardCompliance;
44*31b84d45SPiotr Zegar   bool StrictCppStandardCompliance;
45525fe449SDanny Mösch };
46525fe449SDanny Mösch 
47525fe449SDanny Mösch } // namespace clang::tidy::modernize
48525fe449SDanny Mösch 
49525fe449SDanny Mösch #endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_MODERNIZE_USEDESIGNATEDINITIALIZERSCHECK_H
50