[clang-tools-extra] fdfe324 - [clang-tidy] IncludeInserter: allow <> in header name
Alexander Kornienko via cfe-commits
cfe-commits at lists.llvm.org
Mon Sep 28 06:14:10 PDT 2020
Author: Alexander Kornienko
Date: 2020-09-28T15:14:04+02:00
New Revision: fdfe324da195ebd9b9c691f006b0d6ccc64365e1
URL: https://github.com/llvm/llvm-project/commit/fdfe324da195ebd9b9c691f006b0d6ccc64365e1
DIFF: https://github.com/llvm/llvm-project/commit/fdfe324da195ebd9b9c691f006b0d6ccc64365e1.diff
LOG: [clang-tidy] IncludeInserter: allow <> in header name
This adds a pair of overloads for create(MainFile)?IncludeInsertion methods that
use the presence of the <> in the file name to control whether the #include
directive will use angle brackets or quotes. Motivating examples:
https://reviews.llvm.org/D82089#inline-789412 and
https://github.com/llvm/llvm-project/blob/master/clang-tools-extra/clang-tidy/modernize/MakeSmartPtrCheck.cpp#L433
The overloads with the IsAngled parameter can be removed after the users are
updated.
Update usages of createIncludeInsertion.
Update (almost all) usages of createMainFileIncludeInsertion.
Reviewed By: hokein
Differential Revision: https://reviews.llvm.org/D85666
Added:
Modified:
clang-tools-extra/clang-tidy/abseil/StringFindStartswithCheck.cpp
clang-tools-extra/clang-tidy/cppcoreguidelines/InitVariablesCheck.cpp
clang-tools-extra/clang-tidy/cppcoreguidelines/ProBoundsConstantArrayIndexCheck.cpp
clang-tools-extra/clang-tidy/modernize/MakeSmartPtrCheck.cpp
clang-tools-extra/clang-tidy/modernize/PassByValueCheck.cpp
clang-tools-extra/clang-tidy/modernize/ReplaceAutoPtrCheck.cpp
clang-tools-extra/clang-tidy/modernize/ReplaceRandomShuffleCheck.cpp
clang-tools-extra/clang-tidy/performance/TypePromotionInMathFnCheck.cpp
clang-tools-extra/clang-tidy/performance/UnnecessaryValueParamCheck.cpp
clang-tools-extra/clang-tidy/utils/IncludeInserter.cpp
clang-tools-extra/clang-tidy/utils/IncludeInserter.h
clang-tools-extra/docs/ReleaseNotes.rst
clang-tools-extra/docs/clang-tidy/checks/cppcoreguidelines-init-variables.rst
clang-tools-extra/docs/clang-tidy/checks/modernize-make-unique.rst
clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines-init-variables.cpp
clang-tools-extra/unittests/clang-tidy/IncludeInserterTest.cpp
Removed:
################################################################################
diff --git a/clang-tools-extra/clang-tidy/abseil/StringFindStartswithCheck.cpp b/clang-tools-extra/clang-tidy/abseil/StringFindStartswithCheck.cpp
index e775fc21d2d0..850631300f7a 100644
--- a/clang-tools-extra/clang-tidy/abseil/StringFindStartswithCheck.cpp
+++ b/clang-tools-extra/clang-tidy/abseil/StringFindStartswithCheck.cpp
@@ -106,8 +106,8 @@ void StringFindStartswithCheck::check(const MatchFinder::MatchResult &Result) {
// Create a preprocessor #include FixIt hint (CreateIncludeInsertion checks
// whether this already exists).
Diagnostic << IncludeInserter.createIncludeInsertion(
- Source.getFileID(ComparisonExpr->getBeginLoc()), AbseilStringsMatchHeader,
- false);
+ Source.getFileID(ComparisonExpr->getBeginLoc()),
+ AbseilStringsMatchHeader);
}
void StringFindStartswithCheck::registerPPCallbacks(
diff --git a/clang-tools-extra/clang-tidy/cppcoreguidelines/InitVariablesCheck.cpp b/clang-tools-extra/clang-tidy/cppcoreguidelines/InitVariablesCheck.cpp
index 3f51ef595b46..d9be9b653e3b 100644
--- a/clang-tools-extra/clang-tidy/cppcoreguidelines/InitVariablesCheck.cpp
+++ b/clang-tools-extra/clang-tidy/cppcoreguidelines/InitVariablesCheck.cpp
@@ -28,7 +28,7 @@ InitVariablesCheck::InitVariablesCheck(StringRef Name,
: ClangTidyCheck(Name, Context),
IncludeInserter(Options.getLocalOrGlobal("IncludeStyle",
utils::IncludeSorter::IS_LLVM)),
- MathHeader(Options.get("MathHeader", "math.h")) {}
+ MathHeader(Options.get("MathHeader", "<math.h>")) {}
void InitVariablesCheck::storeOptions(ClangTidyOptions::OptionMap &Opts) {
Options.store(Opts, "IncludeStyle", IncludeInserter.getStyle());
@@ -103,7 +103,7 @@ void InitVariablesCheck::check(const MatchFinder::MatchResult &Result) {
InitializationString);
if (AddMathInclude) {
Diagnostic << IncludeInserter.createIncludeInsertion(
- Source.getFileID(MatchedDecl->getBeginLoc()), MathHeader, false);
+ Source.getFileID(MatchedDecl->getBeginLoc()), MathHeader);
}
}
}
diff --git a/clang-tools-extra/clang-tidy/cppcoreguidelines/ProBoundsConstantArrayIndexCheck.cpp b/clang-tools-extra/clang-tidy/cppcoreguidelines/ProBoundsConstantArrayIndexCheck.cpp
index f45801f1ea72..1826e955f6a9 100644
--- a/clang-tools-extra/clang-tidy/cppcoreguidelines/ProBoundsConstantArrayIndexCheck.cpp
+++ b/clang-tools-extra/clang-tidy/cppcoreguidelines/ProBoundsConstantArrayIndexCheck.cpp
@@ -85,8 +85,7 @@ void ProBoundsConstantArrayIndexCheck::check(
IndexRange.getBegin().getLocWithOffset(-1)),
", ")
<< FixItHint::CreateReplacement(Matched->getEndLoc(), ")")
- << Inserter.createMainFileIncludeInsertion(GslHeader,
- /*IsAngled=*/false);
+ << Inserter.createMainFileIncludeInsertion(GslHeader);
}
return;
}
diff --git a/clang-tools-extra/clang-tidy/modernize/MakeSmartPtrCheck.cpp b/clang-tools-extra/clang-tidy/modernize/MakeSmartPtrCheck.cpp
index 5818b8cd06b5..c00067fa8257 100644
--- a/clang-tools-extra/clang-tidy/modernize/MakeSmartPtrCheck.cpp
+++ b/clang-tools-extra/clang-tidy/modernize/MakeSmartPtrCheck.cpp
@@ -19,7 +19,6 @@ namespace modernize {
namespace {
-constexpr char StdMemoryHeader[] = "memory";
constexpr char ConstructorCall[] = "constructorCall";
constexpr char ResetCall[] = "resetCall";
constexpr char NewExpression[] = "newExpression";
@@ -47,7 +46,7 @@ MakeSmartPtrCheck::MakeSmartPtrCheck(StringRef Name, ClangTidyContext *Context,
Inserter(Options.getLocalOrGlobal("IncludeStyle",
utils::IncludeSorter::IS_LLVM)),
MakeSmartPtrFunctionHeader(
- Options.get("MakeSmartPtrFunctionHeader", StdMemoryHeader)),
+ Options.get("MakeSmartPtrFunctionHeader", "<memory>")),
MakeSmartPtrFunctionName(
Options.get("MakeSmartPtrFunction", MakeSmartPtrFunctionName)),
IgnoreMacros(Options.getLocalOrGlobal("IgnoreMacros", true)) {}
@@ -430,9 +429,7 @@ void MakeSmartPtrCheck::insertHeader(DiagnosticBuilder &Diag, FileID FD) {
if (MakeSmartPtrFunctionHeader.empty()) {
return;
}
- Diag << Inserter.createIncludeInsertion(
- FD, MakeSmartPtrFunctionHeader,
- /*IsAngled=*/MakeSmartPtrFunctionHeader == StdMemoryHeader);
+ Diag << Inserter.createIncludeInsertion(FD, MakeSmartPtrFunctionHeader);
}
} // namespace modernize
diff --git a/clang-tools-extra/clang-tidy/modernize/PassByValueCheck.cpp b/clang-tools-extra/clang-tidy/modernize/PassByValueCheck.cpp
index b955ea7f7572..557bcce63fa1 100644
--- a/clang-tools-extra/clang-tidy/modernize/PassByValueCheck.cpp
+++ b/clang-tools-extra/clang-tidy/modernize/PassByValueCheck.cpp
@@ -216,8 +216,7 @@ void PassByValueCheck::check(const MatchFinder::MatchResult &Result) {
Initializer->getLParenLoc().getLocWithOffset(1), "std::move(")
<< Inserter.createIncludeInsertion(
Result.SourceManager->getFileID(Initializer->getSourceLocation()),
- "utility",
- /*IsAngled=*/true);
+ "<utility>");
}
} // namespace modernize
diff --git a/clang-tools-extra/clang-tidy/modernize/ReplaceAutoPtrCheck.cpp b/clang-tools-extra/clang-tidy/modernize/ReplaceAutoPtrCheck.cpp
index 25ffbe2b8738..02c9e74c7bb0 100644
--- a/clang-tools-extra/clang-tidy/modernize/ReplaceAutoPtrCheck.cpp
+++ b/clang-tools-extra/clang-tidy/modernize/ReplaceAutoPtrCheck.cpp
@@ -147,8 +147,7 @@ void ReplaceAutoPtrCheck::check(const MatchFinder::MatchResult &Result) {
auto Diag = diag(Range.getBegin(), "use std::move to transfer ownership")
<< FixItHint::CreateInsertion(Range.getBegin(), "std::move(")
<< FixItHint::CreateInsertion(Range.getEnd(), ")")
- << Inserter.createMainFileIncludeInsertion("utility",
- /*IsAngled=*/true);
+ << Inserter.createMainFileIncludeInsertion("<utility>");
return;
}
diff --git a/clang-tools-extra/clang-tidy/modernize/ReplaceRandomShuffleCheck.cpp b/clang-tools-extra/clang-tidy/modernize/ReplaceRandomShuffleCheck.cpp
index 0191f5d5c5de..409d1e931730 100644
--- a/clang-tools-extra/clang-tidy/modernize/ReplaceRandomShuffleCheck.cpp
+++ b/clang-tools-extra/clang-tidy/modernize/ReplaceRandomShuffleCheck.cpp
@@ -94,7 +94,7 @@ void ReplaceRandomShuffleCheck::check(const MatchFinder::MatchResult &Result) {
Diag << IncludeInserter.createIncludeInsertion(
Result.Context->getSourceManager().getFileID(
MatchedCallExpr->getBeginLoc()),
- "random", /*IsAngled=*/true);
+ "<random>");
}
} // namespace modernize
diff --git a/clang-tools-extra/clang-tidy/performance/TypePromotionInMathFnCheck.cpp b/clang-tools-extra/clang-tidy/performance/TypePromotionInMathFnCheck.cpp
index 2105aa9947bb..a35220ad9d0f 100644
--- a/clang-tools-extra/clang-tidy/performance/TypePromotionInMathFnCheck.cpp
+++ b/clang-tools-extra/clang-tidy/performance/TypePromotionInMathFnCheck.cpp
@@ -192,7 +192,7 @@ void TypePromotionInMathFnCheck::check(const MatchFinder::MatchResult &Result) {
if (FnInCmath)
Diag << IncludeInserter.createIncludeInsertion(
Result.Context->getSourceManager().getFileID(Call->getBeginLoc()),
- "cmath", /*IsAngled=*/true);
+ "<cmath>");
}
} // namespace performance
diff --git a/clang-tools-extra/clang-tidy/performance/UnnecessaryValueParamCheck.cpp b/clang-tools-extra/clang-tidy/performance/UnnecessaryValueParamCheck.cpp
index 9aef5a868169..12fb2f588539 100644
--- a/clang-tools-extra/clang-tidy/performance/UnnecessaryValueParamCheck.cpp
+++ b/clang-tools-extra/clang-tidy/performance/UnnecessaryValueParamCheck.cpp
@@ -203,8 +203,7 @@ void UnnecessaryValueParamCheck::handleMoveFix(const ParmVarDecl &Var,
Diag << FixItHint::CreateInsertion(CopyArgument.getBeginLoc(), "std::move(")
<< FixItHint::CreateInsertion(EndLoc, ")")
<< Inserter.createIncludeInsertion(
- SM.getFileID(CopyArgument.getBeginLoc()), "utility",
- /*IsAngled=*/true);
+ SM.getFileID(CopyArgument.getBeginLoc()), "<utility>");
}
} // namespace performance
diff --git a/clang-tools-extra/clang-tidy/utils/IncludeInserter.cpp b/clang-tools-extra/clang-tidy/utils/IncludeInserter.cpp
index 268692c3ba42..fdb93a8f1a81 100644
--- a/clang-tools-extra/clang-tidy/utils/IncludeInserter.cpp
+++ b/clang-tools-extra/clang-tidy/utils/IncludeInserter.cpp
@@ -77,6 +77,14 @@ IncludeInserter::createIncludeInsertion(FileID FileID, StringRef Header,
return getOrCreate(FileID).CreateIncludeInsertion(Header, IsAngled);
}
+llvm::Optional<FixItHint>
+IncludeInserter::createIncludeInsertion(FileID FileID, llvm::StringRef Header) {
+ bool IsAngled = Header.consume_front("<");
+ if (IsAngled != Header.consume_back(">"))
+ return llvm::None;
+ return createIncludeInsertion(FileID, Header, IsAngled);
+}
+
llvm::Optional<FixItHint>
IncludeInserter::createMainFileIncludeInsertion(StringRef Header,
bool IsAngled) {
@@ -85,6 +93,13 @@ IncludeInserter::createMainFileIncludeInsertion(StringRef Header,
return createIncludeInsertion(SourceMgr->getMainFileID(), Header, IsAngled);
}
+llvm::Optional<FixItHint>
+IncludeInserter::createMainFileIncludeInsertion(StringRef Header) {
+ assert(SourceMgr && "SourceMgr shouldn't be null; did you remember to call "
+ "registerPreprocessor()?");
+ return createIncludeInsertion(SourceMgr->getMainFileID(), Header);
+}
+
void IncludeInserter::addInclude(StringRef FileName, bool IsAngled,
SourceLocation HashLocation,
SourceLocation EndLocation) {
diff --git a/clang-tools-extra/clang-tidy/utils/IncludeInserter.h b/clang-tools-extra/clang-tidy/utils/IncludeInserter.h
index 70c36ce8895c..ba45a1c3fa76 100644
--- a/clang-tools-extra/clang-tidy/utils/IncludeInserter.h
+++ b/clang-tools-extra/clang-tidy/utils/IncludeInserter.h
@@ -69,15 +69,35 @@ class IncludeInserter {
/// Creates a \p Header inclusion directive fixit in the File \p FileID.
/// Returns ``llvm::None`` on error or if the inclusion directive already
/// exists.
+ /// FIXME: This should be removed once the clients are migrated to the
+ /// overload without the ``IsAngled`` parameter.
llvm::Optional<FixItHint>
createIncludeInsertion(FileID FileID, llvm::StringRef Header, bool IsAngled);
+ /// Creates a \p Header inclusion directive fixit in the File \p FileID.
+ /// When \p Header is enclosed in angle brackets, uses angle brackets in the
+ /// inclusion directive, otherwise uses quotes.
+ /// Returns ``llvm::None`` on error or if the inclusion directive already
+ /// exists.
+ llvm::Optional<FixItHint> createIncludeInsertion(FileID FileID,
+ llvm::StringRef Header);
+
/// Creates a \p Header inclusion directive fixit in the main file.
/// Returns``llvm::None`` on error or if the inclusion directive already
/// exists.
+ /// FIXME: This should be removed once the clients are migrated to the
+ /// overload without the ``IsAngled`` parameter.
llvm::Optional<FixItHint>
createMainFileIncludeInsertion(llvm::StringRef Header, bool IsAngled);
+ /// Creates a \p Header inclusion directive fixit in the main file.
+ /// When \p Header is enclosed in angle brackets, uses angle brackets in the
+ /// inclusion directive, otherwise uses quotes.
+ /// Returns``llvm::None`` on error or if the inclusion directive already
+ /// exists.
+ llvm::Optional<FixItHint>
+ createMainFileIncludeInsertion(llvm::StringRef Header);
+
IncludeSorter::IncludeStyle getStyle() const { return Style; }
private:
diff --git a/clang-tools-extra/docs/ReleaseNotes.rst b/clang-tools-extra/docs/ReleaseNotes.rst
index befe338b91c6..da4b57f39a78 100644
--- a/clang-tools-extra/docs/ReleaseNotes.rst
+++ b/clang-tools-extra/docs/ReleaseNotes.rst
@@ -67,6 +67,12 @@ The improvements are...
Improvements to clang-tidy
--------------------------
+- Checks that allow configuring names of headers to include now support wrapping
+ the include in angle brackets to create a system include. For example,
+ :doc:`cppcoreguidelines-init-variables
+ <clang-tidy/checks/cppcoreguidelines-init-variables>` and
+ :doc:`modernize-make-unique <clang-tidy/checks/modernize-make-unique>`.
+
New modules
^^^^^^^^^^^
diff --git a/clang-tools-extra/docs/clang-tidy/checks/cppcoreguidelines-init-variables.rst b/clang-tools-extra/docs/clang-tidy/checks/cppcoreguidelines-init-variables.rst
index e1b0fe323000..62af932837c1 100644
--- a/clang-tools-extra/docs/clang-tidy/checks/cppcoreguidelines-init-variables.rst
+++ b/clang-tools-extra/docs/clang-tidy/checks/cppcoreguidelines-init-variables.rst
@@ -3,13 +3,13 @@
cppcoreguidelines-init-variables
================================
-Checks whether there are local variables that are declared without an
-initial value. These may lead to unexpected behaviour if there is a
-code path that reads the variable before assigning to it.
+Checks whether there are local variables that are declared without an initial
+value. These may lead to unexpected behaviour if there is a code path that reads
+the variable before assigning to it.
-Only integers, booleans, floats, doubles and pointers are checked. The
-fix option initializes all detected values with the value of zero. An
-exception is float and double types, which are initialized to NaN.
+Only integers, booleans, floats, doubles and pointers are checked. The fix
+option initializes all detected values with the value of zero. An exception is
+float and double types, which are initialized to NaN.
As an example a function that looks like this:
@@ -42,10 +42,10 @@ Options
.. option:: IncludeStyle
- A string specifying which include-style is used, `llvm` or
- `google`. Default is `llvm`.
+ A string specifying which include-style is used, `llvm` or `google`. Default
+ is `llvm`.
.. option:: MathHeader
- A string specifying the header to include to get the definition of
- `NAN`. Default is `math.h`.
+ A string specifying the header to include to get the definition of `NAN`.
+ Default is `<math.h>`.
diff --git a/clang-tools-extra/docs/clang-tidy/checks/modernize-make-unique.rst b/clang-tools-extra/docs/clang-tidy/checks/modernize-make-unique.rst
index 1961f05ed9cd..6c0a0b981f2c 100644
--- a/clang-tools-extra/docs/clang-tidy/checks/modernize-make-unique.rst
+++ b/clang-tools-extra/docs/clang-tidy/checks/modernize-make-unique.rst
@@ -37,7 +37,7 @@ Options
.. option:: MakeSmartPtrFunctionHeader
A string specifying the corresponding header of make-unique-ptr function.
- Default is `memory`.
+ Default is `<memory>`.
.. option:: IncludeStyle
diff --git a/clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines-init-variables.cpp b/clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines-init-variables.cpp
index 9a06850b3f66..a2a59fe75aa2 100644
--- a/clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines-init-variables.cpp
+++ b/clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines-init-variables.cpp
@@ -1,4 +1,5 @@
// RUN: %check_clang_tidy %s cppcoreguidelines-init-variables %t -- -- -fno-delayed-template-parsing -fexceptions
+// CHECK-FIXES: {{^}}#include <math.h>
// Ensure that function declarations are not changed.
void some_func(int x, double d, bool b, const char *p);
diff --git a/clang-tools-extra/unittests/clang-tidy/IncludeInserterTest.cpp b/clang-tools-extra/unittests/clang-tidy/IncludeInserterTest.cpp
index e70d3fb91bf2..dc213ea637ba 100644
--- a/clang-tools-extra/unittests/clang-tidy/IncludeInserterTest.cpp
+++ b/clang-tools-extra/unittests/clang-tidy/IncludeInserterTest.cpp
@@ -43,14 +43,12 @@ class IncludeInserterCheckBase : public ClangTidyCheck {
void check(const ast_matchers::MatchFinder::MatchResult &Result) override {
auto Diag = diag(Result.Nodes.getNodeAs<DeclStmt>("stmt")->getBeginLoc(),
"foo, bar");
- for (StringRef Header : HeadersToInclude()) {
- Diag << Inserter.createMainFileIncludeInsertion(Header,
- IsAngledInclude());
+ for (StringRef Header : headersToInclude()) {
+ Diag << Inserter.createMainFileIncludeInsertion(Header);
}
}
- virtual std::vector<StringRef> HeadersToInclude() const = 0;
- virtual bool IsAngledInclude() const = 0;
+ virtual std::vector<StringRef> headersToInclude() const = 0;
utils::IncludeInserter Inserter{utils::IncludeSorter::IS_Google};
};
@@ -60,10 +58,9 @@ class NonSystemHeaderInserterCheck : public IncludeInserterCheckBase {
NonSystemHeaderInserterCheck(StringRef CheckName, ClangTidyContext *Context)
: IncludeInserterCheckBase(CheckName, Context) {}
- std::vector<StringRef> HeadersToInclude() const override {
+ std::vector<StringRef> headersToInclude() const override {
return {"path/to/header.h"};
}
- bool IsAngledInclude() const override { return false; }
};
class EarlyInAlphabetHeaderInserterCheck : public IncludeInserterCheckBase {
@@ -71,10 +68,9 @@ class EarlyInAlphabetHeaderInserterCheck : public IncludeInserterCheckBase {
EarlyInAlphabetHeaderInserterCheck(StringRef CheckName, ClangTidyContext *Context)
: IncludeInserterCheckBase(CheckName, Context) {}
- std::vector<StringRef> HeadersToInclude() const override {
+ std::vector<StringRef> headersToInclude() const override {
return {"a/header.h"};
}
- bool IsAngledInclude() const override { return false; }
};
class MultipleHeaderInserterCheck : public IncludeInserterCheckBase {
@@ -82,10 +78,9 @@ class MultipleHeaderInserterCheck : public IncludeInserterCheckBase {
MultipleHeaderInserterCheck(StringRef CheckName, ClangTidyContext *Context)
: IncludeInserterCheckBase(CheckName, Context) {}
- std::vector<StringRef> HeadersToInclude() const override {
+ std::vector<StringRef> headersToInclude() const override {
return {"path/to/header.h", "path/to/header2.h", "path/to/header.h"};
}
- bool IsAngledInclude() const override { return false; }
};
class CSystemIncludeInserterCheck : public IncludeInserterCheckBase {
@@ -93,10 +88,9 @@ class CSystemIncludeInserterCheck : public IncludeInserterCheckBase {
CSystemIncludeInserterCheck(StringRef CheckName, ClangTidyContext *Context)
: IncludeInserterCheckBase(CheckName, Context) {}
- std::vector<StringRef> HeadersToInclude() const override {
- return {"stdlib.h"};
+ std::vector<StringRef> headersToInclude() const override {
+ return {"<stdlib.h>"};
}
- bool IsAngledInclude() const override { return true; }
};
class CXXSystemIncludeInserterCheck : public IncludeInserterCheckBase {
@@ -104,8 +98,17 @@ class CXXSystemIncludeInserterCheck : public IncludeInserterCheckBase {
CXXSystemIncludeInserterCheck(StringRef CheckName, ClangTidyContext *Context)
: IncludeInserterCheckBase(CheckName, Context) {}
- std::vector<StringRef> HeadersToInclude() const override { return {"set"}; }
- bool IsAngledInclude() const override { return true; }
+ std::vector<StringRef> headersToInclude() const override { return {"<set>"}; }
+};
+
+class InvalidIncludeInserterCheck : public IncludeInserterCheckBase {
+public:
+ InvalidIncludeInserterCheck(StringRef CheckName, ClangTidyContext *Context)
+ : IncludeInserterCheckBase(CheckName, Context) {}
+
+ std::vector<StringRef> headersToInclude() const override {
+ return {"a.h", "<stdlib.h", "cstdlib>", "b.h", "<c.h>", "<d>"};
+ }
};
template <typename Check>
@@ -598,6 +601,40 @@ void foo() {
"insert_includes_test_header.cc"));
}
+TEST(IncludeInserterTest, InvalidHeaderName) {
+ const char *PreCode = R"(
+#include "clang_tidy/tests/insert_includes_test_header.h"
+
+#include <list>
+#include <map>
+
+#include "path/to/a/header.h"
+
+void foo() {
+ int a = 0;
+})";
+ const char *PostCode = R"(
+#include "clang_tidy/tests/insert_includes_test_header.h"
+
+#include <c.h>
+
+#include <d>
+#include <list>
+#include <map>
+
+#include "a.h"
+#include "b.h"
+#include "path/to/a/header.h"
+
+void foo() {
+ int a = 0;
+})";
+
+ EXPECT_EQ(PostCode, runCheckOnCode<InvalidIncludeInserterCheck>(
+ PreCode, "clang_tidy/tests/"
+ "insert_includes_test_header.cc"));
+}
+
} // anonymous namespace
} // namespace tidy
} // namespace clang
More information about the cfe-commits
mailing list