Skip to content

Commit

Permalink
Improve error messages for named params
Browse files Browse the repository at this point in the history
  • Loading branch information
Jeffail committed Sep 5, 2021
1 parent dba8e11 commit 3a15dda
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 2 deletions.
13 changes: 11 additions & 2 deletions internal/bloblang/query/params.go
Original file line number Diff line number Diff line change
Expand Up @@ -380,16 +380,25 @@ func (p Params) processNamed(args map[string]interface{}) ([]interface{}, error)
return nil, fmt.Errorf("field %v: %w", param.Name, err)
}
}

if len(args) > 0 {
var unexpected []string
for k := range args {
unexpected = append(unexpected, k)
}
sort.Strings(unexpected)

optionsStr := ""
if len(missingParams) == 1 {
optionsStr = fmt.Sprintf(", did you mean %v?", missingParams[0])
} else if len(missingParams) > 1 {
optionsStr = fmt.Sprintf(", expected %v", strings.Join(missingParams, ", "))
}

if len(unexpected) == 1 {
return nil, fmt.Errorf("unknown parameter %v", unexpected[0])
return nil, fmt.Errorf("unknown parameter %v%v", unexpected[0], optionsStr)
}
return nil, fmt.Errorf("unknown parameters %v", strings.Join(unexpected, ", "))
return nil, fmt.Errorf("unknown parameters %v%v", strings.Join(unexpected, ", "), optionsStr)
}

if len(missingParams) == 1 {
Expand Down
20 changes: 20 additions & 0 deletions internal/bloblang/query/params_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -300,6 +300,26 @@ func TestParamsNamed(t *testing.T) {
"first": "foo", "second": 10, "third": false, "fourth": "bar"},
errContains: "unknown parameter fourth",
},
{
name: "typo arg missing field",
params: NewParams().
Add(ParamString("first", "")).
Add(ParamInt64("second", "")).
Add(ParamBool("third", "").Default(true)),
input: map[string]interface{}{
"first": "foo", "seconde": 10, "third": false},
errContains: "unknown parameter seconde, did you mean second?",
},
{
name: "typo arg missing fields",
params: NewParams().
Add(ParamString("first", "")).
Add(ParamInt64("second", "")).
Add(ParamBool("third", "")),
input: map[string]interface{}{
"first": "foo", "seconde": 10, "thirde": false},
errContains: "unknown parameters seconde, thirde, expected second, third",
},
{
name: "bad type args",
params: NewParams().
Expand Down

0 comments on commit 3a15dda

Please sign in to comment.