mirror of
https://github.com/golang/go
synced 2024-10-04 17:21:20 -06:00
71d83b72ef
fix, vet yacc is also fixed (it was wrong before) All that's left is the commands used during compilation This looks like a huge CL, but it's almost all file renames. The action is in cmd/go/pkg.go, the Makefiles, and .../doc.go. R=golang-dev, rsc CC=golang-dev https://golang.org/cl/5595044
459 lines
5.0 KiB
Go
459 lines
5.0 KiB
Go
// Copyright 2011 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package main
|
|
|
|
import "go/ast"
|
|
|
|
func init() {
|
|
addTestCases(importTests, nil)
|
|
}
|
|
|
|
var importTests = []testCase{
|
|
{
|
|
Name: "import.0",
|
|
Fn: addImportFn("os"),
|
|
In: `package main
|
|
|
|
import (
|
|
"os"
|
|
)
|
|
`,
|
|
Out: `package main
|
|
|
|
import (
|
|
"os"
|
|
)
|
|
`,
|
|
},
|
|
{
|
|
Name: "import.1",
|
|
Fn: addImportFn("os"),
|
|
In: `package main
|
|
`,
|
|
Out: `package main
|
|
|
|
import "os"
|
|
`,
|
|
},
|
|
{
|
|
Name: "import.2",
|
|
Fn: addImportFn("os"),
|
|
In: `package main
|
|
|
|
// Comment
|
|
import "C"
|
|
`,
|
|
Out: `package main
|
|
|
|
// Comment
|
|
import "C"
|
|
import "os"
|
|
`,
|
|
},
|
|
{
|
|
Name: "import.3",
|
|
Fn: addImportFn("os"),
|
|
In: `package main
|
|
|
|
// Comment
|
|
import "C"
|
|
|
|
import (
|
|
"io"
|
|
"utf8"
|
|
)
|
|
`,
|
|
Out: `package main
|
|
|
|
// Comment
|
|
import "C"
|
|
|
|
import (
|
|
"io"
|
|
"os"
|
|
"utf8"
|
|
)
|
|
`,
|
|
},
|
|
{
|
|
Name: "import.4",
|
|
Fn: deleteImportFn("os"),
|
|
In: `package main
|
|
|
|
import (
|
|
"os"
|
|
)
|
|
`,
|
|
Out: `package main
|
|
`,
|
|
},
|
|
{
|
|
Name: "import.5",
|
|
Fn: deleteImportFn("os"),
|
|
In: `package main
|
|
|
|
// Comment
|
|
import "C"
|
|
import "os"
|
|
`,
|
|
Out: `package main
|
|
|
|
// Comment
|
|
import "C"
|
|
`,
|
|
},
|
|
{
|
|
Name: "import.6",
|
|
Fn: deleteImportFn("os"),
|
|
In: `package main
|
|
|
|
// Comment
|
|
import "C"
|
|
|
|
import (
|
|
"io"
|
|
"os"
|
|
"utf8"
|
|
)
|
|
`,
|
|
Out: `package main
|
|
|
|
// Comment
|
|
import "C"
|
|
|
|
import (
|
|
"io"
|
|
"utf8"
|
|
)
|
|
`,
|
|
},
|
|
{
|
|
Name: "import.7",
|
|
Fn: deleteImportFn("io"),
|
|
In: `package main
|
|
|
|
import (
|
|
"io" // a
|
|
"os" // b
|
|
"utf8" // c
|
|
)
|
|
`,
|
|
Out: `package main
|
|
|
|
import (
|
|
// a
|
|
"os" // b
|
|
"utf8" // c
|
|
)
|
|
`,
|
|
},
|
|
{
|
|
Name: "import.8",
|
|
Fn: deleteImportFn("os"),
|
|
In: `package main
|
|
|
|
import (
|
|
"io" // a
|
|
"os" // b
|
|
"utf8" // c
|
|
)
|
|
`,
|
|
Out: `package main
|
|
|
|
import (
|
|
"io" // a
|
|
// b
|
|
"utf8" // c
|
|
)
|
|
`,
|
|
},
|
|
{
|
|
Name: "import.9",
|
|
Fn: deleteImportFn("utf8"),
|
|
In: `package main
|
|
|
|
import (
|
|
"io" // a
|
|
"os" // b
|
|
"utf8" // c
|
|
)
|
|
`,
|
|
Out: `package main
|
|
|
|
import (
|
|
"io" // a
|
|
"os" // b
|
|
// c
|
|
)
|
|
`,
|
|
},
|
|
{
|
|
Name: "import.10",
|
|
Fn: deleteImportFn("io"),
|
|
In: `package main
|
|
|
|
import (
|
|
"io"
|
|
"os"
|
|
"utf8"
|
|
)
|
|
`,
|
|
Out: `package main
|
|
|
|
import (
|
|
"os"
|
|
"utf8"
|
|
)
|
|
`,
|
|
},
|
|
{
|
|
Name: "import.11",
|
|
Fn: deleteImportFn("os"),
|
|
In: `package main
|
|
|
|
import (
|
|
"io"
|
|
"os"
|
|
"utf8"
|
|
)
|
|
`,
|
|
Out: `package main
|
|
|
|
import (
|
|
"io"
|
|
"utf8"
|
|
)
|
|
`,
|
|
},
|
|
{
|
|
Name: "import.12",
|
|
Fn: deleteImportFn("utf8"),
|
|
In: `package main
|
|
|
|
import (
|
|
"io"
|
|
"os"
|
|
"utf8"
|
|
)
|
|
`,
|
|
Out: `package main
|
|
|
|
import (
|
|
"io"
|
|
"os"
|
|
)
|
|
`,
|
|
},
|
|
{
|
|
Name: "import.13",
|
|
Fn: rewriteImportFn("utf8", "encoding/utf8"),
|
|
In: `package main
|
|
|
|
import (
|
|
"io"
|
|
"os"
|
|
"utf8" // thanks ken
|
|
)
|
|
`,
|
|
Out: `package main
|
|
|
|
import (
|
|
"encoding/utf8" // thanks ken
|
|
"io"
|
|
"os"
|
|
)
|
|
`,
|
|
},
|
|
{
|
|
Name: "import.14",
|
|
Fn: rewriteImportFn("asn1", "encoding/asn1"),
|
|
In: `package main
|
|
|
|
import (
|
|
"asn1"
|
|
"crypto"
|
|
"crypto/rsa"
|
|
_ "crypto/sha1"
|
|
"crypto/x509"
|
|
"crypto/x509/pkix"
|
|
"time"
|
|
)
|
|
|
|
var x = 1
|
|
`,
|
|
Out: `package main
|
|
|
|
import (
|
|
"crypto"
|
|
"crypto/rsa"
|
|
_ "crypto/sha1"
|
|
"crypto/x509"
|
|
"crypto/x509/pkix"
|
|
"encoding/asn1"
|
|
"time"
|
|
)
|
|
|
|
var x = 1
|
|
`,
|
|
},
|
|
{
|
|
Name: "import.15",
|
|
Fn: rewriteImportFn("url", "net/url"),
|
|
In: `package main
|
|
|
|
import (
|
|
"bufio"
|
|
"net"
|
|
"path"
|
|
"url"
|
|
)
|
|
|
|
var x = 1 // comment on x, not on url
|
|
`,
|
|
Out: `package main
|
|
|
|
import (
|
|
"bufio"
|
|
"net"
|
|
"net/url"
|
|
"path"
|
|
)
|
|
|
|
var x = 1 // comment on x, not on url
|
|
`,
|
|
},
|
|
{
|
|
Name: "import.16",
|
|
Fn: rewriteImportFn("http", "net/http", "template", "text/template"),
|
|
In: `package main
|
|
|
|
import (
|
|
"flag"
|
|
"http"
|
|
"log"
|
|
"template"
|
|
)
|
|
|
|
var addr = flag.String("addr", ":1718", "http service address") // Q=17, R=18
|
|
`,
|
|
Out: `package main
|
|
|
|
import (
|
|
"flag"
|
|
"log"
|
|
"net/http"
|
|
"text/template"
|
|
)
|
|
|
|
var addr = flag.String("addr", ":1718", "http service address") // Q=17, R=18
|
|
`,
|
|
},
|
|
{
|
|
Name: "import.17",
|
|
Fn: addImportFn("x/y/z", "x/a/c"),
|
|
In: `package main
|
|
|
|
// Comment
|
|
import "C"
|
|
|
|
import (
|
|
"a"
|
|
"b"
|
|
|
|
"x/w"
|
|
|
|
"d/f"
|
|
)
|
|
`,
|
|
Out: `package main
|
|
|
|
// Comment
|
|
import "C"
|
|
|
|
import (
|
|
"a"
|
|
"b"
|
|
|
|
"x/a/c"
|
|
"x/w"
|
|
"x/y/z"
|
|
|
|
"d/f"
|
|
)
|
|
`,
|
|
},
|
|
{
|
|
Name: "import.18",
|
|
Fn: addDelImportFn("e", "o"),
|
|
In: `package main
|
|
|
|
import (
|
|
"f"
|
|
"o"
|
|
"z"
|
|
)
|
|
`,
|
|
Out: `package main
|
|
|
|
import (
|
|
"e"
|
|
"f"
|
|
"z"
|
|
)
|
|
`,
|
|
},
|
|
}
|
|
|
|
func addImportFn(path ...string) func(*ast.File) bool {
|
|
return func(f *ast.File) bool {
|
|
fixed := false
|
|
for _, p := range path {
|
|
if !imports(f, p) {
|
|
addImport(f, p)
|
|
fixed = true
|
|
}
|
|
}
|
|
return fixed
|
|
}
|
|
}
|
|
|
|
func deleteImportFn(path string) func(*ast.File) bool {
|
|
return func(f *ast.File) bool {
|
|
if imports(f, path) {
|
|
deleteImport(f, path)
|
|
return true
|
|
}
|
|
return false
|
|
}
|
|
}
|
|
|
|
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
|
|
for i := 0; i < len(oldnew); i += 2 {
|
|
if imports(f, oldnew[i]) {
|
|
rewriteImport(f, oldnew[i], oldnew[i+1])
|
|
fixed = true
|
|
}
|
|
}
|
|
return fixed
|
|
}
|
|
}
|