mirror of
https://github.com/netbirdio/easyjson.git
synced 2026-05-22 18:44:42 -07:00
Fixed skip detection and added correct test
This commit is contained in:
@@ -21,6 +21,7 @@ generate: build
|
||||
./tests/html.go \
|
||||
./tests/unknown_fields.go \
|
||||
./tests/type_declaration.go \
|
||||
./tests/type_declaration_skip.go \
|
||||
./tests/members_escaped.go \
|
||||
./tests/members_unescaped.go \
|
||||
./tests/intern.go \
|
||||
@@ -43,6 +44,7 @@ generate: build
|
||||
bin/easyjson -disallow_unknown_fields ./tests/disallow_unknown.go
|
||||
bin/easyjson ./tests/unknown_fields.go
|
||||
bin/easyjson ./tests/type_declaration.go
|
||||
bin/easyjson -all ./tests/type_declaration_skip.go
|
||||
bin/easyjson ./tests/members_escaped.go
|
||||
bin/easyjson -disable_members_unescape ./tests/members_unescaped.go
|
||||
bin/easyjson ./tests/intern.go
|
||||
|
||||
+15
-13
@@ -26,16 +26,16 @@ type visitor struct {
|
||||
name string
|
||||
}
|
||||
|
||||
func (p *Parser) needType(comments string) bool {
|
||||
func (p *Parser) needType(comments string) (skip, explicit bool) {
|
||||
for _, v := range strings.Split(comments, "\n") {
|
||||
if strings.HasPrefix(v, structSkipComment) {
|
||||
return false
|
||||
return true, false
|
||||
}
|
||||
if strings.HasPrefix(v, structComment) {
|
||||
return true
|
||||
return false, true
|
||||
}
|
||||
}
|
||||
return false
|
||||
return false, false
|
||||
}
|
||||
|
||||
func (v *visitor) Visit(n ast.Node) (w ast.Visitor) {
|
||||
@@ -47,21 +47,23 @@ func (v *visitor) Visit(n ast.Node) (w ast.Visitor) {
|
||||
return v
|
||||
|
||||
case *ast.GenDecl:
|
||||
explicit := v.needType(n.Doc.Text())
|
||||
if !explicit {
|
||||
return v
|
||||
}
|
||||
skip, explicit := v.needType(n.Doc.Text())
|
||||
|
||||
for _, nc := range n.Specs {
|
||||
switch nct := nc.(type) {
|
||||
case *ast.TypeSpec:
|
||||
nct.Doc = n.Doc
|
||||
if skip || explicit {
|
||||
for _, nc := range n.Specs {
|
||||
switch nct := nc.(type) {
|
||||
case *ast.TypeSpec:
|
||||
nct.Doc = n.Doc
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return v
|
||||
case *ast.TypeSpec:
|
||||
explicit := v.needType(n.Doc.Text())
|
||||
skip, explicit := v.needType(n.Doc.Text())
|
||||
if skip {
|
||||
return nil
|
||||
}
|
||||
if !explicit && !v.AllStructs {
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -57,6 +57,7 @@ var testCases = []struct {
|
||||
{&myGenDeclaredValue, myGenDeclaredString},
|
||||
{&myGenDeclaredWithCommentValue, myGenDeclaredWithCommentString},
|
||||
{&myTypeDeclaredValue, myTypeDeclaredString},
|
||||
{&myTypeNotSkippedValue, myTypeNotSkippedString},
|
||||
{&intern, internString},
|
||||
}
|
||||
|
||||
|
||||
@@ -23,11 +23,6 @@ type (
|
||||
}
|
||||
)
|
||||
|
||||
//easyjson:skip
|
||||
type TypeSkipped struct {
|
||||
Value string
|
||||
}
|
||||
|
||||
var (
|
||||
myGenDeclaredValue = TypeDeclared{Value: "GenDeclared"}
|
||||
myGenDeclaredString = `{"Value":"GenDeclared"}`
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
package tests
|
||||
|
||||
//easyjson:skip
|
||||
type TypeSkipped struct {
|
||||
Value string
|
||||
}
|
||||
|
||||
type TypeNotSkipped struct {
|
||||
Value string
|
||||
}
|
||||
|
||||
var (
|
||||
myTypeNotSkippedValue = TypeDeclared{Value: "TypeNotSkipped"}
|
||||
myTypeNotSkippedString = `{"Value":"TypeNotSkipped"}`
|
||||
)
|
||||
Reference in New Issue
Block a user