github.com/bgentry/go@v0.0.0-20150121062915-6cf5a733d54d/src/cmd/fix/printerconfig.go (about) 1 // Copyright 2012 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package main 6 7 import "go/ast" 8 9 func init() { 10 register(printerconfigFix) 11 } 12 13 var printerconfigFix = fix{ 14 "printerconfig", 15 "2012-12-11", 16 printerconfig, 17 `Add element keys to Config composite literals.`, 18 } 19 20 func printerconfig(f *ast.File) bool { 21 if !imports(f, "go/printer") { 22 return false 23 } 24 25 fixed := false 26 walk(f, func(n interface{}) { 27 cl, ok := n.(*ast.CompositeLit) 28 if !ok { 29 return 30 } 31 se, ok := cl.Type.(*ast.SelectorExpr) 32 if !ok { 33 return 34 } 35 if !isTopName(se.X, "printer") || se.Sel == nil { 36 return 37 } 38 39 if ss := se.Sel.String(); ss == "Config" { 40 for i, e := range cl.Elts { 41 if _, ok := e.(*ast.KeyValueExpr); ok { 42 break 43 } 44 switch i { 45 case 0: 46 cl.Elts[i] = &ast.KeyValueExpr{ 47 Key: ast.NewIdent("Mode"), 48 Value: e, 49 } 50 case 1: 51 cl.Elts[i] = &ast.KeyValueExpr{ 52 Key: ast.NewIdent("Tabwidth"), 53 Value: e, 54 } 55 } 56 fixed = true 57 } 58 } 59 }) 60 return fixed 61 }