forked from mirror/pkger
support const expressions
This commit is contained in:
parent
d97c60c346
commit
c7908c9bfc
|
@ -33,16 +33,39 @@ func (p *ParsedSource) Parse() error {
|
||||||
return p.err
|
return p.err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *ParsedSource) value(node ast.Node) (string, error) {
|
func (p *ParsedSource) valueIdent(node *ast.Ident) (s string) {
|
||||||
var s string
|
s = node.Name
|
||||||
|
if node.Obj.Kind != ast.Con {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
// As per ast package a Con object is always a *ValueSpec,
|
||||||
|
// but double-checking to avoid panics
|
||||||
|
if x, ok := node.Obj.Decl.(*ast.ValueSpec); ok {
|
||||||
|
// The const var can be defined inline with other vars,
|
||||||
|
// as in `const a, b = "a", "b"`.
|
||||||
|
for i, v := range x.Names {
|
||||||
|
if v.Name == node.Name {
|
||||||
|
s = p.valueNode(x.Values[i])
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *ParsedSource) valueNode(node ast.Node) string {
|
||||||
|
var s string
|
||||||
switch x := node.(type) {
|
switch x := node.(type) {
|
||||||
case *ast.BasicLit:
|
case *ast.BasicLit:
|
||||||
s = x.Value
|
s = x.Value
|
||||||
case *ast.Ident:
|
case *ast.Ident:
|
||||||
s = x.Name
|
s = p.valueIdent(x)
|
||||||
|
}
|
||||||
|
return s
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (p *ParsedSource) value(node ast.Node) (string, error) {
|
||||||
|
s := p.valueNode(node)
|
||||||
return strconv.Unquote(s)
|
return strconv.Unquote(s)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -18,12 +18,16 @@ func main() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const (
|
||||||
|
unused, pathAsset = "", "/assets"
|
||||||
|
)
|
||||||
|
|
||||||
func run() error {
|
func run() error {
|
||||||
if err := actions.WalkTemplates(os.Stdout); err != nil {
|
if err := actions.WalkTemplates(os.Stdout); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
err := pkger.Walk("/assets", func(path string, info os.FileInfo, err error) error {
|
err := pkger.Walk(pathAsset, func(path string, info os.FileInfo, err error) error {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue