Upstream CL: https://go-review.googlesource.com/c/tools/+/321409

Modified to work against upstream Go.

From cdd84f3789f3ebbd1c55dc220bbbe4a77ab4024a Mon Sep 17 00:00:00 2001
From: Moekr <1143757638wlw@gmail.com>
Date: Thu, 20 May 2021 15:41:17 +0800
Subject: [PATCH] internal/imports: merge mergeable import groups

Merge two import groups if there is no comments between them.
This can make import blocks look more pretty.

---
diff -ur org_golang_x_tools.orig/internal/imports/fix_test.go org_golang_x_tools/internal/imports/fix_test.go
--- org_golang_x_tools.orig/internal/imports/fix_test.go	2023-04-03 15:16:24.808998544 +0200
+++ org_golang_x_tools/internal/imports/fix_test.go	2023-04-03 15:16:56.069290812 +0200
@@ -552,7 +552,6 @@
 
 import (
 	"fmt"
-
 	"gu"
 
 	"manypackages.com/packagea"
@@ -643,15 +642,11 @@
 
 import (
 	"fmt"
-
-	renamed_packagea "manypackages.com/packagea"
-
 	"io"
-
-	. "manypackages.com/packageb"
-
 	"strings"
 
+	renamed_packagea "manypackages.com/packagea"
+	. "manypackages.com/packageb"
 	_ "manypackages.com/packagec"
 )
 
@@ -1183,6 +1178,62 @@
 var _, _ = rand.Read, rand.NewZipf
 `,
 	},
+	{
+		name: "comment_between_imports_simple",
+		in: `package main
+
+import (
+	_ "foo2"
+	// foo3 has side effects.
+	_ "foo3"
+	_ "foo1"
+)
+`,
+		out: `package main
+
+import (
+	_ "foo2"
+	// foo3 has side effects.
+	_ "foo1"
+	_ "foo3"
+)
+`,
+	},
+	{
+		name: "comment_between_imports_complex",
+		in: `package main
+
+import (
+	_ "foo1" // foo1, "std" package
+	_ "github.com/bar/foo1" // github.com/bar/foo1, third-party package
+	_ "local/foo1" // local/foo1, local package
+
+	_ "appengine"
+
+	_ "foo2"
+	// local/foo3 comment
+	_ "local/foo3"
+	_ "github.com/bar/foo2"
+)
+`,
+		out: `package main
+
+import (
+	_ "foo1" // foo1, "std" package
+	_ "foo2"
+	_ "local/foo1" // local/foo1, local package
+
+	_ "github.com/bar/foo1" // github.com/bar/foo1, third-party package
+
+	_ "appengine"
+
+	// local/foo3 comment
+	_ "local/foo3"
+
+	_ "github.com/bar/foo2"
+)
+`,
+	},
 }
 
 func TestSimpleCases(t *testing.T) {
Only in org_golang_x_tools/internal/imports: fix_test.go.orig
diff -ur org_golang_x_tools.orig/internal/imports/sortimports.go org_golang_x_tools/internal/imports/sortimports.go
--- org_golang_x_tools.orig/internal/imports/sortimports.go	2023-04-03 15:16:24.808998544 +0200
+++ org_golang_x_tools/internal/imports/sortimports.go	2023-04-03 15:20:31.361303687 +0200
@@ -38,15 +38,31 @@
 			continue
 		}
 
+		// Find comments.
+		commentLines := make([]int, len(f.Comments))
+		for j, comment := range f.Comments {
+			commentLines[j] = tokFile.Line(comment.Pos())
+		}
+
 		// Identify and sort runs of specs on successive lines.
 		i := 0
 		specs := d.Specs[:0]
 		for j, s := range d.Specs {
-			if j > i && tokFile.Line(s.Pos()) > 1+tokFile.Line(d.Specs[j-1].End()) {
-				// j begins a new run.  End this one.
-				specs = append(specs, sortSpecs(localPrefix, tokFile, f, d.Specs[i:j])...)
-				i = j
+			if j > i {
+				curLine, prevLine := tokFile.Line(s.Pos()), tokFile.Line(d.Specs[j-1].End())
+				if curLine > 1+prevLine {
+					// j begins a new run.
+					for _, commentLine := range commentLines {
+						if prevLine < commentLine && commentLine < curLine {
+							// End this one if there is a comment before the new one.
+							specs = append(specs, sortSpecs(localPrefix, tokFile, f, d.Specs[i:j])...)
+							i = j
+							break
+						}
+					}
+				}
 			}
+
 		}
 		specs = append(specs, sortSpecs(localPrefix, tokFile, f, d.Specs[i:])...)
 		d.Specs = specs
