From df54d45e59eeebba664692bf44baa84433d37420 Mon Sep 17 00:00:00 2001 From: Sergei Zimakov Date: Wed, 4 Sep 2019 15:04:04 +0300 Subject: [PATCH] Add --parseInternal flag to support internal underlying types (#508) --- README.md | 1 + cmd/swag/main.go | 7 +++++++ gen/gen.go | 4 ++++ parser.go | 7 ++++++- 4 files changed, 18 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 4d24e6c8c..28c1d8680 100644 --- a/README.md +++ b/README.md @@ -74,6 +74,7 @@ OPTIONS: --output value, -o value Output directory for al the generated files(swagger.json, swagger.yaml and doc.go) (default: "./docs") --parseVendor Parse go files in 'vendor' folder, disabled by default --parseDependency Parse go files in outside dependency folder, disabled by default + --parseInternal Parse go files in internal packages, disabled by default ``` ## Supported Web Frameworks diff --git a/cmd/swag/main.go b/cmd/swag/main.go index fd3a67c76..2ddcdb57e 100644 --- a/cmd/swag/main.go +++ b/cmd/swag/main.go @@ -16,6 +16,7 @@ const propertyStrategyFlag = "propertyStrategy" const outputFlag = "output" const parseVendorFlag = "parseVendor" const parseDependency = "parseDependency" +const parseInternal = "parseInternal" const markdownFilesDirFlag = "markdownFiles" func main() { @@ -34,6 +35,7 @@ func main() { outputDir := c.String(outputFlag) parseVendor := c.Bool(parseVendorFlag) parseDependency := c.Bool(parseDependency) + parseInternal := c.Bool(parseInternal) markdownFilesDir := c.String(markdownFilesDirFlag) switch strategy { @@ -49,6 +51,7 @@ func main() { OutputDir: outputDir, ParseVendor: parseVendor, ParseDependency: parseDependency, + ParseInternal: parseInternal, MarkdownFilesDir: markdownFilesDir, }) }, @@ -81,6 +84,10 @@ func main() { Name: "parseDependency", Usage: "Parse go files in outside dependency folder, disabled by default", }, + cli.BoolFlag{ + Name: "parseInternal", + Usage: "Parse go files in internal packages, disabled by default", + }, cli.StringFlag{ Name: "markdownFiles, md", Value: "", diff --git a/gen/gen.go b/gen/gen.go index 7fed9d041..4960fd976 100644 --- a/gen/gen.go +++ b/gen/gen.go @@ -47,6 +47,9 @@ type Config struct { // ParseDependencies whether swag should be parse outside dependency folder ParseDependency bool + // ParseInternal whether swag should parse internal packages + ParseInternal bool + // MarkdownFilesDir used to find markdownfiles, which can be used for tag descriptions MarkdownFilesDir string } @@ -62,6 +65,7 @@ func (g *Gen) Build(config *Config) error { p.PropNamingStrategy = config.PropNamingStrategy p.ParseVendor = config.ParseVendor p.ParseDependency = config.ParseDependency + p.ParseInternal = config.ParseInternal if err := p.ParseAPI(config.SearchDir, config.MainAPIFile); err != nil { return err diff --git a/parser.go b/parser.go index 893794ea9..ed09d056d 100644 --- a/parser.go +++ b/parser.go @@ -59,6 +59,9 @@ type Parser struct { // ParseDependencies whether swag should be parse outside dependency folder ParseDependency bool + // ParseInternal whether swag should parse internal packages + ParseInternal bool + // structStack stores full names of the structures that were already parsed or are being parsed now structStack []string @@ -112,6 +115,7 @@ func (parser *Parser) ParseAPI(searchDir string, mainAPIFile string) error { } var t depth.Tree + t.ResolveInternal = true absMainAPIFilePath, err := filepath.Abs(filepath.Join(searchDir, mainAPIFile)) if err != nil { @@ -1281,7 +1285,8 @@ func (parser *Parser) getAllGoFileInfo(searchDir string) error { } func (parser *Parser) getAllGoFileInfoFromDeps(pkg *depth.Pkg) error { - if pkg.Internal || !pkg.Resolved { // ignored internal and not resolved dependencies + ignoreInternal := pkg.Internal && !parser.ParseInternal + if ignoreInternal || !pkg.Resolved { // ignored internal and not resolved dependencies return nil }