diff --git a/.editorconfig b/.editorconfig index f555214..e6ea2e5 100644 --- a/.editorconfig +++ b/.editorconfig @@ -306,6 +306,8 @@ dotnet_diagnostic.MA0051.severity = none dotnet_diagnostic.MA0053.severity = warning dotnet_diagnostic.MA0190.severity = none +dotnet_diagnostic.RS1041.severity = none # RS1041: Compiler extensions should be implemented in assemblies targeting netstandard2.0 + [src/Immediate.Cache.Shared/**.cs] # XML Documentation diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 876cae3..fc038ed 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -16,7 +16,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v6 + - uses: actions/checkout@v7 - name: Setup .NET uses: actions/setup-dotnet@v5 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index c2ffb1e..9f8f59f 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -15,7 +15,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v6 + - uses: actions/checkout@v7 - name: Setup .NET uses: actions/setup-dotnet@v5 diff --git a/Directory.Build.props b/Directory.Build.props index 49d1b63..72f6942 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -23,6 +23,7 @@ $(Polyfill)|T:System.Index + $(Polyfill)|T:System.HashCode $(Polyfill)|T:System.Range $(Polyfill)|T:System.Diagnostics.CodeAnalysis $(Polyfill)|T:System.Runtime.CompilerServices.CallerArgumentExpressionAttribute @@ -31,6 +32,8 @@ $(Polyfill)|T:System.Runtime.CompilerServices.RequiredMemberAttribute $(Polyfill)|T:System.Runtime.CompilerServices.SkipLocalsInitAttribute $(Polyfill)|T:System.Threading.Lock + $(Polyfill)|M:System.ArgumentNullException.ThrowIfNull + $(Polyfill)|M:System.String.Replace(System.String,System.String,System.StringComparison) $(Polyfill) diff --git a/Directory.Packages.props b/Directory.Packages.props index 11ea81d..0d0942b 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -12,20 +12,18 @@ - - - - + - + + - + @@ -34,7 +32,7 @@ - + @@ -43,7 +41,7 @@ - + @@ -52,7 +50,7 @@ - + @@ -60,10 +58,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + diff --git a/coverage-settings.xml b/coverage-settings.xml index 36bb3fb..526e3a6 100644 --- a/coverage-settings.xml +++ b/coverage-settings.xml @@ -1,20 +1,33 @@ - + - - - - - ^System\.Diagnostics\.DebuggerHiddenAttribute$ - ^System\.Diagnostics\.DebuggerNonUserCodeAttribute$ - ^System\.CodeDom\.Compiler\.GeneratedCodeAttribute$ - ^System\.Diagnostics\.CodeAnalysis\.ExcludeFromCodeCoverageAttribute$ - - + + + + .*Immediate.Handlers.Generators.dll$ + + - True - True + + + + + ^System\.Diagnostics\.DebuggerHiddenAttribute$ + ^System\.Diagnostics\.DebuggerNonUserCodeAttribute$ + ^System\.CodeDom\.Compiler\.GeneratedCodeAttribute$ + ^System\.Diagnostics\.CodeAnalysis\.ExcludeFromCodeCoverageAttribute$ + + - + + + .*/scriban/.* + + + + True + True + + diff --git a/src/Immediate.Cache.Analyzers/CacheForUsageAnalyzer.cs b/src/Immediate.Cache.Analyzers/CacheForUsageAnalyzer.cs index 51f3580..fa707e1 100644 --- a/src/Immediate.Cache.Analyzers/CacheForUsageAnalyzer.cs +++ b/src/Immediate.Cache.Analyzers/CacheForUsageAnalyzer.cs @@ -53,8 +53,7 @@ public sealed class CacheForUsageAnalyzer : DiagnosticAnalyzer public override void Initialize(AnalysisContext context) { - if (context == null) - throw new ArgumentNullException(nameof(context)); + ArgumentNullException.ThrowIfNull(context); context.ConfigureGeneratedCodeAnalysis(GeneratedCodeAnalysisFlags.None); context.EnableConcurrentExecution(); diff --git a/src/Immediate.Cache.Analyzers/Immediate.Cache.Analyzers.csproj b/src/Immediate.Cache.Analyzers/Immediate.Cache.Analyzers.csproj index 18975e9..75b20ce 100644 --- a/src/Immediate.Cache.Analyzers/Immediate.Cache.Analyzers.csproj +++ b/src/Immediate.Cache.Analyzers/Immediate.Cache.Analyzers.csproj @@ -1,7 +1,7 @@ - netstandard2.0 + netstandard2.0;net10.0 true true @@ -11,7 +11,6 @@ - diff --git a/src/Immediate.Cache.Generators/Immediate.Cache.Generators.csproj b/src/Immediate.Cache.Generators/Immediate.Cache.Generators.csproj index 1812740..e726b66 100644 --- a/src/Immediate.Cache.Generators/Immediate.Cache.Generators.csproj +++ b/src/Immediate.Cache.Generators/Immediate.Cache.Generators.csproj @@ -1,7 +1,7 @@ - netstandard2.0 + netstandard2.0;net10.0 true true $(NoWarn);CA1716 @@ -18,20 +18,32 @@ - - - - $(GetTargetPathDependsOn);GetDependencyTargetPaths + + + + + + + true + $(DefineConstants);SCRIBAN_NO_ASYNC + + + + + + + + $(GetTargetPathDependsOn);GetDependencyTargetPaths - - - - + + + + diff --git a/src/Immediate.Cache.Generators/ImmediateCacheGenerator.Render.cs b/src/Immediate.Cache.Generators/ImmediateCacheGenerator.Render.cs index d795ad0..e730b06 100644 --- a/src/Immediate.Cache.Generators/ImmediateCacheGenerator.Render.cs +++ b/src/Immediate.Cache.Generators/ImmediateCacheGenerator.Render.cs @@ -1,3 +1,4 @@ +using System.Diagnostics; using System.Reflection; using Microsoft.CodeAnalysis; using Scriban; @@ -70,6 +71,8 @@ private static Template GetTemplate(string name) $"Immediate.Cache.Generators.Templates.{name}.sbntxt" ); + Debug.Assert(stream is { }); + using var reader = new StreamReader(stream); return Template.Parse(reader.ReadToEnd()); } diff --git a/src/Immediate.Cache.Generators/ImmediateCacheGenerator.Transform.cs b/src/Immediate.Cache.Generators/ImmediateCacheGenerator.Transform.cs index bab15f1..bd38906 100644 --- a/src/Immediate.Cache.Generators/ImmediateCacheGenerator.Transform.cs +++ b/src/Immediate.Cache.Generators/ImmediateCacheGenerator.Transform.cs @@ -14,7 +14,7 @@ public sealed partial class ImmediateCacheGenerator if (context.Attributes is not [{ AttributeClass.TypeArguments: [INamedTypeSymbol { IsStatic: false } handlerSymbol] }]) return null; - var @namespace = targetSymbol.ContainingNamespace.ToString().NullIf(""); + var @namespace = targetSymbol.ContainingNamespace.ToDisplayString().NullIf(""); var name = targetSymbol.Name; if (!handlerSymbol.GetValidHandleMethod(out var requestType, out var responseType)) diff --git a/src/Immediate.Cache.Generators/ImmediateCacheGenerator.cs b/src/Immediate.Cache.Generators/ImmediateCacheGenerator.cs index 453b58d..571de3f 100644 --- a/src/Immediate.Cache.Generators/ImmediateCacheGenerator.cs +++ b/src/Immediate.Cache.Generators/ImmediateCacheGenerator.cs @@ -74,8 +74,8 @@ public static string GetAssemblyIdentifier(this Compilation compilation) } return (compilation.AssemblyName ?? string.Empty) - .Replace(".", string.Empty) - .Replace(" ", string.Empty) + .Replace(".", string.Empty, StringComparison.Ordinal) + .Replace(" ", string.Empty, StringComparison.Ordinal) .Trim(); } } diff --git a/src/Immediate.Cache/Immediate.Cache.csproj b/src/Immediate.Cache/Immediate.Cache.csproj index ece6dc6..bb01835 100644 --- a/src/Immediate.Cache/Immediate.Cache.csproj +++ b/src/Immediate.Cache/Immediate.Cache.csproj @@ -24,7 +24,6 @@ - @@ -33,26 +32,57 @@ + - - + + + + + + + + + Include="../Immediate.Cache.Analyzers/bin/$(Configuration)/netstandard2.0/Immediate.Cache.Analyzers.dll" + Pack="true" + PackagePath="analyzers/dotnet/roslyn4.8/cs" /> + Include="../Immediate.Cache.Generators/bin/$(Configuration)/netstandard2.0/Immediate.Cache.Generators.dll" + Pack="true" + PackagePath="analyzers/dotnet/roslyn4.8/cs" /> + + + + Include="../Immediate.Cache.Analyzers/bin/$(Configuration)/net10.0/Immediate.Cache.Analyzers.dll" + Pack="true" + PackagePath="analyzers/dotnet/roslyn5.0/cs" /> + + + + + + + + diff --git a/tests/Immediate.Cache.Tests/GeneratorTests/GeneratorTestHelper.cs b/tests/Immediate.Cache.Tests/GeneratorTests/GeneratorTestHelper.cs index d63b73e..4028e38 100644 --- a/tests/Immediate.Cache.Tests/GeneratorTests/GeneratorTestHelper.cs +++ b/tests/Immediate.Cache.Tests/GeneratorTests/GeneratorTestHelper.cs @@ -12,19 +12,10 @@ public static class GeneratorTestHelper public static GeneratorDriverRunResult RunGenerator( [StringSyntax("c#-test")] string source, params ReadOnlySpan skippedSteps - ) => RunGenerator(source, LanguageVersion.CSharp13, skippedSteps); - - public static GeneratorDriverRunResult RunGenerator( - [StringSyntax("c#-test")] string source, - LanguageVersion languageVersion, - params ReadOnlySpan skippedSteps ) { - var parseOptions = new CSharpParseOptions(languageVersion); - var syntaxTree = CSharpSyntaxTree.ParseText( source, - parseOptions, cancellationToken: TestContext.Current.CancellationToken ); @@ -43,14 +34,13 @@ params ReadOnlySpan skippedSteps GeneratorDriver driver = CSharpGeneratorDriver.Create( generators: [new ImmediateCacheGenerator().AsSourceGenerator(), new ImmediateHandlersGenerator().AsSourceGenerator()], - parseOptions: parseOptions, driverOptions: new GeneratorDriverOptions(default, trackIncrementalGeneratorSteps: true) ); driver = RunGenerator(driver, compilation); var result = driver.GetRunResult(); - VerifyIncrementality(driver, compilation, parseOptions, skippedSteps); + VerifyIncrementality(driver, compilation, skippedSteps); return result; } @@ -83,14 +73,12 @@ Compilation compilation private static void VerifyIncrementality( GeneratorDriver driver, Compilation compilation, - CSharpParseOptions parseOptions, ReadOnlySpan skippedSteps ) { var clone = compilation.Clone().AddSyntaxTrees( CSharpSyntaxTree.ParseText( "// dummy", - parseOptions, cancellationToken: TestContext.Current.CancellationToken ) ); diff --git a/tests/Immediate.Cache.Tests/Immediate.Cache.Tests.csproj b/tests/Immediate.Cache.Tests/Immediate.Cache.Tests.csproj index a268dcd..2c4ec22 100644 --- a/tests/Immediate.Cache.Tests/Immediate.Cache.Tests.csproj +++ b/tests/Immediate.Cache.Tests/Immediate.Cache.Tests.csproj @@ -11,10 +11,10 @@ - - + + - +