@@ -57,10 +57,9 @@ struct MissingIncludeInfo {
|
||||
IncludeCleanerCheck::IncludeCleanerCheck(StringRef Name,
|
||||
ClangTidyContext *Context)
|
||||
: ClangTidyCheck(Name, Context),
|
||||
IgnoreHeaders(utils::options::parseStringList(
|
||||
Options.getLocalOrGlobal("IgnoreHeaders", ""))),
|
||||
DeduplicateFindings(
|
||||
Options.getLocalOrGlobal("DeduplicateFindings", true)) {
|
||||
IgnoreHeaders(
|
||||
utils::options::parseStringList(Options.get("IgnoreHeaders", ""))),
|
||||
DeduplicateFindings(Options.get("DeduplicateFindings", true)) {
|
||||
for (const auto &Header : IgnoreHeaders) {
|
||||
if (!llvm::Regex{Header}.isValid())
|
||||
configurationDiag("Invalid ignore headers regex '%0'") << Header;
|
||||
|
||||
@@ -26,7 +26,7 @@ public:
|
||||
ClangTidyContext *Context)
|
||||
: ClangTidyCheck(Name, Context),
|
||||
IgnoreMacros(Options.getLocalOrGlobal("IgnoreMacros", true)),
|
||||
Strict(Options.getLocalOrGlobal("Strict", false)) {}
|
||||
Strict(Options.get("Strict", false)) {}
|
||||
|
||||
void storeOptions(ClangTidyOptions::OptionMap &Opts) override;
|
||||
void registerMatchers(ast_matchers::MatchFinder *Finder) override;
|
||||
|
||||
@@ -115,6 +115,24 @@ Improvements to clang-tidy
|
||||
- Improved :program:`run-clang-tidy.py` script. Fixed minor shutdown noise
|
||||
happening on certain platforms when interrupting the script.
|
||||
|
||||
- Removed :program:`clang-tidy`'s global options for most of checks. All options
|
||||
are changed to local options except `IncludeStyle`, `StrictMode` and
|
||||
`IgnoreMacros`.
|
||||
|
||||
.. csv-table::
|
||||
:header: "Check", "Options removed from global option"
|
||||
|
||||
:doc:`bugprone-reserved-identifier <clang-tidy/checks/bugprone/reserved-identifier>`, AggressiveDependentMemberLookup
|
||||
:doc:`bugprone-unchecked-optional-access <clang-tidy/checks/bugprone/unchecked-optional-access>`, IgnoreSmartPointerDereference
|
||||
:doc:`cppcoreguidelines-pro-type-member-init <clang-tidy/checks/cppcoreguidelines/pro-type-member-init>`, UseAssignment
|
||||
:doc:`cppcoreguidelines-rvalue-reference-param-not-moved <clang-tidy/checks/cppcoreguidelines/rvalue-reference-param-not-moved>`, AllowPartialMove; IgnoreUnnamedParams; IgnoreNonDeducedTemplateTypes
|
||||
:doc:`misc-include-cleaner <clang-tidy/checks/misc/include-cleaner>`, IgnoreHeaders; DeduplicateFindings
|
||||
:doc:`performance-inefficient-vector-operation <clang-tidy/checks/performance/inefficient-vector-operation>`, EnableProto
|
||||
:doc:`readability-identifier-naming <clang-tidy/checks/readability/identifier-naming>`, AggressiveDependentMemberLookup
|
||||
:doc:`readability-inconsistent-declaration-parameter-name <clang-tidy/checks/readability/inconsistent-declaration-parameter-name>`, Strict
|
||||
:doc:`readability-redundant-access-specifiers <clang-tidy/checks/readability/redundant-access-specifiers>`, CheckFirstDeclaration
|
||||
:doc:`readability-redundant-casting <clang-tidy/checks/readability/redundant-casting>`, IgnoreTypeAliases
|
||||
|
||||
New checks
|
||||
^^^^^^^^^^
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// RUN: %check_clang_tidy %s bugprone-argument-comment %t -- \
|
||||
// RUN: -config="{CheckOptions: {StrictMode: true}}" --
|
||||
// RUN: -config="{CheckOptions: {bugprone-argument-comment.StrictMode: true}}" --
|
||||
|
||||
void f(int _with_underscores_);
|
||||
void g(int x_);
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// RUN: %check_clang_tidy -check-suffix=STRICT %s cppcoreguidelines-pro-type-const-cast %t -- -config="{CheckOptions: {StrictMode: true}}"
|
||||
// RUN: %check_clang_tidy -check-suffix=STRICT %s cppcoreguidelines-pro-type-const-cast %t -- -config="{CheckOptions: {cppcoreguidelines-pro-type-const-cast.StrictMode: true}}"
|
||||
// RUN: %check_clang_tidy -check-suffix=NSTRICT %s cppcoreguidelines-pro-type-const-cast %t
|
||||
|
||||
namespace Const {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// RUN: %check_clang_tidy -check-suffixes=NSTRICT,STRICT %s cppcoreguidelines-pro-type-static-cast-downcast %t
|
||||
// RUN: %check_clang_tidy -check-suffix=NSTRICT %s cppcoreguidelines-pro-type-static-cast-downcast %t -- -config="{CheckOptions: {StrictMode: false}}"
|
||||
// RUN: %check_clang_tidy -check-suffix=NSTRICT %s cppcoreguidelines-pro-type-static-cast-downcast %t -- -config="{CheckOptions: {cppcoreguidelines-pro-type-static-cast-downcast.StrictMode: false}}"
|
||||
|
||||
class Base {
|
||||
};
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// RUN: %check_clang_tidy %s misc-unused-parameters %t -- \
|
||||
// RUN: -config="{CheckOptions: {StrictMode: true}}" --
|
||||
// RUN: -config="{CheckOptions: {misc-unused-parameters.StrictMode: true}}" --
|
||||
|
||||
// Warn on empty function bodies in StrictMode.
|
||||
namespace strict_mode {
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
// RUN: %check_clang_tidy \
|
||||
// RUN: -std=c++20 %s modernize-use-std-format %t -- \
|
||||
// RUN: -config="{CheckOptions: {StrictMode: true}}" \
|
||||
// RUN: -config="{CheckOptions: {modernize-use-std-format.StrictMode: true}}" \
|
||||
// RUN: -- -isystem %clang_tidy_headers \
|
||||
// RUN: -DPRI_CMDLINE_MACRO="\"s\"" \
|
||||
// RUN: -D__PRI_CMDLINE_MACRO="\"s\""
|
||||
// RUN: %check_clang_tidy \
|
||||
// RUN: -std=c++20 %s modernize-use-std-format %t -- \
|
||||
// RUN: -config="{CheckOptions: {StrictMode: false}}" \
|
||||
// RUN: -config="{CheckOptions: {modernize-use-std-format.StrictMode: false}}" \
|
||||
// RUN: -- -isystem %clang_tidy_headers \
|
||||
// RUN: -DPRI_CMDLINE_MACRO="\"s\"" \
|
||||
// RUN: -D__PRI_CMDLINE_MACRO="\"s\""
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
// RUN: %check_clang_tidy \
|
||||
// RUN: -std=c++23 %s modernize-use-std-print %t -- \
|
||||
// RUN: -config="{CheckOptions: {StrictMode: true}}" \
|
||||
// RUN: -config="{CheckOptions: {modernize-use-std-print.StrictMode: true}}" \
|
||||
// RUN: -- -isystem %clang_tidy_headers
|
||||
// RUN: %check_clang_tidy \
|
||||
// RUN: -std=c++23 %s modernize-use-std-print %t -- \
|
||||
// RUN: -config="{CheckOptions: {StrictMode: false}}" \
|
||||
// RUN: -config="{CheckOptions: {modernize-use-std-print.StrictMode: false}}" \
|
||||
// RUN: -- -isystem %clang_tidy_headers
|
||||
|
||||
#include <cstdio>
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
// RUN: %check_clang_tidy -check-suffixes=,STRICT \
|
||||
// RUN: -std=c++23 %s modernize-use-std-print %t -- \
|
||||
// RUN: -config="{CheckOptions: {StrictMode: true}}" \
|
||||
// RUN: -config="{CheckOptions: {modernize-use-std-print.StrictMode: true}}" \
|
||||
// RUN: -- -isystem %clang_tidy_headers -fexceptions \
|
||||
// RUN: -DPRI_CMDLINE_MACRO="\"s\"" \
|
||||
// RUN: -D__PRI_CMDLINE_MACRO="\"s\""
|
||||
// RUN: %check_clang_tidy -check-suffixes=,NOTSTRICT \
|
||||
// RUN: -std=c++23 %s modernize-use-std-print %t -- \
|
||||
// RUN: -config="{CheckOptions: {StrictMode: false}}" \
|
||||
// RUN: -config="{CheckOptions: {modernize-use-std-print.StrictMode: false}}" \
|
||||
// RUN: -- -isystem %clang_tidy_headers -fexceptions \
|
||||
// RUN: -DPRI_CMDLINE_MACRO="\"s\"" \
|
||||
// RUN: -D__PRI_CMDLINE_MACRO="\"s\""
|
||||
|
||||
@@ -71,10 +71,12 @@ TEST(IncludeCleanerCheckTest, SuppressUnusedIncludes) {
|
||||
|
||||
std::vector<ClangTidyError> Errors;
|
||||
ClangTidyOptions Opts;
|
||||
Opts.CheckOptions["IgnoreHeaders"] = llvm::StringRef{llvm::formatv(
|
||||
"bar.h;{0};{1};vector;<list>;",
|
||||
llvm::Regex::escape(appendPathFileSystemIndependent({"foo", "qux.h"})),
|
||||
llvm::Regex::escape(appendPathFileSystemIndependent({"baz", "qux"})))};
|
||||
Opts.CheckOptions["test-check-0.IgnoreHeaders"] = llvm::StringRef{
|
||||
llvm::formatv("bar.h;{0};{1};vector;<list>;",
|
||||
llvm::Regex::escape(
|
||||
appendPathFileSystemIndependent({"foo", "qux.h"})),
|
||||
llvm::Regex::escape(
|
||||
appendPathFileSystemIndependent({"baz", "qux"})))};
|
||||
EXPECT_EQ(
|
||||
PostCode,
|
||||
runCheckOnCode<IncludeCleanerCheck>(
|
||||
@@ -139,7 +141,7 @@ int BarResult2 = $diag2^bar();)");
|
||||
{
|
||||
std::vector<ClangTidyError> Errors;
|
||||
ClangTidyOptions Opts;
|
||||
Opts.CheckOptions.insert({"DeduplicateFindings", "false"});
|
||||
Opts.CheckOptions["test-check-0.DeduplicateFindings"] = "false";
|
||||
runCheckOnCode<IncludeCleanerCheck>(Code.code(), &Errors, "file.cpp", {},
|
||||
Opts,
|
||||
{{"baz.h", R"(#pragma once
|
||||
@@ -170,7 +172,7 @@ std::vector x;
|
||||
)";
|
||||
|
||||
ClangTidyOptions Opts;
|
||||
Opts.CheckOptions["IgnoreHeaders"] = llvm::StringRef{
|
||||
Opts.CheckOptions["test-check-0.IgnoreHeaders"] = llvm::StringRef{
|
||||
"public.h;<vector>;baz.h;" +
|
||||
llvm::Regex::escape(appendPathFileSystemIndependent({"foo", "qux.h"}))};
|
||||
std::vector<ClangTidyError> Errors;
|
||||
|
||||
Reference in New Issue
Block a user