Author: Baranov Victor
Date: 2026-10-11T22:24:14+03:00
New Revision: 42c2f71288a6a09d9e9b50f5dc014d43bd428856

URL: 
https://github.com/llvm/llvm-project/commit/42c2f71288a6a09d9e9b50f5dc014d43bd428856
DIFF: 
https://github.com/llvm/llvm-project/commit/42c2f71288a6a09d9e9b50f5dc014d43bd428856.diff

LOG: [clang-tidy] Don't insert blank line in IncludeInserter (#221428)

Fixes https://github.com/llvm/llvm-project/issues/52859.

Added: 
    

Modified: 
    clang-tools-extra/clang-tidy/utils/IncludeSorter.cpp
    clang-tools-extra/docs/ReleaseNotes.md
    clang-tools-extra/unittests/clang-tidy/IncludeInserterTest.cpp
    clang-tools-extra/unittests/clang-tidy/TransformerClangTidyCheckTest.cpp

Removed: 
    


################################################################################
diff  --git a/clang-tools-extra/clang-tidy/utils/IncludeSorter.cpp 
b/clang-tools-extra/clang-tidy/utils/IncludeSorter.cpp
index b7c313693781d..826c3d2676e88 100644
--- a/clang-tools-extra/clang-tidy/utils/IncludeSorter.cpp
+++ b/clang-tools-extra/clang-tidy/utils/IncludeSorter.cpp
@@ -199,19 +199,18 @@ IncludeSorter::createIncludeInsertion(StringRef FileName, 
bool IsAngled) {
     return std::nullopt;
 
   if (NonEmptyKind < IncludeKind) {
-    // Create a block after.
+    // Insert directly after the nearest preceding group.
+    // This keeps clang-format able to fix up the ordering within group.
     const std::string &LastInclude = IncludeBucket[NonEmptyKind].back();
     const SourceRange LastIncludeLocation =
         IncludeLocations[LastInclude].back();
-    IncludeStmt.insert(0, LineEnding);
     return FixItHint::CreateInsertion(LastIncludeLocation.getEnd(),
                                       IncludeStmt);
   }
-  // Create a block before.
+  // Insert directly before the nearest group for the same reason as above.
   const std::string &FirstInclude = IncludeBucket[NonEmptyKind][0];
   const SourceRange FirstIncludeLocation =
       IncludeLocations[FirstInclude].back();
-  IncludeStmt.append(LineEnding);
   return FixItHint::CreateInsertion(FirstIncludeLocation.getBegin(),
                                     IncludeStmt);
 }

diff  --git a/clang-tools-extra/docs/ReleaseNotes.md 
b/clang-tools-extra/docs/ReleaseNotes.md
index 25bc3ba0ed73f..a6d8c764728b4 100644
--- a/clang-tools-extra/docs/ReleaseNotes.md
+++ b/clang-tools-extra/docs/ReleaseNotes.md
@@ -416,6 +416,10 @@ infrastructure are described first, followed by 
tool-specific sections.
 
 #### Miscellaneous
 
+- Fixed {program}`clang-tidy` adding an unwanted blank line when automatically
+  inserting a missing `#include`, which stopped {program}`clang-format` and
+  the `llvm-include-order` check from being able to sort it correctly 
afterwards.
+
 ### Improvements to include-fixer
 
 ### Improvements to clang-include-fixer

diff  --git a/clang-tools-extra/unittests/clang-tidy/IncludeInserterTest.cpp 
b/clang-tools-extra/unittests/clang-tidy/IncludeInserterTest.cpp
index d01ba9814b8a1..b01bcc8e69d63 100644
--- a/clang-tools-extra/unittests/clang-tidy/IncludeInserterTest.cpp
+++ b/clang-tools-extra/unittests/clang-tidy/IncludeInserterTest.cpp
@@ -392,7 +392,6 @@ void foo() {
 
 #include <list>
 #include <map>
-
 #include "path/to/header.h"
 
 void foo() {
@@ -413,7 +412,6 @@ void foo() {
 })";
   const char *PostCode = R"(
 #include "clang_tidy/tests/insert_includes_test_header.h"
-
 #include "path/to/header.h"
 
 void foo() {
@@ -524,7 +522,6 @@ void foo() {
 })";
   const char *PostCode = R"(
 #include "clang_tidy/tests/insert_includes_test_header.h"
-
 #include <set>
 
 #include "path/to/a/header.h"
@@ -553,7 +550,6 @@ void foo() {
 #include "clang_tidy/tests/insert_includes_test_header.h"
 
 #include <stdlib.h>
-
 #include <set>
 
 #include "path/to/a/header.h"
@@ -576,7 +572,6 @@ void foo() {
 })";
   const char *PostCode = R"(
 #include <set>
-
 #include "path/to/a/header.h"
 
 void foo() {
@@ -600,7 +595,6 @@ void foo() {
 })";
   const char *PostCode = R"(
 #include <stdlib.h>
-
 #include <set>
 
 #include "path/to/a/header.h"
@@ -718,7 +712,6 @@ void foo() {
 })";
   const char *PostCode = R"(
 #include "clang_tidy/tests/insert_includes_test_header.h"
-
 #include <c.h>
 
 #include <d>
@@ -747,7 +740,6 @@ void foo() {
 })";
   const char *PostCode = R"(
 #import "clang_tidy/tests/insert_includes_test_header.h"
-
 #import "a/header.h"
 
 void foo() {
@@ -798,7 +790,6 @@ void foo() {
 #include <map>
 
 #include "path/to/a/header.h"
-
 #import "clang_tidy/tests/generated_file.proto.h"
 
 void foo() {

diff  --git 
a/clang-tools-extra/unittests/clang-tidy/TransformerClangTidyCheckTest.cpp 
b/clang-tools-extra/unittests/clang-tidy/TransformerClangTidyCheckTest.cpp
index fc43f2579e8e2..612229a4f1eb1 100644
--- a/clang-tools-extra/unittests/clang-tidy/TransformerClangTidyCheckTest.cpp
+++ b/clang-tools-extra/unittests/clang-tidy/TransformerClangTidyCheckTest.cpp
@@ -335,7 +335,6 @@ TEST(TransformerClangTidyCheckTest, 
AddIncludeObeysSortStyleLocalOption) {
 int h(int x) { return 3; })cc";
 
   std::string TreatsAsLibraryHeader = R"cc(#include "input.h"
-
 #include "bar.h"
 int h(int x) { return 5; })cc";
 
@@ -367,7 +366,6 @@ TEST(TransformerClangTidyCheckTest, 
AddIncludeObeysSortStyleGlobalOption) {
 int h(int x) { return 3; })cc";
 
   std::string TreatsAsLibraryHeader = R"cc(#include "input.h"
-
 #include "bar.h"
 int h(int x) { return 5; })cc";
 


        
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to