diff options
| author | Paul Chaignon <paul.chaignon@gmail.com> | 2023-11-19 18:57:51 +0100 |
|---|---|---|
| committer | Aleksandr Nogikh <nogikh@google.com> | 2023-12-05 13:40:28 +0000 |
| commit | ada1d56f0f3c555123547e44695695f7d284b6d6 (patch) | |
| tree | 10654551ca4a3f4bd7c49932486b1fde70f65561 /pkg/compiler/compiler.go | |
| parent | 3e9d168edd9e40138b295bb7d8adc92fa9430e78 (diff) | |
compiler: support nested string flags definitions
This commit adds support for flags definitions such as:
flags1 = "string1", "string2"
flags2 = flags1, "string3"
Signed-off-by: Paul Chaignon <paul.chaignon@gmail.com>
Diffstat (limited to 'pkg/compiler/compiler.go')
| -rw-r--r-- | pkg/compiler/compiler.go | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/pkg/compiler/compiler.go b/pkg/compiler/compiler.go index 66da5e2b4..34b8b1fd6 100644 --- a/pkg/compiler/compiler.go +++ b/pkg/compiler/compiler.go @@ -361,6 +361,7 @@ func arrayContains(a []string, v string) bool { func (comp *compiler) flattenFlags() { comp.flattenIntFlags() + comp.flattenStrFlags() for _, n := range comp.desc.Nodes { switch flags := n.(type) { @@ -371,6 +372,11 @@ func (comp *compiler) flattenFlags() { if f, ok := comp.intFlags[flags.Name.Name]; ok { flags.Values = f.Values } + case *ast.StrFlags: + // Same as for intFlags above. + if f, ok := comp.strFlags[flags.Name.Name]; ok { + flags.Values = f.Values + } } } } @@ -384,6 +390,15 @@ func (comp *compiler) flattenIntFlags() { } } +func (comp *compiler) flattenStrFlags() { + for name, flags := range comp.strFlags { + if err := recurFlattenFlags[*ast.StrFlags, *ast.String](comp, name, flags, comp.strFlags, + map[string]bool{}); err != nil { + comp.error(flags.Pos, "%v", err) + } + } +} + func recurFlattenFlags[F ast.Flags[V], V ast.FlagValue](comp *compiler, name string, flags F, allFlags map[string]F, visitedFlags map[string]bool) error { if _, visited := visitedFlags[name]; visited { |
