From 9756559dd3af6b5aee9953e50192f1ddd7f6f3e7 Mon Sep 17 00:00:00 2001 From: Neven Miculinic Date: Wed, 27 Nov 2019 21:25:59 +0100 Subject: [PATCH] Trying to add this feature --- internal/imports/sortimports.go | 9 ++++++ internal/imports/sortimports_test.go | 43 ++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+) create mode 100644 internal/imports/sortimports_test.go diff --git a/internal/imports/sortimports.go b/internal/imports/sortimports.go index 22627947..4b7116b5 100644 --- a/internal/imports/sortimports.go +++ b/internal/imports/sortimports.go @@ -75,6 +75,15 @@ func mergeImports(env *ProcessEnv, fset *token.FileSet, f *ast.File) { } if first == nil { first = gen + + // merge all imports groups into one + // only run if there's more than one import in this group + if len(gen.Specs) > 1 { + for i := range gen.Specs { + spec := gen.Specs[i].(*ast.ImportSpec) + spec.Path.ValuePos = first.Pos() + } + } continue // Don't touch the first one. } // We now know there is more than one package in this import diff --git a/internal/imports/sortimports_test.go b/internal/imports/sortimports_test.go new file mode 100644 index 00000000..bdfe4726 --- /dev/null +++ b/internal/imports/sortimports_test.go @@ -0,0 +1,43 @@ +package imports + +import ( + "bytes" + "go/printer" + "go/token" + "testing" +) + +func TestMergeImports(t *testing.T) { + fileSet := token.NewFileSet() + file, _, err := parse(fileSet, "", []byte(`package main + +import ( + "a" + "b" + + "c" + "d" +) + +import ( + "g" + "h" +) +`), + &Options{}) + if err != nil { + t.Logf("parsing error: %v", err) + t.FailNow() + } + mergeImports(nil, fileSet, file) + + printConfig := &printer.Config{Mode: printer.UseSpaces, Tabwidth: 4} + var buf bytes.Buffer + if err := printConfig.Fprint(&buf, fileSet, file); err != nil { + t.Logf("print config: %v", err) + t.FailNow() + } + t.Logf("%s", buf.String()) + //syscall.Write(1, []byte("after\n")) + // ast.Print(fileSet, file) +} -- 2.24.0