From 54a569a9dbb22fd7c48990830ee839b878abc55d Mon Sep 17 00:00:00 2001 From: Josh Humphries Date: Mon, 14 Mar 2022 22:37:23 +0000 Subject: [PATCH] internal/imports: use first quote when matching import path This fixes the regexp used to extract the import path from a line of code when inserting newlines to split a sequence of imports into groups. By using a non-greedy match, the regexp now functions correctly in the face of an extra quote after the import path (such as when there is a trailing comment that includes a quote). Fixes golang/go#51671 Change-Id: Id7fd0b1d794f989d8f3d47336c5b5454cddd6237 GitHub-Last-Rev: b934371fa6d9ded902deac2268658b4485d9ce70 GitHub-Pull-Request: golang/tools#365 Reviewed-on: https://go-review.googlesource.com/c/tools/+/386914 Reviewed-by: Heschi Kreinick Trust: Dmitri Shuralyov Run-TryBot: Ian Lance Taylor gopls-CI: kokoro TryBot-Result: Gopher Robot --- internal/imports/fix_test.go | 31 +++++++++++++++++++++++++++++++ internal/imports/imports.go | 2 +- 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/internal/imports/fix_test.go b/internal/imports/fix_test.go index bfd3cfa1776..ef0f8ae6108 100644 --- a/internal/imports/fix_test.go +++ b/internal/imports/fix_test.go @@ -659,6 +659,37 @@ var _, _, _, _, _ = fmt.Errorf, io.Copy, strings.Contains, renamed_packagea.A, B `, }, + // Blank line can be added even when first import of group has comment with quote + { + name: "new_section_where_trailing_comment_has_quote", + in: `package main + +import ( + "context" + bar "local.com/bar" + baz "local.com/baz" + buzz "local.com/buzz" + "github.com/golang/snappy" // this is a "typical" import +) + +var _, _, _, _, _ = context.Background, bar.B, baz.B, buzz.B, snappy.ErrCorrupt +`, + out: `package main + +import ( + "context" + + "github.com/golang/snappy" // this is a "typical" import + + bar "local.com/bar" + baz "local.com/baz" + buzz "local.com/buzz" +) + +var _, _, _, _, _ = context.Background, bar.B, baz.B, buzz.B, snappy.ErrCorrupt +`, + }, + // Non-idempotent comment formatting // golang.org/issue/8035 { diff --git a/internal/imports/imports.go b/internal/imports/imports.go index 2815edc33d7..25973989e62 100644 --- a/internal/imports/imports.go +++ b/internal/imports/imports.go @@ -306,7 +306,7 @@ func matchSpace(orig []byte, src []byte) []byte { return b.Bytes() } -var impLine = regexp.MustCompile(`^\s+(?:[\w\.]+\s+)?"(.+)"`) +var impLine = regexp.MustCompile(`^\s+(?:[\w\.]+\s+)?"(.+?)"`) func addImportSpaces(r io.Reader, breaks []string) ([]byte, error) { var out bytes.Buffer