Skip to content

Commit

Permalink
feat: implement std.isEqualIgnoreCase
Browse files Browse the repository at this point in the history
  • Loading branch information
rohitjangid committed May 4, 2023
1 parent 868d9c6 commit 98f1145
Show file tree
Hide file tree
Showing 8 changed files with 36 additions and 18 deletions.
13 changes: 13 additions & 0 deletions builtins.go
Original file line number Diff line number Diff line change
Expand Up @@ -1289,6 +1289,18 @@ func builtinIsEmpty(i *interpreter, strv value) (value, error) {
return makeValueBoolean(len(sStr) == 0), nil
}

func builtinEqualsIgnoreCase(i *interpreter, sv1, sv2 value) (value, error) {
s1, err := i.getString(sv1)
if err != nil {
return nil, err
}
s2, err := i.getString(sv2)
if err != nil {
return nil, err
}
return makeValueBoolean(strings.EqualFold(s1.getGoString(), s2.getGoString())), nil
}

func base64DecodeGoBytes(i *interpreter, str string) ([]byte, error) {
strLen := len(str)
if strLen%4 != 0 {
Expand Down Expand Up @@ -2285,6 +2297,7 @@ var funcBuiltins = buildBuiltinMap([]builtin{
&ternaryBuiltin{name: "splitLimit", function: builtinSplitLimit, params: ast.Identifiers{"str", "c", "maxsplits"}},
&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: "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"}},
Expand Down
37 changes: 19 additions & 18 deletions linter/internal/types/stdlib.go
Original file line number Diff line number Diff line change
Expand Up @@ -72,24 +72,25 @@ func prepareStdlib(g *typeGraph) {

// String Manipulation

"toString": g.newSimpleFuncType(stringType, "a"),
"codepoint": g.newSimpleFuncType(numberType, "str"),
"char": g.newSimpleFuncType(stringType, "n"),
"substr": g.newSimpleFuncType(stringType, "str", "from", "len"),
"findSubstr": g.newSimpleFuncType(numberArrayType, "pat", "str"),
"startsWith": g.newSimpleFuncType(boolType, "a", "b"),
"endsWith": g.newSimpleFuncType(boolType, "a", "b"),
"stripChars": g.newSimpleFuncType(stringType, "str", "chars"),
"lstripChars": g.newSimpleFuncType(stringType, "str", "chars"),
"rstripChars": g.newSimpleFuncType(stringType, "str", "chars"),
"split": g.newSimpleFuncType(arrayOfString, "str", "c"),
"splitLimit": g.newSimpleFuncType(arrayOfString, "str", "c", "maxsplits"),
"strReplace": g.newSimpleFuncType(stringType, "str", "from", "to"),
"asciiUpper": g.newSimpleFuncType(stringType, "str"),
"asciiLower": g.newSimpleFuncType(stringType, "str"),
"stringChars": g.newSimpleFuncType(stringType, "str"),
"format": g.newSimpleFuncType(stringType, "str", "vals"),
"isEmpty": g.newSimpleFuncType(boolType, "str"),
"toString": g.newSimpleFuncType(stringType, "a"),
"codepoint": g.newSimpleFuncType(numberType, "str"),
"char": g.newSimpleFuncType(stringType, "n"),
"substr": g.newSimpleFuncType(stringType, "str", "from", "len"),
"findSubstr": g.newSimpleFuncType(numberArrayType, "pat", "str"),
"startsWith": g.newSimpleFuncType(boolType, "a", "b"),
"endsWith": g.newSimpleFuncType(boolType, "a", "b"),
"stripChars": g.newSimpleFuncType(stringType, "str", "chars"),
"lstripChars": g.newSimpleFuncType(stringType, "str", "chars"),
"rstripChars": g.newSimpleFuncType(stringType, "str", "chars"),
"split": g.newSimpleFuncType(arrayOfString, "str", "c"),
"splitLimit": g.newSimpleFuncType(arrayOfString, "str", "c", "maxsplits"),
"strReplace": g.newSimpleFuncType(stringType, "str", "from", "to"),
"asciiUpper": g.newSimpleFuncType(stringType, "str"),
"asciiLower": g.newSimpleFuncType(stringType, "str"),
"stringChars": g.newSimpleFuncType(stringType, "str"),
"format": g.newSimpleFuncType(stringType, "str", "vals"),
"isEmpty": g.newSimpleFuncType(boolType, "str"),
"equalsIgnoreCase": g.newSimpleFuncType(boolType, "str1", "str2"),
// TODO(sbarzowski) Fix when they match the documentation
"escapeStringBash": g.newSimpleFuncType(stringType, "str_"),
"escapeStringDollars": g.newSimpleFuncType(stringType, "str_"),
Expand Down
1 change: 1 addition & 0 deletions testdata/builtinEqualsIgnoreCase.golden
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
true
1 change: 1 addition & 0 deletions testdata/builtinEqualsIgnoreCase.jsonnet
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
std.isEqualIgnoreCase("foo", "FOO")
Empty file.
1 change: 1 addition & 0 deletions testdata/builtinEqualsIgnoreCase2.golden
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
false
1 change: 1 addition & 0 deletions testdata/builtinEqualsIgnoreCase2.jsonnet
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
std.isEqualIgnoreCase("foo", "bar")
Empty file.

0 comments on commit 98f1145

Please sign in to comment.