Author: Nathan James Date: 2020-07-14T22:19:37+01:00 New Revision: fcf0f75a59fb565e57d71c29f3e820828301c7e2
URL: https://github.com/llvm/llvm-project/commit/fcf0f75a59fb565e57d71c29f3e820828301c7e2 DIFF: https://github.com/llvm/llvm-project/commit/fcf0f75a59fb565e57d71c29f3e820828301c7e2.diff LOG: [clang-tidy] OptionsView::store specialized on bool Following on fcf7cc268fe and 672207c319a which granted checks the ability to read boolean configuration arguments as `true` or `false`. This enables storing the options back to the configuration file using `true` and `false`. This is in line with how clang-format dumps boolean options in its style config. Reviewed By: aaron.ballman Differential Revision: https://reviews.llvm.org/D83053 Added: Modified: clang-tools-extra/clang-tidy/ClangTidyCheck.cpp clang-tools-extra/clang-tidy/ClangTidyCheck.h clang-tools-extra/test/clang-tidy/infrastructure/config-files.cpp Removed: ################################################################################ diff --git a/clang-tools-extra/clang-tidy/ClangTidyCheck.cpp b/clang-tools-extra/clang-tidy/ClangTidyCheck.cpp index e149978bcdea..c24b8553999c 100644 --- a/clang-tools-extra/clang-tidy/ClangTidyCheck.cpp +++ b/clang-tools-extra/clang-tidy/ClangTidyCheck.cpp @@ -155,12 +155,19 @@ void ClangTidyCheck::OptionsView::store(ClangTidyOptions::OptionMap &Options, 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<bool>( + ClangTidyOptions::OptionMap &Options, StringRef LocalName, + bool Value) const { + store(Options, LocalName, Value ? StringRef("true") : StringRef("false")); +} + llvm::Expected<int64_t> ClangTidyCheck::OptionsView::getEnumInt(StringRef LocalName, ArrayRef<NameAndValue> Mapping, diff --git a/clang-tools-extra/clang-tidy/ClangTidyCheck.h b/clang-tools-extra/clang-tidy/ClangTidyCheck.h index 3c625ee0cb79..54b725126752 100644 --- a/clang-tools-extra/clang-tidy/ClangTidyCheck.h +++ b/clang-tools-extra/clang-tidy/ClangTidyCheck.h @@ -405,9 +405,13 @@ class ClangTidyCheck : public ast_matchers::MatchFinder::MatchCallback { 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 <typename T> + std::enable_if_t<std::is_integral<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 @@ class ClangTidyCheck : public ast_matchers::MatchFinder::MatchCallback { 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 @@ template <> bool ClangTidyCheck::OptionsView::getLocalOrGlobal<bool>(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<bool>( + ClangTidyOptions::OptionMap &Options, StringRef LocalName, + bool Value) const; + } // namespace tidy } // namespace clang diff --git a/clang-tools-extra/test/clang-tidy/infrastructure/config-files.cpp b/clang-tools-extra/test/clang-tidy/infrastructure/config-files.cpp index ee1ed49472ba..d2a0a8c2a150 100644 --- 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, \ _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits