mirror of
https://github.com/golang/go
synced 2024-11-21 21:44:40 -07:00
go/ast: don't MergeLine in SortImports when last import on the same line as RParen
This commit is contained in:
parent
630d4fb600
commit
b04affa7e6
@ -33,11 +33,11 @@ func SortImports(fset *token.FileSet, f *File) {
|
|||||||
for j, s := range d.Specs {
|
for j, s := range d.Specs {
|
||||||
if j > i && lineAt(fset, s.Pos()) > 1+lineAt(fset, d.Specs[j-1].End()) {
|
if j > i && lineAt(fset, s.Pos()) > 1+lineAt(fset, d.Specs[j-1].End()) {
|
||||||
// j begins a new run. End this one.
|
// j begins a new run. End this one.
|
||||||
specs = append(specs, sortSpecs(fset, f, d.Specs[i:j])...)
|
specs = append(specs, sortSpecs(fset, f, d, d.Specs[i:j])...)
|
||||||
i = j
|
i = j
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
specs = append(specs, sortSpecs(fset, f, d.Specs[i:])...)
|
specs = append(specs, sortSpecs(fset, f, d, d.Specs[i:])...)
|
||||||
d.Specs = specs
|
d.Specs = specs
|
||||||
|
|
||||||
// Deduping can leave a blank line before the rparen; clean that up.
|
// Deduping can leave a blank line before the rparen; clean that up.
|
||||||
@ -109,7 +109,7 @@ type cgPos struct {
|
|||||||
cg *CommentGroup
|
cg *CommentGroup
|
||||||
}
|
}
|
||||||
|
|
||||||
func sortSpecs(fset *token.FileSet, f *File, specs []Spec) []Spec {
|
func sortSpecs(fset *token.FileSet, f *File, d *GenDecl, specs []Spec) []Spec {
|
||||||
// Can't short-circuit here even if specs are already sorted,
|
// Can't short-circuit here even if specs are already sorted,
|
||||||
// since they might yet need deduplication.
|
// since they might yet need deduplication.
|
||||||
// A lone import, however, may be safely ignored.
|
// A lone import, however, may be safely ignored.
|
||||||
@ -207,7 +207,9 @@ func sortSpecs(fset *token.FileSet, f *File, specs []Spec) []Spec {
|
|||||||
deduped = append(deduped, s)
|
deduped = append(deduped, s)
|
||||||
} else {
|
} else {
|
||||||
p := s.Pos()
|
p := s.Pos()
|
||||||
fset.File(p).MergeLine(lineAt(fset, p))
|
if l := lineAt(fset, p); l != lineAt(fset, d.Rparen) {
|
||||||
|
fset.File(p).MergeLine(l)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
specs = deduped
|
specs = deduped
|
||||||
|
@ -76,3 +76,41 @@ import (
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestIssue69183(t *testing.T) {
|
||||||
|
const src = `package A
|
||||||
|
import (
|
||||||
|
"a"//a
|
||||||
|
"a")
|
||||||
|
`
|
||||||
|
fs := token.NewFileSet()
|
||||||
|
f, err := parser.ParseFile(fs, "test.go", src, parser.ParseComments|parser.SkipObjectResolution)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
ast.SortImports(fs, f) // should not panic
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestSortImportsSameLastLine(t *testing.T) {
|
||||||
|
const src = `package A
|
||||||
|
import (
|
||||||
|
"a"//a
|
||||||
|
"a")
|
||||||
|
func a() {}
|
||||||
|
`
|
||||||
|
|
||||||
|
fs := token.NewFileSet()
|
||||||
|
f, err := parser.ParseFile(fs, "test.go", src, parser.ParseComments|parser.SkipObjectResolution)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
ast.SortImports(fs, f)
|
||||||
|
fd := f.Decls[1].(*ast.FuncDecl)
|
||||||
|
fdPos := fs.Position(fd.Pos())
|
||||||
|
if fdPos.Column != 1 {
|
||||||
|
t.Errorf("invalid fdPos.Column = %v; want = 1", fdPos.Column)
|
||||||
|
}
|
||||||
|
if fdPos.Line != 5 {
|
||||||
|
t.Errorf("invalid fdPos.Line = %v; want = 5", fdPos.Line)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user