From 92c284bb8d8d155db5bbe1c2d7d8af987f0a92df Mon Sep 17 00:00:00 2001 From: Justin Magaram Date: Sat, 10 May 2025 15:14:45 -0700 Subject: [PATCH] Add RegExp.flags external and corresponding tests --- runtime/Stdlib_RegExp.res | 1 + runtime/Stdlib_RegExp.resi | 15 +++++++++++++++ tests/tests/src/core/Core_RegExpTest.res | 18 ++++++++++++++++++ tests/tests/src/core/Core_TestSuite.res | 1 + 4 files changed, 35 insertions(+) create mode 100644 tests/tests/src/core/Core_RegExpTest.res diff --git a/runtime/Stdlib_RegExp.res b/runtime/Stdlib_RegExp.res index ff24abab95..94cde1ea2f 100644 --- a/runtime/Stdlib_RegExp.res +++ b/runtime/Stdlib_RegExp.res @@ -22,5 +22,6 @@ module Result = { @get external source: t => string = "source" @get external sticky: t => bool = "sticky" @get external unicode: t => bool = "unicode" +@get external flags: t => string = "flags" external ignore: t => unit = "%ignore" diff --git a/runtime/Stdlib_RegExp.resi b/runtime/Stdlib_RegExp.resi index 5415ab1d3a..79a351b888 100644 --- a/runtime/Stdlib_RegExp.resi +++ b/runtime/Stdlib_RegExp.resi @@ -298,6 +298,20 @@ Console.log(regexp2->RegExp.unicode) // Logs `true`, since `u` is set @get external unicode: t => bool = "unicode" +/** +`flags(regexp)` returns a string consisting of all the flags set on this `RegExp`. + +See [`RegExp.flags`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/flags) on MDN. + +## Examples +```rescript +let regexp = RegExp.fromString("\\w+", ~flags="gi") +Console.log(regexp->RegExp.flags) // Logs "gi", all the flags set on the RegExp +``` +*/ +@get +external flags: t => string = "flags" + /** `ignore(regExp)` ignores the provided regExp and returns unit. @@ -305,3 +319,4 @@ external unicode: t => bool = "unicode" without having to store or process it further. */ external ignore: t => unit = "%ignore" +// diff --git a/tests/tests/src/core/Core_RegExpTest.res b/tests/tests/src/core/Core_RegExpTest.res new file mode 100644 index 0000000000..dd1c844f7c --- /dev/null +++ b/tests/tests/src/core/Core_RegExpTest.res @@ -0,0 +1,18 @@ +// Test for RegExp.flags +Test.run( + __POS_OF__("RegExp.flags basic"), + RegExp.fromStringWithFlags("\\w+", ~flags="gi")->RegExp.flags, + eq, + "gi", +) + +// Test for alphabetical sorting of flags +Test.run( + __POS_OF__("RegExp.flags sorting"), + RegExp.fromStringWithFlags("\\w+", ~flags="igd")->RegExp.flags, + eq, + "dgi", +) + +// Test with no flags +Test.run(__POS_OF__("RegExp.flags empty"), RegExp.fromString("\\w+")->RegExp.flags, eq, "") diff --git a/tests/tests/src/core/Core_TestSuite.res b/tests/tests/src/core/Core_TestSuite.res index e048a3bd56..9b9c997f7e 100644 --- a/tests/tests/src/core/Core_TestSuite.res +++ b/tests/tests/src/core/Core_TestSuite.res @@ -11,3 +11,4 @@ include Core_JsonTests include Core_NullableTests include Core_DictTests include Core_IteratorTests +include Core_RegExpTest