diff options
author | Nathan Skrzypczak <nathan.skrzypczak@gmail.com> | 2020-08-21 17:25:53 +0200 |
---|---|---|
committer | Ondrej Fabry <ofabry@cisco.com> | 2020-09-03 15:11:13 +0000 |
commit | c94a962279858fb13eaacc689f47aed358373e44 (patch) | |
tree | 0cade1807c10ed53bf7c1b623f4d26da639356f6 /binapigen/generator.go | |
parent | 42d11af03300fe0a3476c32ad8c70297862d9320 (diff) |
Improve doc & fix import ordering
This also updates /binapi
and adds a new make command to generate api
files out of a local vpp repo clone
Signed-off-by: Nathan Skrzypczak <nathan.skrzypczak@gmail.com>
Change-Id: Iff7965388a74ecd21af80f10b5a59d4ed8da6340
Diffstat (limited to 'binapigen/generator.go')
-rw-r--r-- | binapigen/generator.go | 24 |
1 files changed, 21 insertions, 3 deletions
diff --git a/binapigen/generator.go b/binapigen/generator.go index a6f1615..e5eed5a 100644 --- a/binapigen/generator.go +++ b/binapigen/generator.go @@ -223,6 +223,13 @@ func (g *GenFile) Content() ([]byte, error) { return g.injectImports(g.buf.Bytes()) } +func getImportClass(importPath string) int { + if !strings.Contains(importPath, ".") { + return 0 /* std */ + } + return 1 /* External */ +} + // injectImports parses source, injects import block declaration with all imports and return formatted func (g *GenFile) injectImports(original []byte) ([]byte, error) { // Parse source code @@ -259,7 +266,12 @@ func (g *GenFile) injectImports(original []byte) ([]byte, error) { } // Sort imports by import path sort.Slice(importPaths, func(i, j int) bool { - return importPaths[i].Path < importPaths[j].Path + ci := getImportClass(importPaths[i].Path) + cj := getImportClass(importPaths[j].Path) + if ci == cj { + return importPaths[i].Path < importPaths[j].Path + } + return ci < cj }) // Inject new import block into parsed AST if len(importPaths) > 0 { @@ -275,14 +287,20 @@ func (g *GenFile) injectImports(original []byte) ([]byte, error) { } // Prepare the import block impDecl := &ast.GenDecl{Tok: token.IMPORT, TokPos: pos, Lparen: pos, Rparen: pos} - for _, importPath := range importPaths { + for i, importPath := range importPaths { var name *ast.Ident if importPath.Name == "_" || strings.Contains(importPath.Path, ".") { name = &ast.Ident{Name: importPath.Name, NamePos: pos} } + value := strconv.Quote(importPath.Path) + if i < len(importPaths)-1 { + if getImportClass(importPath.Path) != getImportClass(importPaths[i+1].Path) { + value += "\n" + } + } impDecl.Specs = append(impDecl.Specs, &ast.ImportSpec{ Name: name, - Path: &ast.BasicLit{Kind: token.STRING, Value: strconv.Quote(importPath.Path), ValuePos: pos}, + Path: &ast.BasicLit{Kind: token.STRING, Value: value, ValuePos: pos}, EndPos: pos, }) } |