Skip to content

Commit 2c29482

Browse files
committed
Update analyzer for C# 14.0 language version support
Renamed RequiresCSharpLanguageVersionPreviewAnalyzer to RequiresCSharpLanguageVersion14OrPreviewAnalyzer and updated logic to check for C# 14.0 or preview language versions. Adjusted generator and unit tests to reference the new analyzer and updated version checks for compatibility with Roslyn 5.0.0 or greater.
1 parent 9d6c470 commit 2c29482

File tree

4 files changed

+15
-9
lines changed

4 files changed

+15
-9
lines changed

src/CommunityToolkit.Mvvm.SourceGenerators/CommunityToolkit.Mvvm.SourceGenerators.projitems

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@
5757
<Compile Include="$(MSBuildThisFileDirectory)Diagnostics\Analyzers\FieldWithOrphanedDependentObservablePropertyAttributesAnalyzer.cs" />
5858
<Compile Include="$(MSBuildThisFileDirectory)Diagnostics\Analyzers\FieldReferenceForObservablePropertyFieldAnalyzer.cs" />
5959
<Compile Include="$(MSBuildThisFileDirectory)Diagnostics\Analyzers\UnsupportedRoslynVersionForPartialPropertyAnalyzer.cs" />
60-
<Compile Include="$(MSBuildThisFileDirectory)Diagnostics\Analyzers\RequiresCSharpLanguageVersionPreviewAnalyzer.cs" />
60+
<Compile Include="$(MSBuildThisFileDirectory)Diagnostics\Analyzers\RequiresCSharpLanguageVersion14OrPreviewAnalyzer.cs" />
6161
<Compile Include="$(MSBuildThisFileDirectory)Diagnostics\Analyzers\InvalidPropertyLevelObservablePropertyAttributeAnalyzer.cs" />
6262
<Compile Include="$(MSBuildThisFileDirectory)Diagnostics\Analyzers\UseObservablePropertyOnPartialPropertyAnalyzer.cs" />
6363
<Compile Include="$(MSBuildThisFileDirectory)Diagnostics\Analyzers\UnsupportedCSharpLanguageVersionAnalyzer.cs" />

src/CommunityToolkit.Mvvm.SourceGenerators/ComponentModel/ObservablePropertyGenerator.Execute.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,8 +85,10 @@ public static bool IsCandidateValidForCompilation(MemberDeclarationSyntax node,
8585
// check. When we add Roslyn 18.0 support, we can also update this check to check for at least C# 14.
8686
if (node is PropertyDeclarationSyntax)
8787
{
88-
#if ROSLYN_4_12_0_OR_GREATER
89-
return semanticModel.Compilation.HasLanguageVersionGreaterThan(LanguageVersion.CSharp13) || semanticModel.Compilation.IsLanguageVersionPreview();
88+
#if ROSLYN_5_0_0_OR_GREATER
89+
return semanticModel.Compilation.HasLanguageVersionAtLeastEqualTo(LanguageVersion.CSharp14);
90+
#elif ROSLYN_4_12_0_OR_GREATER
91+
return semanticModel.Compilation.IsLanguageVersionPreview();
9092
#else
9193
return false;
9294
#endif
Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ namespace CommunityToolkit.Mvvm.SourceGenerators;
1818
/// A diagnostic analyzer that generates errors when a property using <c>[ObservableProperty]</c> on a partial property is in a project with the C# language version not set to 14.0 or 'preview'.
1919
/// </summary>
2020
[DiagnosticAnalyzer(LanguageNames.CSharp)]
21-
public sealed class RequiresCSharpLanguageVersionPreviewAnalyzer : DiagnosticAnalyzer
21+
public sealed class RequiresCSharpLanguageVersion14OrPreviewAnalyzer : DiagnosticAnalyzer
2222
{
2323
/// <inheritdoc/>
2424
public override ImmutableArray<DiagnosticDescriptor> SupportedDiagnostics { get; } = [CSharpLanguageVersionIsNot14OrPreviewForObservableProperty];
@@ -32,7 +32,11 @@ public override void Initialize(AnalysisContext context)
3232
context.RegisterCompilationStartAction(static context =>
3333
{
3434
// If the language version is set to preview or if we are set to at least C# 14.0, we'll never emit diagnostics
35+
#if ROSLYN_5_0_0_OR_GREATER
36+
if (context.Compilation.HasLanguageVersionAtLeastEqualTo(LanguageVersion.CSharp14))
37+
#else
3538
if (context.Compilation.IsLanguageVersionPreview())
39+
#endif
3640
{
3741
return;
3842
}

tests/CommunityToolkit.Mvvm.SourceGenerators.Roslyn4120.UnitTests/Test_SourceGeneratorsDiagnostics.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public partial class SampleViewModel : ObservableObject
2828
}
2929
""";
3030

31-
await VerifyAnalyzerDiagnosticsAndSuccessfulGeneration<RequiresCSharpLanguageVersionPreviewAnalyzer>(source, LanguageVersion.CSharp12);
31+
await VerifyAnalyzerDiagnosticsAndSuccessfulGeneration<RequiresCSharpLanguageVersion14OrPreviewAnalyzer>(source, LanguageVersion.CSharp12);
3232
}
3333

3434
[TestMethod]
@@ -47,7 +47,7 @@ public partial class SampleViewModel : ObservableObject
4747
}
4848
""";
4949

50-
await CSharpAnalyzerWithLanguageVersionTest<RequiresCSharpLanguageVersionPreviewAnalyzer>.VerifyAnalyzerAsync(
50+
await CSharpAnalyzerWithLanguageVersionTest<RequiresCSharpLanguageVersion14OrPreviewAnalyzer>.VerifyAnalyzerAsync(
5151
source,
5252
LanguageVersion.CSharp12,
5353

@@ -73,7 +73,7 @@ public partial class SampleViewModel : ObservableObject
7373
}
7474
""";
7575

76-
await CSharpAnalyzerWithLanguageVersionTest<RequiresCSharpLanguageVersionPreviewAnalyzer>.VerifyAnalyzerAsync(
76+
await CSharpAnalyzerWithLanguageVersionTest<RequiresCSharpLanguageVersion14OrPreviewAnalyzer>.VerifyAnalyzerAsync(
7777
source,
7878
LanguageVersion.CSharp13,
7979

@@ -97,7 +97,7 @@ public partial class SampleViewModel : ObservableObject
9797
}
9898
""";
9999

100-
await VerifyAnalyzerDiagnosticsAndSuccessfulGeneration<RequiresCSharpLanguageVersionPreviewAnalyzer>(source, languageVersion: LanguageVersion.Preview);
100+
await VerifyAnalyzerDiagnosticsAndSuccessfulGeneration<RequiresCSharpLanguageVersion14OrPreviewAnalyzer>(source, languageVersion: LanguageVersion.Preview);
101101
}
102102

103103
[TestMethod]
@@ -116,7 +116,7 @@ public partial class SampleViewModel : ObservableObject
116116
}
117117
""";
118118

119-
await CSharpAnalyzerWithLanguageVersionTest<RequiresCSharpLanguageVersionPreviewAnalyzer>.VerifyAnalyzerAsync(
119+
await CSharpAnalyzerWithLanguageVersionTest<RequiresCSharpLanguageVersion14OrPreviewAnalyzer>.VerifyAnalyzerAsync(
120120
source,
121121
LanguageVersion.Preview,
122122

0 commit comments

Comments
 (0)