diff --git a/clang-tools-extra/clang-tidy/ClangTidyCheck.h b/clang-tools-extra/clang-tidy/ClangTidyCheck.h --- a/clang-tools-extra/clang-tidy/ClangTidyCheck.h +++ b/clang-tools-extra/clang-tidy/ClangTidyCheck.h @@ -405,9 +405,13 @@ StringRef Value) const; /// Stores an option with the check-local name \p LocalName with - /// ``int64_t`` value \p Value to \p Options. - void store(ClangTidyOptions::OptionMap &Options, StringRef LocalName, - int64_t Value) const; + /// integer value \p Value to \p Options. + template + std::enable_if_t::value> + store(ClangTidyOptions::OptionMap &Options, StringRef LocalName, + T Value) const { + storeInt(Options, LocalName, Value); + } /// Stores an option with the check-local name \p LocalName as the string /// representation of the Enum \p Value to \p Options. @@ -448,6 +452,9 @@ return Result; } + void storeInt(ClangTidyOptions::OptionMap &Options, StringRef LocalName, + int64_t Value) const; + static void logErrToStdErr(llvm::Error &&Err); std::string NamePrefix; @@ -509,6 +516,13 @@ bool ClangTidyCheck::OptionsView::getLocalOrGlobal(StringRef LocalName, bool Default) const; +/// Stores an option with the check-local name \p LocalName with +/// bool value \p Value to \p Options. +template <> +void ClangTidyCheck::OptionsView::store( + ClangTidyOptions::OptionMap &Options, StringRef LocalName, + bool Value) const; + } // namespace tidy } // namespace clang diff --git a/clang-tools-extra/clang-tidy/ClangTidyCheck.cpp b/clang-tools-extra/clang-tidy/ClangTidyCheck.cpp --- a/clang-tools-extra/clang-tidy/ClangTidyCheck.cpp +++ b/clang-tools-extra/clang-tidy/ClangTidyCheck.cpp @@ -155,12 +155,19 @@ Options[NamePrefix + LocalName.str()] = Value; } -void ClangTidyCheck::OptionsView::store(ClangTidyOptions::OptionMap &Options, - StringRef LocalName, - int64_t Value) const { +void ClangTidyCheck::OptionsView::storeInt(ClangTidyOptions::OptionMap &Options, + StringRef LocalName, + int64_t Value) const { store(Options, LocalName, llvm::itostr(Value)); } +template <> +void ClangTidyCheck::OptionsView::store( + ClangTidyOptions::OptionMap &Options, StringRef LocalName, + bool Value) const { + store(Options, LocalName, Value ? StringRef("true") : StringRef("false")); +} + llvm::Expected ClangTidyCheck::OptionsView::getEnumInt(StringRef LocalName, ArrayRef Mapping, diff --git a/clang-tools-extra/test/clang-tidy/infrastructure/config-files.cpp b/clang-tools-extra/test/clang-tidy/infrastructure/config-files.cpp --- a/clang-tools-extra/test/clang-tidy/infrastructure/config-files.cpp +++ b/clang-tools-extra/test/clang-tidy/infrastructure/config-files.cpp @@ -18,13 +18,13 @@ // RUN: clang-tidy -dump-config %S/Inputs/config-files/4/44/- -- | FileCheck %s -check-prefix=CHECK-CHILD4 // CHECK-CHILD4: Checks: {{.*}}modernize-loop-convert,modernize-use-using,llvm-qualified-auto // CHECK-CHILD4: - key: llvm-qualified-auto.AddConstToQualified -// CHECK-CHILD4-NEXT: value: '1' +// CHECK-CHILD4-NEXT: value: 'true' // CHECK-CHILD4: - key: modernize-loop-convert.MaxCopySize // CHECK-CHILD4-NEXT: value: '20' // CHECK-CHILD4: - key: modernize-loop-convert.MinConfidence // CHECK-CHILD4-NEXT: value: reasonable // CHECK-CHILD4: - key: modernize-use-using.IgnoreMacros -// CHECK-CHILD4-NEXT: value: '0' +// CHECK-CHILD4-NEXT: value: 'false' // RUN: clang-tidy --explain-config %S/Inputs/config-files/4/44/- -- | FileCheck %s -check-prefix=CHECK-EXPLAIN // CHECK-EXPLAIN: 'llvm-qualified-auto' is enabled in the {{.*}}{{[/\\]}}Inputs{{[/\\]}}config-files{{[/\\]}}4{{[/\\]}}44{{[/\\]}}.clang-tidy. @@ -42,7 +42,7 @@ // CHECK-CHILD5: - key: modernize-loop-convert.MinConfidence // CHECK-CHILD5-NEXT: value: reasonable // CHECK-CHILD5: - key: modernize-use-using.IgnoreMacros -// CHECK-CHILD5-NEXT: value: '0' +// CHECK-CHILD5-NEXT: value: 'false' // RUN: clang-tidy -dump-config \ // RUN: --config='{InheritParentConfig: false, \