From a8c393d599f89645e2ea7b57445cdc7a5638f8f4 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 11 Oct 2025 16:10:00 +0000 Subject: [PATCH 1/6] Initial plan From 25c081736865551796065985966d426e22aa5156 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 11 Oct 2025 16:37:44 +0000 Subject: [PATCH 2/6] Fix multiline pattern preservation in GeneratedRegex fixer Co-authored-by: stephentoub <2642209+stephentoub@users.noreply.github.com> --- .../gen/UpgradeToGeneratedRegexCodeFixer.cs | 11 +++- .../UpgradeToGeneratedRegexAnalyzerTests.cs | 64 +++++++++++++++++++ 2 files changed, 73 insertions(+), 2 deletions(-) diff --git a/src/libraries/System.Text.RegularExpressions/gen/UpgradeToGeneratedRegexCodeFixer.cs b/src/libraries/System.Text.RegularExpressions/gen/UpgradeToGeneratedRegexCodeFixer.cs index aa3629a882310e..4267d0bc4070a7 100644 --- a/src/libraries/System.Text.RegularExpressions/gen/UpgradeToGeneratedRegexCodeFixer.cs +++ b/src/libraries/System.Text.RegularExpressions/gen/UpgradeToGeneratedRegexCodeFixer.cs @@ -295,9 +295,9 @@ static RegexOptions GetRegexOptionsFromArgument(ImmutableArray Date: Sat, 11 Oct 2025 23:11:28 +0000 Subject: [PATCH 3/6] Use IndexOfAny instead of multiple Contains calls Co-authored-by: stephentoub <2642209+stephentoub@users.noreply.github.com> --- .../gen/UpgradeToGeneratedRegexCodeFixer.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libraries/System.Text.RegularExpressions/gen/UpgradeToGeneratedRegexCodeFixer.cs b/src/libraries/System.Text.RegularExpressions/gen/UpgradeToGeneratedRegexCodeFixer.cs index 4267d0bc4070a7..692ca205144df3 100644 --- a/src/libraries/System.Text.RegularExpressions/gen/UpgradeToGeneratedRegexCodeFixer.cs +++ b/src/libraries/System.Text.RegularExpressions/gen/UpgradeToGeneratedRegexCodeFixer.cs @@ -317,7 +317,7 @@ static bool ShouldUseVerbatimString(string str) { // Use verbatim string syntax if the string contains backslashes or newlines // to preserve readability, especially for patterns with RegexOptions.IgnorePatternWhitespace - return str.Contains('\\') || str.Contains('\n') || str.Contains('\r'); + return str.IndexOfAny(['\\', '\n', '\r']) >= 0; } static string Literal(string stringifiedRegexOptions) From 1f0a9b5c9666d92e26b6c05c897dbd90546ffcec Mon Sep 17 00:00:00 2001 From: Tarek Mahmoud Sayed <10833894+tarekgh@users.noreply.github.com> Date: Fri, 17 Oct 2025 11:34:34 -0700 Subject: [PATCH 4/6] restore the method specifier --- .../gen/UpgradeToGeneratedRegexCodeFixer.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libraries/System.Text.RegularExpressions/gen/UpgradeToGeneratedRegexCodeFixer.cs b/src/libraries/System.Text.RegularExpressions/gen/UpgradeToGeneratedRegexCodeFixer.cs index 133368cec256ad..c62ddded663815 100644 --- a/src/libraries/System.Text.RegularExpressions/gen/UpgradeToGeneratedRegexCodeFixer.cs +++ b/src/libraries/System.Text.RegularExpressions/gen/UpgradeToGeneratedRegexCodeFixer.cs @@ -401,7 +401,7 @@ private static RegexOptions GetRegexOptionsFromArgument(ImmutableArray Date: Fri, 17 Oct 2025 11:38:04 -0700 Subject: [PATCH 5/6] Restore method specifier --- .../gen/UpgradeToGeneratedRegexCodeFixer.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libraries/System.Text.RegularExpressions/gen/UpgradeToGeneratedRegexCodeFixer.cs b/src/libraries/System.Text.RegularExpressions/gen/UpgradeToGeneratedRegexCodeFixer.cs index c62ddded663815..3075ea0811f5e5 100644 --- a/src/libraries/System.Text.RegularExpressions/gen/UpgradeToGeneratedRegexCodeFixer.cs +++ b/src/libraries/System.Text.RegularExpressions/gen/UpgradeToGeneratedRegexCodeFixer.cs @@ -408,7 +408,7 @@ private static bool ShouldUseVerbatimString(string str) return str.IndexOfAny(['\\', '\n', '\r']) >= 0; } - static string Literal(string stringifiedRegexOptions) + private static string Literal(string stringifiedRegexOptions) { if (int.TryParse(stringifiedRegexOptions, NumberStyles.Integer, CultureInfo.InvariantCulture, out int options)) { From cd60f06832f284d35f80c6a498640919942b6491 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 23 Oct 2025 18:22:35 +0000 Subject: [PATCH 6/6] Fix tests to use property syntax instead of method syntax Co-authored-by: stephentoub <2642209+stephentoub@users.noreply.github.com> --- .../UpgradeToGeneratedRegexAnalyzerTests.cs | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/libraries/System.Text.RegularExpressions/tests/FunctionalTests/UpgradeToGeneratedRegexAnalyzerTests.cs b/src/libraries/System.Text.RegularExpressions/tests/FunctionalTests/UpgradeToGeneratedRegexAnalyzerTests.cs index 91ebb77f9bc518..ac63829ade7d13 100644 --- a/src/libraries/System.Text.RegularExpressions/tests/FunctionalTests/UpgradeToGeneratedRegexAnalyzerTests.cs +++ b/src/libraries/System.Text.RegularExpressions/tests/FunctionalTests/UpgradeToGeneratedRegexAnalyzerTests.cs @@ -1358,12 +1358,10 @@ static class Class static partial class Class { - private static Regex r = MyRegex(); - [GeneratedRegex(@"a b c", RegexOptions.IgnorePatternWhitespace)] - private static partial Regex MyRegex(); + private static partial Regex r { get; } } """; @@ -1391,12 +1389,11 @@ static class Class static partial class Class { private const string foo = "bar"; - private static Regex r1 = MyRegex(); [GeneratedRegex(@"a bar b c", RegexOptions.IgnorePatternWhitespace)] - private static partial Regex MyRegex(); + private static partial Regex r1 { get; } } """;