1
0
mirror of https://github.com/golang/go synced 2024-10-03 17:21:21 -06:00

go/ast: respect ImportSpec.EndPos

Fixes #2566.

R=golang-dev, rsc
CC=golang-dev
https://golang.org/cl/5541068
This commit is contained in:
Scott Lawrence 2012-01-20 13:34:19 -05:00 committed by Russ Cox
parent 88010973aa
commit b0360e469c
2 changed files with 37 additions and 7 deletions

View File

@ -351,7 +351,7 @@ var addr = flag.String("addr", ":1718", "http service address") // Q=17, R=18
`,
},
{
Name: "import.3",
Name: "import.17",
Fn: addImportFn("x/y/z", "x/a/c"),
In: `package main
@ -382,6 +382,26 @@ import (
"d/f"
)
`,
},
{
Name: "import.18",
Fn: addDelImportFn("e", "o"),
In: `package main
import (
"f"
"o"
"z"
)
`,
Out: `package main
import (
"e"
"f"
"z"
)
`,
},
}
@ -409,6 +429,21 @@ func deleteImportFn(path string) func(*ast.File) bool {
}
}
func addDelImportFn(p1 string, p2 string) func(*ast.File) bool {
return func(f *ast.File) bool {
fixed := false
if !imports(f, p1) {
addImport(f, p1)
fixed = true
}
if imports(f, p2) {
deleteImport(f, p2)
fixed = true
}
return fixed
}
}
func rewriteImportFn(oldnew ...string) func(*ast.File) bool {
return func(f *ast.File) bool {
fixed := false

View File

@ -67,12 +67,7 @@ func sortSpecs(fset *token.FileSet, f *File, specs []Spec) {
// Record positions for specs.
pos := make([]posSpan, len(specs))
for i, s := range specs {
// Cannot use s.End(), because it looks at len(s.Path.Value),
// and that string might have gotten longer or shorter.
// Instead, use s.Pos()+1, which is guaranteed to be > s.Pos()
// and still before the original end of the string, since any
// string literal must be at least 2 characters ("" or ``).
pos[i] = posSpan{s.Pos(), s.Pos() + 1}
pos[i] = posSpan{s.Pos(), s.End()}
}
// Identify comments in this range.