summaryrefslogtreecommitdiff
path: root/src/cmd/fix/netipv6zone.go
diff options
context:
space:
mode:
authorMichael Stapelberg <stapelberg@debian.org>2013-03-04 21:27:43 +0100
committerMichael Stapelberg <michael@stapelberg.de>2013-03-04 21:27:43 +0100
commitad47422646a18ffcb47cec916ef7393c923f2e76 (patch)
tree7c7861fb3d9539d61c1dcfd5b8dadee974c25760 /src/cmd/fix/netipv6zone.go
parent2c8d5d584a79781ca41bb6f4b396893fbbac5b97 (diff)
parent04b08da9af0c450d645ab7389d1467308cfc2db8 (diff)
downloadgolang-ad47422646a18ffcb47cec916ef7393c923f2e76.tar.gz
Merge tag 'upstream/1.1_hg20130304' into debian-sid
Upstream version 1.1~hg20130304
Diffstat (limited to 'src/cmd/fix/netipv6zone.go')
-rw-r--r--src/cmd/fix/netipv6zone.go71
1 files changed, 71 insertions, 0 deletions
diff --git a/src/cmd/fix/netipv6zone.go b/src/cmd/fix/netipv6zone.go
new file mode 100644
index 000000000..587b9ffec
--- /dev/null
+++ b/src/cmd/fix/netipv6zone.go
@@ -0,0 +1,71 @@
+// Copyright 2012 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() {
+ register(netipv6zoneFix)
+}
+
+var netipv6zoneFix = fix{
+ "netipv6zone",
+ "2012-11-26",
+ netipv6zone,
+ `Adapt element key to IPNet, IPAddr, UDPAddr or TCPAddr composite literals.
+
+https://codereview.appspot.com/6849045/
+`,
+}
+
+func netipv6zone(f *ast.File) bool {
+ if !imports(f, "net") {
+ return false
+ }
+
+ fixed := false
+ walk(f, func(n interface{}) {
+ cl, ok := n.(*ast.CompositeLit)
+ if !ok {
+ return
+ }
+ se, ok := cl.Type.(*ast.SelectorExpr)
+ if !ok {
+ return
+ }
+ if !isTopName(se.X, "net") || se.Sel == nil {
+ return
+ }
+ switch ss := se.Sel.String(); ss {
+ case "IPNet", "IPAddr", "UDPAddr", "TCPAddr":
+ for i, e := range cl.Elts {
+ if _, ok := e.(*ast.KeyValueExpr); ok {
+ break
+ }
+ switch i {
+ case 0:
+ cl.Elts[i] = &ast.KeyValueExpr{
+ Key: ast.NewIdent("IP"),
+ Value: e,
+ }
+ case 1:
+ if ss == "IPNet" {
+ cl.Elts[i] = &ast.KeyValueExpr{
+ Key: ast.NewIdent("Mask"),
+ Value: e,
+ }
+ } else {
+ cl.Elts[i] = &ast.KeyValueExpr{
+ Key: ast.NewIdent("Port"),
+ Value: e,
+ }
+ }
+ }
+ fixed = true
+ }
+ }
+ })
+ return fixed
+}