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 @@
-
-
+
+
-
+