https://github.com/HerrCai0907 updated https://github.com/llvm/llvm-project/pull/121057
>From 98d65a0b9a1189ce73d97d76527b458f93f17b43 Mon Sep 17 00:00:00 2001 From: Congcong Cai <congcongcai0...@163.com> Date: Tue, 24 Dec 2024 23:32:02 +0800 Subject: [PATCH 1/4] [clang-tidy] add depercation warning for non-whitelisted global options --- .../clang-tidy/ClangTidyCheck.cpp | 32 ++++++++++++------- .../checkers/modernize/use-std-format-fmt.cpp | 2 +- .../deprecation-global-option.cpp | 3 ++ 3 files changed, 25 insertions(+), 12 deletions(-) create mode 100644 clang-tools-extra/test/clang-tidy/infrastructure/deprecation-global-option.cpp diff --git a/clang-tools-extra/clang-tidy/ClangTidyCheck.cpp b/clang-tools-extra/clang-tidy/ClangTidyCheck.cpp index 6028bb2258136b..5161ffeedf70df 100644 --- a/clang-tools-extra/clang-tidy/ClangTidyCheck.cpp +++ b/clang-tools-extra/clang-tidy/ClangTidyCheck.cpp @@ -7,11 +7,11 @@ //===----------------------------------------------------------------------===// #include "ClangTidyCheck.h" -#include "llvm/ADT/SmallString.h" #include "llvm/ADT/StringRef.h" -#include "llvm/Support/Error.h" +#include "llvm/ADT/StringSet.h" #include "llvm/Support/YAMLParser.h" #include <optional> +#include <string> namespace clang::tidy { @@ -62,16 +62,29 @@ ClangTidyCheck::OptionsView::get(StringRef LocalName) const { return std::nullopt; } +static const llvm::StringSet<> DeprecatedGlobalOptions{ + "StrictMode", + "IgnoreMacros", +}; + static ClangTidyOptions::OptionMap::const_iterator findPriorityOption(const ClangTidyOptions::OptionMap &Options, StringRef NamePrefix, StringRef LocalName, - llvm::StringSet<> *Collector) { + ClangTidyContext *Context) { + llvm::StringSet<> *Collector = Context->getOptionsCollector(); if (Collector) { Collector->insert((NamePrefix + LocalName).str()); Collector->insert(LocalName); } auto IterLocal = Options.find((NamePrefix + LocalName).str()); auto IterGlobal = Options.find(LocalName); + // FIXME: temporary solution for deprecation warnings, should be removed + // after 22.x. + if (IterGlobal != Options.end() && + DeprecatedGlobalOptions.contains(LocalName)) + Context->configurationDiag( + "deprecation global option '%0', please use '%1%0'.") + << LocalName << NamePrefix; if (IterLocal == Options.end()) return IterGlobal; if (IterGlobal == Options.end()) @@ -83,8 +96,7 @@ findPriorityOption(const ClangTidyOptions::OptionMap &Options, std::optional<StringRef> ClangTidyCheck::OptionsView::getLocalOrGlobal(StringRef LocalName) const { - auto Iter = findPriorityOption(CheckOptions, NamePrefix, LocalName, - Context->getOptionsCollector()); + auto Iter = findPriorityOption(CheckOptions, NamePrefix, LocalName, Context); if (Iter != CheckOptions.end()) return StringRef(Iter->getValue().Value); return std::nullopt; @@ -117,8 +129,7 @@ ClangTidyCheck::OptionsView::get<bool>(StringRef LocalName) const { template <> std::optional<bool> ClangTidyCheck::OptionsView::getLocalOrGlobal<bool>(StringRef LocalName) const { - auto Iter = findPriorityOption(CheckOptions, NamePrefix, LocalName, - Context->getOptionsCollector()); + auto Iter = findPriorityOption(CheckOptions, NamePrefix, LocalName, Context); if (Iter != CheckOptions.end()) { if (auto Result = getAsBool(Iter->getValue().Value, Iter->getKey())) return Result; @@ -157,10 +168,9 @@ std::optional<int64_t> ClangTidyCheck::OptionsView::getEnumInt( bool IgnoreCase) const { if (!CheckGlobal && Context->getOptionsCollector()) Context->getOptionsCollector()->insert((NamePrefix + LocalName).str()); - auto Iter = CheckGlobal - ? findPriorityOption(CheckOptions, NamePrefix, LocalName, - Context->getOptionsCollector()) - : CheckOptions.find((NamePrefix + LocalName).str()); + auto Iter = CheckGlobal ? findPriorityOption(CheckOptions, NamePrefix, + LocalName, Context) + : CheckOptions.find((NamePrefix + LocalName).str()); if (Iter == CheckOptions.end()) return std::nullopt; diff --git a/clang-tools-extra/test/clang-tidy/checkers/modernize/use-std-format-fmt.cpp b/clang-tools-extra/test/clang-tidy/checkers/modernize/use-std-format-fmt.cpp index 1eaf18ac119966..71c8af190467cf 100644 --- a/clang-tools-extra/test/clang-tidy/checkers/modernize/use-std-format-fmt.cpp +++ b/clang-tools-extra/test/clang-tidy/checkers/modernize/use-std-format-fmt.cpp @@ -1,6 +1,6 @@ // RUN: %check_clang_tidy %s modernize-use-std-format %t -- \ // RUN: -config="{CheckOptions: { \ -// RUN: StrictMode: true, \ +// RUN: modernize-use-std-format.StrictMode: true, \ // RUN: modernize-use-std-format.StrFormatLikeFunctions: 'fmt::sprintf', \ // RUN: modernize-use-std-format.ReplacementFormatFunction: 'fmt::format', \ // RUN: modernize-use-std-format.FormatHeader: '<fmt/core.h>' \ diff --git a/clang-tools-extra/test/clang-tidy/infrastructure/deprecation-global-option.cpp b/clang-tools-extra/test/clang-tidy/infrastructure/deprecation-global-option.cpp new file mode 100644 index 00000000000000..35adc2511f869b --- /dev/null +++ b/clang-tools-extra/test/clang-tidy/infrastructure/deprecation-global-option.cpp @@ -0,0 +1,3 @@ +// RUN: clang-tidy %s --config="{CheckOptions:{StrictMode: true}}" -checks="-*,modernize-use-std-format" | FileCheck %s + +// CHECK: warning: deprecation global option 'StrictMode', please use 'modernize-use-std-format.StrictMode'. [clang-tidy-config] >From 179098affe06cdae1f671d069dcbb2ec06a808d3 Mon Sep 17 00:00:00 2001 From: Congcong Cai <congcongcai0...@163.com> Date: Fri, 27 Dec 2024 17:04:59 +0800 Subject: [PATCH 2/4] update msg; only warn for global only options" --- clang-tools-extra/clang-tidy/ClangTidyCheck.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/clang-tools-extra/clang-tidy/ClangTidyCheck.cpp b/clang-tools-extra/clang-tidy/ClangTidyCheck.cpp index 5161ffeedf70df..4aa9fe228ee793 100644 --- a/clang-tools-extra/clang-tidy/ClangTidyCheck.cpp +++ b/clang-tools-extra/clang-tidy/ClangTidyCheck.cpp @@ -79,11 +79,11 @@ findPriorityOption(const ClangTidyOptions::OptionMap &Options, auto IterLocal = Options.find((NamePrefix + LocalName).str()); auto IterGlobal = Options.find(LocalName); // FIXME: temporary solution for deprecation warnings, should be removed - // after 22.x. - if (IterGlobal != Options.end() && + // after 22.x. Warn configuration deps on deprecation global options. + if (IterLocal == Options.end() && IterGlobal != Options.end() && DeprecatedGlobalOptions.contains(LocalName)) Context->configurationDiag( - "deprecation global option '%0', please use '%1%0'.") + "global option '%0' is deprecated, please use '%1%0' instead.") << LocalName << NamePrefix; if (IterLocal == Options.end()) return IterGlobal; >From 66004df523c576d950919c86d0bbee81b40d11fc Mon Sep 17 00:00:00 2001 From: Congcong Cai <congcongcai0...@163.com> Date: Sat, 28 Dec 2024 07:57:48 +0800 Subject: [PATCH 3/4] Update clang-tools-extra/test/clang-tidy/infrastructure/deprecation-global-option.cpp --- .../clang-tidy/infrastructure/deprecation-global-option.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clang-tools-extra/test/clang-tidy/infrastructure/deprecation-global-option.cpp b/clang-tools-extra/test/clang-tidy/infrastructure/deprecation-global-option.cpp index 35adc2511f869b..4c9854d221832c 100644 --- a/clang-tools-extra/test/clang-tidy/infrastructure/deprecation-global-option.cpp +++ b/clang-tools-extra/test/clang-tidy/infrastructure/deprecation-global-option.cpp @@ -1,3 +1,3 @@ // RUN: clang-tidy %s --config="{CheckOptions:{StrictMode: true}}" -checks="-*,modernize-use-std-format" | FileCheck %s -// CHECK: warning: deprecation global option 'StrictMode', please use 'modernize-use-std-format.StrictMode'. [clang-tidy-config] +// CHECK: warning: global option 'StrictMode' is deprecated, please use 'modernize-use-std-format.StrictMode' instead. [clang-tidy-config] >From 1289ede91f54cdd64a04ad54afce90a6b54149f0 Mon Sep 17 00:00:00 2001 From: Congcong Cai <congcongcai0...@163.com> Date: Mon, 30 Dec 2024 10:29:32 +0800 Subject: [PATCH 4/4] add release note --- clang-tools-extra/docs/ReleaseNotes.rst | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/clang-tools-extra/docs/ReleaseNotes.rst b/clang-tools-extra/docs/ReleaseNotes.rst index fa3a8e577a33ad..f33d79a3ca9872 100644 --- a/clang-tools-extra/docs/ReleaseNotes.rst +++ b/clang-tools-extra/docs/ReleaseNotes.rst @@ -117,7 +117,8 @@ Improvements to clang-tidy - Removed :program:`clang-tidy`'s global options for most of checks. All options are changed to local options except `IncludeStyle`, `StrictMode` and - `IgnoreMacros`. + `IgnoreMacros`. Global scoped `StrictMode` and `IgnoreMacros` are deprecated + and will be removed in further releases. .. csv-table:: :header: "Check", "Options removed from global option" _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits