cue/ast: make package clause a declaration
This makes handling comments during generation
and analysis considerably easier.
Also fixes comments printing of import specs.
Change-Id: I0a77405524b40eff47e1e1e0dd3183ed3563b263
Reviewed-on: https://cue-review.googlesource.com/c/cue/+/2865
Reviewed-by: Marcel van Lohuizen <mpvl@golang.org>
diff --git a/encoding/protobuf/parse.go b/encoding/protobuf/parse.go
index 4df5977..6432fce 100644
--- a/encoding/protobuf/parse.go
+++ b/encoding/protobuf/parse.go
@@ -112,11 +112,9 @@
default:
failf(x.Position, "unexpected ';' in %q", str)
}
- p.file.Name = ast.NewIdent(p.shortPkgName)
case len(split) == 1:
p.shortPkgName = split[0]
- p.file.Name = ast.NewIdent(p.shortPkgName)
default:
failf(x.Position, "malformed go_package clause %s", str)
@@ -127,6 +125,10 @@
}
}
+ if name := p.shortName(); name != "" {
+ p.file.Decls = append(p.file.Decls, &ast.Package{Name: ast.NewIdent(name)})
+ }
+
for _, e := range d.Elements {
switch x := e.(type) {
case *proto.Import:
@@ -137,6 +139,7 @@
}
imports := &ast.ImportDecl{}
+ importIdx := len(p.file.Decls)
p.file.Decls = append(p.file.Decls, imports)
for _, e := range d.Elements {
@@ -159,7 +162,9 @@
}
if len(imports.Specs) == 0 {
- p.file.Decls = p.file.Decls[1:]
+ a := p.file.Decls
+ copy(a[importIdx:], a[importIdx+1:])
+ p.file.Decls = a[:len(a)-1]
}
return p, nil
@@ -209,7 +214,6 @@
if p.shortPkgName == "" && p.protoPkg != "" {
split := strings.Split(p.protoPkg, ".")
p.shortPkgName = split[len(split)-1]
- p.file.Name = ast.NewIdent(p.shortPkgName)
}
return p.shortPkgName
}