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  }