Implement std.trim for string (#684)

* Implement std.trim for string
This commit is contained in:
Tejesh Raut 2023-06-13 12:05:28 +00:00 committed by GitHub
parent 44538a33e1
commit fae841124f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
17 changed files with 34 additions and 4 deletions

View File

@ -1301,6 +1301,15 @@ func builtinEqualsIgnoreCase(i *interpreter, sv1, sv2 value) (value, error) {
return makeValueBoolean(strings.EqualFold(s1.getGoString(), s2.getGoString())), nil
}
func builtinTrim(i *interpreter, strv value) (value, error) {
str, err := i.getString(strv)
if err != nil {
return nil, err
}
sStr := str.getGoString()
return makeValueString(strings.TrimSpace(sStr)), nil
}
func base64DecodeGoBytes(i *interpreter, str string) ([]byte, error) {
strLen := len(str)
if strLen%4 != 0 {
@ -2407,6 +2416,7 @@ var funcBuiltins = buildBuiltinMap([]builtin{
&ternaryBuiltin{name: "strReplace", function: builtinStrReplace, params: ast.Identifiers{"str", "from", "to"}},
&unaryBuiltin{name: "isEmpty", function: builtinIsEmpty, params: ast.Identifiers{"str"}},
&binaryBuiltin{name: "equalsIgnoreCase", function: builtinEqualsIgnoreCase, params: ast.Identifiers{"str1", "str2"}},
&unaryBuiltin{name: "trim", function: builtinTrim, params: ast.Identifiers{"str"}},
&unaryBuiltin{name: "base64Decode", function: builtinBase64Decode, params: ast.Identifiers{"str"}},
&unaryBuiltin{name: "base64DecodeBytes", function: builtinBase64DecodeBytes, params: ast.Identifiers{"str"}},
&unaryBuiltin{name: "parseInt", function: builtinParseInt, params: ast.Identifiers{"str"}},

View File

@ -91,6 +91,7 @@ func prepareStdlib(g *typeGraph) {
"format": g.newSimpleFuncType(stringType, "str", "vals"),
"isEmpty": g.newSimpleFuncType(boolType, "str"),
"equalsIgnoreCase": g.newSimpleFuncType(boolType, "str1", "str2"),
"trim": g.newSimpleFuncType(stringType, "str"),
// TODO(sbarzowski) Fix when they match the documentation
"escapeStringBash": g.newSimpleFuncType(stringType, "str_"),
"escapeStringDollars": g.newSimpleFuncType(stringType, "str_"),
@ -145,10 +146,10 @@ func prepareStdlib(g *typeGraph) {
"maxArray": g.newFuncType(anyArrayType, []ast.Parameter{required("arr"), optional("keyF")}),
"contains": g.newSimpleFuncType(boolType, "arr", "elem"),
// TODO these need test cases written by someone who understands how to make them
"all": g.newSimpleFuncType(boolArrayType, "arr"),
"any": g.newSimpleFuncType(boolArrayType, "arr"),
"remove": g.newSimpleFuncType(anyArrayType, "arr", "elem"),
"removeAt": g.newSimpleFuncType(anyArrayType, "arr", "i"),
"all": g.newSimpleFuncType(boolArrayType, "arr"),
"any": g.newSimpleFuncType(boolArrayType, "arr"),
"remove": g.newSimpleFuncType(anyArrayType, "arr", "elem"),
"removeAt": g.newSimpleFuncType(anyArrayType, "arr", "i"),
// Sets

1
testdata/builtinTrim.golden vendored Normal file
View File

@ -0,0 +1 @@
"already trimmed string"

1
testdata/builtinTrim.jsonnet vendored Normal file
View File

@ -0,0 +1 @@
std.trim("already trimmed string")

0
testdata/builtinTrim.linter.golden vendored Normal file
View File

1
testdata/builtinTrim1.golden vendored Normal file
View File

@ -0,0 +1 @@
"string with spaces on both ends"

1
testdata/builtinTrim1.jsonnet vendored Normal file
View File

@ -0,0 +1 @@
std.trim(" string with spaces on both ends ")

0
testdata/builtinTrim1.linter.golden vendored Normal file
View File

1
testdata/builtinTrim2.golden vendored Normal file
View File

@ -0,0 +1 @@
"string with newline character at end"

1
testdata/builtinTrim2.jsonnet vendored Normal file
View File

@ -0,0 +1 @@
std.trim("string with newline character at end\n")

0
testdata/builtinTrim2.linter.golden vendored Normal file
View File

1
testdata/builtinTrim3.golden vendored Normal file
View File

@ -0,0 +1 @@
"string with tabs at end"

1
testdata/builtinTrim3.jsonnet vendored Normal file
View File

@ -0,0 +1 @@
std.trim("string with tabs at end\t\t")

0
testdata/builtinTrim3.linter.golden vendored Normal file
View File

10
testdata/builtinTrim4.golden vendored Normal file
View File

@ -0,0 +1,10 @@
RUNTIME ERROR: Unexpected type number, expected string
-------------------------------------------------
testdata/builtinTrim4:1:1-13 $
std.trim(10)
-------------------------------------------------
During evaluation

1
testdata/builtinTrim4.jsonnet vendored Normal file
View File

@ -0,0 +1 @@
std.trim(10)

0
testdata/builtinTrim4.linter.golden vendored Normal file
View File