Skip to content

Commit

Permalink
Simplify language version check in Regex generator (dotnet#81678)
Browse files Browse the repository at this point in the history
* Simplify language version check in Regex generator

* Fix build
  • Loading branch information
Youssef1313 authored Feb 6, 2023
1 parent 4345b1b commit ecd71ac
Showing 1 changed file with 5 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ public partial class RegexGenerator : IIncrementalGenerator
"#pragma warning disable CS0219 // Variable assigned but never used",
};

private record struct CompilationData(bool AllowUnsafe, bool CheckOverflow);
private record struct CompilationData(bool AllowUnsafe, bool CheckOverflow, LanguageVersion LanguageVersion);

public void Initialize(IncrementalGeneratorInitializationContext context)
{
Expand All @@ -46,7 +46,7 @@ public void Initialize(IncrementalGeneratorInitializationContext context)
context.CompilationProvider
.Select((x, _) =>
x.Options is CSharpCompilationOptions options ?
new CompilationData(options.AllowUnsafe, options.CheckOverflow) :
new CompilationData(options.AllowUnsafe, options.CheckOverflow, ((CSharpCompilation)x).LanguageVersion) :
default);

// Produces one entry per generated regex. This may be:
Expand Down Expand Up @@ -78,7 +78,7 @@ x.Options is CSharpCompilationOptions options ?
// If we're unable to generate a full implementation for this regex, report a diagnostic.
// We'll still output a limited implementation that just caches a new Regex(...).
if (!SupportsCodeGeneration(regexMethod, out string? reason))
if (!SupportsCodeGeneration(regexMethod, methodOrDiagnosticAndCompilationData.Right.LanguageVersion, out string? reason))
{
return (regexMethod, reason, Diagnostic.Create(DiagnosticDescriptors.LimitedSourceGeneration, regexMethod.MethodSyntax.GetLocation()));
}
Expand Down Expand Up @@ -271,9 +271,9 @@ x.Options is CSharpCompilationOptions options ?
// It also provides a human-readable string to explain the reason. It will be emitted by the source generator
// as a comment into the C# code, hence there's no need to localize.
/// </remarks>
private static bool SupportsCodeGeneration(RegexMethod method, [NotNullWhen(false)] out string? reason)
private static bool SupportsCodeGeneration(RegexMethod method, LanguageVersion languageVersion, [NotNullWhen(false)] out string? reason)
{
if (method.MethodSyntax.SyntaxTree.Options is CSharpParseOptions { LanguageVersion: <= LanguageVersion.CSharp10 })
if (languageVersion <= LanguageVersion.CSharp10)
{
reason = "the language version must be C# 11 or higher.";
return false;
Expand Down

0 comments on commit ecd71ac

Please sign in to comment.