1
0
mirror of https://github.com/golang/go synced 2024-11-18 16:54:43 -07:00
The Go programming language
Go to file
Rob Pike 2c5c896732 go.tools/cmd/stringer: new tool
This tool creates String methods from constant definitions.
It's a time-saver designed to be used from go generate.
The methods generated are efficient, more so than one
is likely to create by hand.

Given

        package date

        type Day int

        const (
                Monday Day = iota
                Tuesday
                Wednesday
                Thursday
                Friday
                Saturday
                Sunday
        )

the command

        stringer -type Day

will create the file day_string.go containing

        package date

        import "fmt"

        var (
                _Day_indexes = []uint8{6, 13, 22, 30, 36, 44, 50}
                _Day_names   = "MondayTuesdayWednesdayThursdayFridaySaturdaySunday"
        )

        func (i Day) String() string {
                if i < 0 || i >= Day(len(_Day_indexes)) {
                        return fmt.Sprintf("Day(%d)", i)
                }
                hi := _Day_indexes[i]
                lo := uint8(0)
                if i > 0 {
                        lo = _Day_indexes[i-1]
                }
                return _Day_names[lo:hi]
        }

There are several strategies for the created method chosen according to
the structure of the sequence of constants.

Handles integer types only, both signed and unsigned. That's probably
all that is needed.

Tests to follow, but the test structure will be large so sending this out
separately. The code has been heavily hand-tested but there are
some bugs. Don't depend on this until the tests are installed.

LGTM=gri
R=gri, josharian
CC=golang-codereviews
https://golang.org/cl/136180043
2014-09-03 17:27:48 -07:00
astutil go.tools/astutil: delete all matching imports in DeleteImport 2014-08-14 11:51:51 -07:00
blog go.tools/blog: strip prefix when serving static content 2013-11-08 13:28:32 +11:00
cmd go.tools/cmd/stringer: new tool 2014-09-03 17:27:48 -07:00
container/intsets container/intsets: add benchmark of AppendTo method. 2014-06-19 14:35:37 -04:00
cover go.tools/cover: split parsing code out from cmd/cover 2013-12-03 20:55:21 -08:00
dashboard dashboard: find static IP automatically, update images 2014-09-03 17:15:00 -07:00
go go.tools/go/types: document Config.Error better 2014-09-02 15:53:24 -07:00
godoc go.tools/go/types: add (*PkgName).ImportedPackage method. 2014-09-02 18:12:08 -04:00
imports go.tools/astutil: delete all matching imports in DeleteImport 2014-08-14 11:51:51 -07:00
oracle go.tools/go/types: add (*PkgName).ImportedPackage method. 2014-09-02 18:12:08 -04:00
playground go.tools/playground: return a better message for code starting with a shebang on non local mode 2014-08-01 15:04:49 -07:00
present go.tools/present: add support for figure captions 2014-07-15 08:23:16 -07:00
refactor go.tools/go/types: LookupFieldOrMethod checks method set 2014-08-28 13:03:13 -07:00
.hgignore dashboard: find static IP automatically, update images 2014-09-03 17:15:00 -07:00
AUTHORS go.empty: prototype for new subrepository 2012-01-25 14:45:13 -05:00
codereview.cfg codereview: switch defaultcc to golang-codereviews 2013-12-20 10:54:33 -05:00
CONTRIBUTORS go.empty: prototype for new subrepository 2012-01-25 14:45:13 -05:00
LICENSE LICENSE: add 2012-03-17 15:20:58 +11:00
PATENTS go.empty: add PATENTS file to the subrepo. 2012-04-16 11:24:04 +10:00
README go.tools/README: minor correction. 2013-10-29 13:20:58 -04:00

This subrepository holds the source for various packages and tools that support
the Go programming language.

Some of the tools, godoc and vet for example, are included in binary Go distributions.
Others, including the Go oracle and the test coverage tool, can be fetched with "go get".

Packages include a type-checker for Go and an implementation of the
Static Single Assignment form (SSA) representation for Go programs.

To submit changes to this repository, see http://golang.org/doc/contribute.html.