Skip to content

Commit

Permalink
fix: default selection and comment interpolation
Browse files Browse the repository at this point in the history
  • Loading branch information
23doors committed Jul 27, 2021
1 parent da297ff commit d79abc9
Show file tree
Hide file tree
Showing 2 changed files with 53 additions and 45 deletions.
87 changes: 45 additions & 42 deletions pkg/config/vars.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package config

import (
"bytes"
"fmt"
"strings"

Expand Down Expand Up @@ -45,58 +46,60 @@ func (e *YAMLEvaluator) encode(val interface{}) ([]byte, error) {
}

func (e *YAMLEvaluator) Expand(input []byte) ([]byte, error) {
var out []byte

done := 0
line := 0
lineStart := 0
tokenStart := -1
ll := len(input)

var token string

for i := 0; i < ll; i++ {
switch {
case input[i] == '\n':
line++

lineStart = i + 1

continue
in := bytes.Split(input, []byte{'\n'})
out := make([][]byte, len(in))

case tokenStart == -1:
if i+1 < ll && input[i] == '$' && input[i+1] == '{' {
i++
tokenStart = i
}

case input[i] == '}':
token = string(input[tokenStart+1 : i])
if token == "" {
return nil, fmt.Errorf("[%d:%d] empty expansion found", line+1, tokenStart-lineStart)
}
for l, line := range in {
ll := len(line)
done := 0

out = append(out, input[done:tokenStart-1]...)
lineTrimmed := bytes.TrimSpace(line)
if len(lineTrimmed) > 0 && lineTrimmed[0] == '#' {
out[l] = line

val, ok := e.getKey(token)
if !ok {
return nil, fmt.Errorf("[%d:%d] expansion value '%s' could not be evaluated", line+1, tokenStart-lineStart, token)
}
continue
}

valOut, err := e.encode(val)
if err != nil {
return nil, fmt.Errorf("[%d:%d] expansion value '%s' could not be marshaled\nerror: %w",
line+1, tokenStart-lineStart, token, err)
for c := range line {
switch {
case tokenStart == -1:
if c+1 < ll && line[c] == '$' && line[c+1] == '{' {
c++
tokenStart = c
}

case line[c] == '}':
token = string(line[tokenStart+1 : c])
if token == "" {
return nil, fmt.Errorf("[%d:%d] empty expansion found", l+1, tokenStart)
}

out[l] = append(out[l], line[done:tokenStart-1]...)

val, ok := e.getKey(token)
if !ok {
return nil, fmt.Errorf("[%d:%d] expansion value '%s' could not be evaluated", l+1, tokenStart, token)
}

valOut, err := e.encode(val)
if err != nil {
return nil, fmt.Errorf("[%d:%d] expansion value '%s' could not be marshaled\nerror: %w",
l+1, tokenStart, token, err)
}

out[l] = append(out[l], valOut...)

done = c + 1
tokenStart = -1
}

out = append(out, valOut...)

done = i + 1
tokenStart = -1
}
}

out = append(out, input[done:]...)
out[l] = append(out[l], line[done:]...)
}

return out, nil
return bytes.Join(out, []byte{'\n'}), nil
}
11 changes: 8 additions & 3 deletions pkg/plugins/client/stream.go
Original file line number Diff line number Diff line change
Expand Up @@ -184,11 +184,16 @@ func (s *SenderStream) handleResponse(res *ResponseWithHeader) (handled bool, er
case *plugin_go.PromptSelect:
var input string

err = survey.AskOne(&survey.Select{
sel := &survey.Select{
Message: r.Message,
Options: r.Options,
Default: r.Default,
}, &input)
}

if r.Default != "" {
sel.Default = r.Default
}

err = survey.AskOne(sel, &input)
if err != nil {
return true, err
}
Expand Down

0 comments on commit d79abc9

Please sign in to comment.