Name the quoted spelling when an unquoted layout holding a comma splits into extra args
This commit is contained in:
+21
-2
@@ -61,8 +61,8 @@ var builtins = map[string]builtin{
|
|||||||
cc := a[0]
|
cc := a[0]
|
||||||
return func(s *session, _ string, _ []string) string { return iban(s, cc) }
|
return func(s *session, _ string, _ []string) string { return iban(s, cc) }
|
||||||
}},
|
}},
|
||||||
"date": {arity: 3, check: dateArgs, prep: datePrep},
|
"date": {arity: -1, check: dateArgs, prep: datePrep},
|
||||||
"time": {arity: 1, check: timeArg, prep: timePrep},
|
"time": {arity: -1, check: timeArg, prep: timePrep},
|
||||||
"calc": {arity: -1, check: checkCalc, prep: calcPrep, operands: calcOperands},
|
"calc": {arity: -1, check: checkCalc, prep: calcPrep, operands: calcOperands},
|
||||||
"lowercase": {arity: 1, check: transformArg, prep: transformPrep(strings.ToLower), operands: transformOperand},
|
"lowercase": {arity: 1, check: transformArg, prep: transformPrep(strings.ToLower), operands: transformOperand},
|
||||||
"uppercase": {arity: 1, check: transformArg, prep: transformPrep(strings.ToUpper), operands: transformOperand},
|
"uppercase": {arity: 1, check: transformArg, prep: transformPrep(strings.ToUpper), operands: transformOperand},
|
||||||
@@ -503,7 +503,23 @@ func layoutOf(a string) string {
|
|||||||
return layout
|
return layout
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// layoutArity checks a call that ends in a layout takes n args; an unquoted layout
|
||||||
|
// carrying a comma splits into more, so the error names its quoted spelling.
|
||||||
|
func layoutArity(name string, n int, a []string) error {
|
||||||
|
if len(a) == n {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
hint := ""
|
||||||
|
if len(a) > n {
|
||||||
|
hint = fmt.Sprintf("; a layout holding a comma is quoted: '%s'", strings.Join(a[n-1:], ", "))
|
||||||
|
}
|
||||||
|
return fmt.Errorf("%s takes %d args, got %d%s", name, n, len(a), hint)
|
||||||
|
}
|
||||||
|
|
||||||
func dateArgs(_ map[string]node, a []string) error {
|
func dateArgs(_ map[string]node, a []string) error {
|
||||||
|
if err := layoutArity("date", 3, a); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
from, err := time.Parse(dayLayout, a[0])
|
from, err := time.Parse(dayLayout, a[0])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("date(from,to,layout): from %q is not a YYYY-MM-DD date", a[0])
|
return fmt.Errorf("date(from,to,layout): from %q is not a YYYY-MM-DD date", a[0])
|
||||||
@@ -520,6 +536,9 @@ func dateArgs(_ map[string]node, a []string) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func timeArg(_ map[string]node, a []string) error {
|
func timeArg(_ map[string]node, a []string) error {
|
||||||
|
if err := layoutArity("time", 1, a); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
layout, err := layoutArg(a[0])
|
layout, err := layoutArg(a[0])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
|||||||
Reference in New Issue
Block a user