diff --git a/TUnit.Core.SourceGenerator/CodeGenerators/LanguageVersionCheckGenerator.cs b/TUnit.Core.SourceGenerator/CodeGenerators/LanguageVersionCheckGenerator.cs new file mode 100644 index 0000000000..48a1ff8ab1 --- /dev/null +++ b/TUnit.Core.SourceGenerator/CodeGenerators/LanguageVersionCheckGenerator.cs @@ -0,0 +1,42 @@ +using Microsoft.CodeAnalysis; +using Microsoft.CodeAnalysis.CSharp; + +namespace TUnit.Core.SourceGenerator; + +[Generator] +public class LanguageVersionCheckGenerator : IIncrementalGenerator +{ + public void Initialize(IncrementalGeneratorInitializationContext context) + { + var settings = context.CompilationProvider + .Select((c, _) => + { + LanguageVersion? csharpVersion = c is CSharpCompilation comp + ? comp.LanguageVersion + : null; + + return csharpVersion; + }); + + context.RegisterSourceOutput(settings, static (sourceProductionContext, languageVersion) => + { + if (languageVersion is null) + { + return; + } + + if((int)languageVersion.Value < 1200) + { + sourceProductionContext.ReportDiagnostic(Diagnostic.Create( + new DiagnosticDescriptor( + "TUNIT_LANG_001", + "Language Version Check", + "TUnit requires C# 12 or higher when using Source Generation.", + "Usage", + DiagnosticSeverity.Error, + true), + Location.None)); + } + }); + } +} \ No newline at end of file diff --git a/TUnit.Engine/TUnit.Engine.props b/TUnit.Engine/TUnit.Engine.props index bc9b6a2c9b..3bf80f5228 100644 --- a/TUnit.Engine/TUnit.Engine.props +++ b/TUnit.Engine/TUnit.Engine.props @@ -7,7 +7,6 @@ true true false - latest Exe false diff --git a/TUnit.Engine/TUnit.Engine.targets b/TUnit.Engine/TUnit.Engine.targets index 9908ae471d..e1ab616fe2 100644 --- a/TUnit.Engine/TUnit.Engine.targets +++ b/TUnit.Engine/TUnit.Engine.targets @@ -1,6 +1,10 @@ - + + + latest + + @@ -13,4 +17,4 @@ - + \ No newline at end of file diff --git a/TUnit.TestProject.VB.NET/TUnit.TestProject.VB.NET.vbproj b/TUnit.TestProject.VB.NET/TUnit.TestProject.VB.NET.vbproj index 7a6918c49a..504c6d87f3 100644 --- a/TUnit.TestProject.VB.NET/TUnit.TestProject.VB.NET.vbproj +++ b/TUnit.TestProject.VB.NET/TUnit.TestProject.VB.NET.vbproj @@ -1,5 +1,9 @@  + + latest + + diff --git a/TUnit/TUnit.props b/TUnit/TUnit.props index 860822c9b1..d03d97b2d0 100644 --- a/TUnit/TUnit.props +++ b/TUnit/TUnit.props @@ -7,7 +7,6 @@ true true false - latest Exe diff --git a/TUnit/TUnit.targets b/TUnit/TUnit.targets index 341ff22152..5a237a978c 100644 --- a/TUnit/TUnit.targets +++ b/TUnit/TUnit.targets @@ -1,6 +1,10 @@ + + latest + +