Until now, types of type lists in interface types were collected in a single expression list "Types". This made it not possible to gofmt such interfaces while preserving the original layout of type lists. This change represents types of type lists as part of an ast.FieldList. The ast.InterfaceType.Methods field list now represents embedded interfaces, methods, or type list types through ast.Fields. This preserves all position information and thus permits accurate gofmt-ing. The new representation is as follows: For an ast.Field f, if - len(f.Names) == 0 : f.Type is an embedded interface - f.Names[0].Name == "type": f.Type is a type of a type list - otherwise : f represents a method Since "type" is a keyword, a Go field name cannot be "type". Fields of types of type lists that share the same "type" keyword in the source share the same f.Names[0] identifier (named "type"), and the position of that identifier is the position of the "type" keyword in the source. Related changes: - Adjusted go/parser to build the new representation. - Adjusted go/printer and implemented formatting of type lists. (This is still not quite correct if there are comments, but that is fine-tuning). - Adjusted go/types to work with the new representation. - Implemented SplitFieldList and MergeFieldList in go2go translator to easily switch between old and new representation. - Updated documentation. Change-Id: I016e2ce5949bfe294509d703156c41d42cf7084e |
||
|---|---|---|
| .github | ||
| api | ||
| doc | ||
| lib/time | ||
| misc | ||
| src | ||
| test | ||
| .gitattributes | ||
| .gitignore | ||
| AUTHORS | ||
| CONTRIBUTING.md | ||
| CONTRIBUTORS | ||
| LICENSE | ||
| PATENTS | ||
| README.md | ||
| SECURITY.md | ||
| favicon.ico | ||
| robots.txt | ||
README.md
The Go Programming Language
Go is an open source programming language that makes it easy to build simple, reliable, and efficient software.
Gopher image by Renee French, licensed under Creative Commons 3.0 Attributions license.
Our canonical Git repository is located at https://go.googlesource.com/go. There is a mirror of the repository at https://github.com/golang/go.
Unless otherwise noted, the Go source files are distributed under the BSD-style license found in the LICENSE file.
Download and Install
Binary Distributions
Official binary distributions are available at https://golang.org/dl/.
After downloading a binary release, visit https://golang.org/doc/install or load doc/install.html in your web browser for installation instructions.
Install From Source
If a binary distribution is not available for your combination of operating system and architecture, visit https://golang.org/doc/install/source or load doc/install-source.html in your web browser for source installation instructions.
Contributing
Go is the work of thousands of contributors. We appreciate your help!
To contribute, please read the contribution guidelines: https://golang.org/doc/contribute.html
Note that the Go project uses the issue tracker for bug reports and proposals only. See https://golang.org/wiki/Questions for a list of places to ask questions about the Go language.