From 0c9f71dfd2b4ecfe6615aa4fee55a51b77026948 Mon Sep 17 00:00:00 2001 From: Pavel Parshin Date: Sun, 10 May 2020 14:08:06 +0300 Subject: [PATCH] Fixed skip detection and added correct test --- Makefile | 2 ++ parser/parser.go | 28 +++++++++++++++------------- tests/basic_test.go | 1 + tests/type_declaration.go | 5 ----- tests/type_declaration_skip.go | 15 +++++++++++++++ 5 files changed, 33 insertions(+), 18 deletions(-) create mode 100644 tests/type_declaration_skip.go diff --git a/Makefile b/Makefile index 85de543..ec37cc4 100644 --- a/Makefile +++ b/Makefile @@ -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 diff --git a/parser/parser.go b/parser/parser.go index 09dbbd6..1d96026 100644 --- a/parser/parser.go +++ b/parser/parser.go @@ -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 } diff --git a/tests/basic_test.go b/tests/basic_test.go index e2d6ad4..11013c8 100644 --- a/tests/basic_test.go +++ b/tests/basic_test.go @@ -57,6 +57,7 @@ var testCases = []struct { {&myGenDeclaredValue, myGenDeclaredString}, {&myGenDeclaredWithCommentValue, myGenDeclaredWithCommentString}, {&myTypeDeclaredValue, myTypeDeclaredString}, + {&myTypeNotSkippedValue, myTypeNotSkippedString}, {&intern, internString}, } diff --git a/tests/type_declaration.go b/tests/type_declaration.go index 84553a3..e638455 100644 --- a/tests/type_declaration.go +++ b/tests/type_declaration.go @@ -23,11 +23,6 @@ type ( } ) -//easyjson:skip -type TypeSkipped struct { - Value string -} - var ( myGenDeclaredValue = TypeDeclared{Value: "GenDeclared"} myGenDeclaredString = `{"Value":"GenDeclared"}` diff --git a/tests/type_declaration_skip.go b/tests/type_declaration_skip.go new file mode 100644 index 0000000..5400795 --- /dev/null +++ b/tests/type_declaration_skip.go @@ -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"}` +)