Commit a19c0ced authored by Agniva De Sarker's avatar Agniva De Sarker Committed by Robert Griesemer

Revert "go/parser: include more comments in a struct or interface"

This reverts commit https://golang.org/cl/161177/.

Reason for revert: this led to non-contiguous comments spaced
by an empty line to be grouped into a single CommentGroup

Fixes #32944
Updates #10858

Change-Id: I5e16663b308c3b560496da8e66c33befdf9ed9dd
Reviewed-on: https://go-review.googlesource.com/c/go/+/185040Reviewed-by: 's avatarRobert Griesemer <gri@golang.org>
parent c893ea8f
//
PACKAGE issue10858
IMPORTPATH
testdata/issue10858
IMPORTS
unsafe
FILENAMES
testdata/issue10858.go
CONSTANTS
// First line Second line
const (
// C1 comment
C1 int = 1 << 0
C2 int = 1 << 1
// C3 comment
//
// with a line gap
C3 int = 1 << 2
)
TYPES
// StructTag is a comment with 2 connecting lines
type StructTag string // adjacent comment
// Get returns the value associated with key in the tag string.
func (tag StructTag) Get(key string) string
// First line Second line
type Type interface {
// Should be present
// Align returns the alignment in bytes of a value of
// this type when allocated in memory.
Align() int
// FieldAlign returns the alignment in bytes of a value of
// this type when used as a field in a struct.
FieldAlign() int // adjacent comment
// Ptr: Elem
// Slice: Elem
// Bits returns the size of the type in bits.
//
// It panics if the type's Kind is not one of the
// sized or unsized Int, Uint, Float, or Complex kinds.
Bits() int
}
// NewType is a comment ending with this line.
func NewType() Type
// TypeAlg is a copy of runtime.typeAlg
type TypeAlg struct {
// function for hashing objects of this type
//
//
// (ptr to object, seed) -> hash
Hash func(unsafe.Pointer, uintptr) uintptr
// include
// include
// include
// function for comparing objects of this type
// (ptr to object A, ptr to object B) -> ==?
Equal func(unsafe.Pointer, unsafe.Pointer) bool
}
//
PACKAGE issue10858
IMPORTPATH
testdata/issue10858
IMPORTS
unsafe
FILENAMES
testdata/issue10858.go
CONSTANTS
// First line Second line
const (
// C1 comment
C1 int = 1 << 0
C2 int = 1 << 1
// C3 comment
//
// with a line gap
C3 int = 1 << 2
)
TYPES
// StructTag is a comment with 2 connecting lines
type StructTag string // adjacent comment
// Get returns the value associated with key in the tag string.
func (tag StructTag) Get(key string) string
// First line Second line
type Type interface {
// Should be present
// Align returns the alignment in bytes of a value of
// this type when allocated in memory.
Align() int
// FieldAlign returns the alignment in bytes of a value of
// this type when used as a field in a struct.
FieldAlign() int // adjacent comment
// Ptr: Elem
// Slice: Elem
// Bits returns the size of the type in bits.
//
// It panics if the type's Kind is not one of the
// sized or unsized Int, Uint, Float, or Complex kinds.
Bits() int
}
// NewType is a comment ending with this line.
func NewType() Type
// TypeAlg is a copy of runtime.typeAlg
type TypeAlg struct {
// function for hashing objects of this type
//
//
// (ptr to object, seed) -> hash
Hash func(unsafe.Pointer, uintptr) uintptr
// include
// include
// include
// function for comparing objects of this type
// (ptr to object A, ptr to object B) -> ==?
Equal func(unsafe.Pointer, unsafe.Pointer) bool
}
//
PACKAGE issue10858
IMPORTPATH
testdata/issue10858
IMPORTS
unsafe
FILENAMES
testdata/issue10858.go
CONSTANTS
// First line Second line
const (
// C1 comment
C1 int = 1 << 0
C2 int = 1 << 1
// C3 comment
//
// with a line gap
C3 int = 1 << 2
)
TYPES
// StructTag is a comment with 2 connecting lines
type StructTag string // adjacent comment
// Get returns the value associated with key in the tag string.
func (tag StructTag) Get(key string) string
// First line Second line
type Type interface {
// Should be present
// Align returns the alignment in bytes of a value of
// this type when allocated in memory.
Align() int
// FieldAlign returns the alignment in bytes of a value of
// this type when used as a field in a struct.
FieldAlign() int // adjacent comment
// Ptr: Elem
// Slice: Elem
// Bits returns the size of the type in bits.
//
// It panics if the type's Kind is not one of the
// sized or unsized Int, Uint, Float, or Complex kinds.
Bits() int
}
// NewType is a comment ending with this line.
func NewType() Type
// TypeAlg is a copy of runtime.typeAlg
type TypeAlg struct {
// function for hashing objects of this type
//
//
// (ptr to object, seed) -> hash
Hash func(unsafe.Pointer, uintptr) uintptr
// include
// include
// include
// function for comparing objects of this type
// (ptr to object A, ptr to object B) -> ==?
Equal func(unsafe.Pointer, unsafe.Pointer) bool
}
package issue10858
import "unsafe"
// Should be ignored
// First line
//
// Second line
type Type interface {
// Should be present
// Align returns the alignment in bytes of a value of
// this type when allocated in memory.
Align() int
// FieldAlign returns the alignment in bytes of a value of
// this type when used as a field in a struct.
FieldAlign() int // adjacent comment
// Ptr: Elem
// Slice: Elem
// Bits returns the size of the type in bits.
//
// It panics if the type's Kind is not one of the
// sized or unsized Int, Uint, Float, or Complex kinds.
Bits() int
// Should be ignored
}
// Should be ignored
// NewType is a comment
//
// ending with this line.
func NewType() Type {}
// Ignore
// First line
//
// Second line
const (
// Should be ignored
// C1 comment
C1 int = 1 << 0
// Should
//
// be ignored
C2 int = 1 << 1
// C3 comment
//
// with a line gap
C3 int = 1 << 2
// Should be ignored
)
// Should be ignored
// Should be ignored
// TypeAlg is a
// copy of runtime.typeAlg
type TypeAlg struct {
// function for hashing objects of this type
//
//
// (ptr to object, seed) -> hash
Hash func(unsafe.Pointer, uintptr) uintptr
// include
// include
// include
// function for comparing objects of this type
// (ptr to object A, ptr to object B) -> ==?
Equal func(unsafe.Pointer, unsafe.Pointer) bool
// Should be ignored
}
// Should be ignored
// StructTag is a comment
//
//
// with 2 connecting lines
type StructTag string // adjacent comment
// Should be ignored
// Get returns the value associated with key in the tag string.
func (tag StructTag) Get(key string) string {
}
......@@ -63,7 +63,6 @@ type parser struct {
topScope *ast.Scope // top-most scope; may be pkgScope
unresolved []*ast.Ident // unresolved identifiers
imports []*ast.ImportSpec // list of imports
inStruct bool // if set, parser is parsing a struct or interface (for comment collection)
// Label scopes
// (maintained by open/close LabelScope)
......@@ -338,15 +337,7 @@ func (p *parser) next() {
// consume successor comments, if any
endline = -1
for p.tok == token.COMMENT {
n := 1
// When inside a struct (or interface), we don't want to lose comments
// separated from individual field (or method) documentation by empty
// lines. Allow for some white space in this case and collect those
// comments as a group. See issue #10858 for details.
if p.inStruct {
n = 2
}
comment, endline = p.consumeCommentGroup(n)
comment, endline = p.consumeCommentGroup(1)
}
if endline+1 == p.file.Line(p.pos) {
......@@ -757,7 +748,6 @@ func (p *parser) parseStructType() *ast.StructType {
}
pos := p.expect(token.STRUCT)
p.inStruct = true
lbrace := p.expect(token.LBRACE)
scope := ast.NewScope(nil) // struct scope
var list []*ast.Field
......@@ -768,7 +758,6 @@ func (p *parser) parseStructType() *ast.StructType {
list = append(list, p.parseFieldDecl(scope))
}
rbrace := p.expect(token.RBRACE)
p.inStruct = false
return &ast.StructType{
Struct: pos,
......@@ -970,7 +959,6 @@ func (p *parser) parseInterfaceType() *ast.InterfaceType {
}
pos := p.expect(token.INTERFACE)
p.inStruct = true
lbrace := p.expect(token.LBRACE)
scope := ast.NewScope(nil) // interface scope
var list []*ast.Field
......@@ -978,7 +966,6 @@ func (p *parser) parseInterfaceType() *ast.InterfaceType {
list = append(list, p.parseMethodSpec(scope))
}
rbrace := p.expect(token.RBRACE)
p.inStruct = false
return &ast.InterfaceType{
Interface: pos,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment