|  | // Copyright 2014 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. | 
|  |  | 
|  | // The gorename command performs precise type-safe renaming of | 
|  | // identifiers in Go source code. | 
|  | // | 
|  | // Run with -help for usage information, or view the Usage constant in | 
|  | // package golang.org/x/tools/refactor/rename, which contains most of | 
|  | // the implementation. | 
|  | package main // import "golang.org/x/tools/cmd/gorename" | 
|  |  | 
|  | import ( | 
|  | "flag" | 
|  | "fmt" | 
|  | "go/build" | 
|  | "log" | 
|  | "os" | 
|  |  | 
|  | "golang.org/x/tools/go/buildutil" | 
|  | "golang.org/x/tools/refactor/rename" | 
|  | ) | 
|  |  | 
|  | var ( | 
|  | offsetFlag = flag.String("offset", "", "file and byte offset of identifier to be renamed, e.g. 'file.go:#123'.  For use by editors.") | 
|  | fromFlag   = flag.String("from", "", "identifier to be renamed; see -help for formats") | 
|  | toFlag     = flag.String("to", "", "new name for identifier") | 
|  | helpFlag   = flag.Bool("help", false, "show usage message") | 
|  | ) | 
|  |  | 
|  | func init() { | 
|  | flag.Var((*buildutil.TagsFlag)(&build.Default.BuildTags), "tags", buildutil.TagsFlagDoc) | 
|  | flag.BoolVar(&rename.Force, "force", false, "proceed, even if conflicts were reported") | 
|  | flag.BoolVar(&rename.Verbose, "v", false, "print verbose information") | 
|  | flag.BoolVar(&rename.Diff, "d", false, "display diffs instead of rewriting files") | 
|  | flag.StringVar(&rename.DiffCmd, "diffcmd", "diff", "diff command invoked when using -d") | 
|  | } | 
|  |  | 
|  | func main() { | 
|  | log.SetPrefix("gorename: ") | 
|  | log.SetFlags(0) | 
|  | flag.Parse() | 
|  | if len(flag.Args()) > 0 { | 
|  | log.Fatal("surplus arguments") | 
|  | } | 
|  |  | 
|  | if *helpFlag || (*offsetFlag == "" && *fromFlag == "" && *toFlag == "") { | 
|  | fmt.Print(rename.Usage) | 
|  | return | 
|  | } | 
|  |  | 
|  | if err := rename.Main(&build.Default, *offsetFlag, *fromFlag, *toFlag); err != nil { | 
|  | if err != rename.ConflictError { | 
|  | log.Fatal(err) | 
|  | } | 
|  | os.Exit(1) | 
|  | } | 
|  | } |