From 61320607d58fa4db0979d61bbd1e6796818e49c3 Mon Sep 17 00:00:00 2001 From: Abongile Boja Date: Mon, 27 Apr 2026 13:40:43 +0200 Subject: [PATCH 1/2] feat(core): ship QuerySpec.Analyzers package with QSPEC0001/2/3 diagnostics and code fixes Adds two new netstandard2.0 projects (QuerySpec.Analyzers and QuerySpec.Analyzers.CodeFixes, packed together in one nupkg under analyzers/dotnet/cs/) plus a tri-TFM xUnit test project covering the three migration diagnostics: - QSPEC0001: GeoLocation.Latitude/.Longitude member access -> GeoCoordinate - QSPEC0002: AdvancedFilterExpression object creation -> FilterSpec - QSPEC0003: ICacheProvider.GetAsync/SetAsync invocation -> ICacheStore.TryGetAsync/SetValueAsync Each analyzer registers narrowly-scoped syntax-kind callbacks (member access, object creation, invocation respectively), matches via the semantic model rather than syntax text, and suppresses itself when the target member already carries a matching [Obsolete(DiagnosticId)] attribute so consumers see exactly one warning per call site. Code fix providers use BatchFixer for FixAll support and emit well-formed compilable replacements; the cache provider rewrite leaves any needed variable-typing change to the developer (documented in the fix's title and message). netstandard2.0 is the documented exception to the repo TFM policy because Roslyn loads analyzers into a netstandard2.0 ALC regardless of the consumer's target. RS1038 enforces analyzer assemblies cannot reference Microsoft.CodeAnalysis.Workspaces, so analyzers and code fixes ship in separate sibling projects (Microsoft canonical pattern). 27 tests x 3 TFMs = 81 green; zero analyzer warnings; nupkg layout verified. Refs #151 --- CHANGELOG.md | 1 + QuerySpec.sln | 45 +++ ...AdvancedFilterExpressionCodeFixProvider.cs | 71 +++++ .../CacheProviderInvocationCodeFixProvider.cs | 158 ++++++++++ .../GeoLocationMemberAccessCodeFixProvider.cs | 81 ++++++ .../QuerySpec.Analyzers.CodeFixes.csproj | 31 ++ .../AdvancedFilterExpressionAnalyzer.cs | 106 +++++++ .../AnalyzerReleases.Shipped.md | 2 + .../AnalyzerReleases.Unshipped.md | 10 + .../CacheProviderInvocationAnalyzer.cs | 213 ++++++++++++++ .../DiagnosticDescriptors.cs | 67 +++++ src/QuerySpec.Analyzers/DiagnosticIds.cs | 28 ++ .../GeoLocationMemberAccessAnalyzer.cs | 113 ++++++++ src/QuerySpec.Analyzers/PublicAPI.Shipped.txt | 1 + .../PublicAPI.Unshipped.txt | 21 ++ .../QuerySpec.Analyzers.csproj | 60 ++++ src/QuerySpec.Analyzers/icon.png | Bin 0 -> 45134 bytes .../AdvancedFilterExpressionAnalyzerTests.cs | 202 +++++++++++++ .../CacheProviderInvocationAnalyzerTests.cs | 274 ++++++++++++++++++ .../GeoLocationMemberAccessAnalyzerTests.cs | 233 +++++++++++++++ .../QuerySpec.Analyzers.Tests.csproj | 36 +++ .../Verifiers/CSharpAnalyzerVerifier.cs | 49 ++++ .../Verifiers/CSharpCodeFixVerifier.cs | 75 +++++ .../Verifiers/QuerySpecReferenceAssemblies.cs | 13 + .../Verifiers/TestStubs.cs | 102 +++++++ 25 files changed, 1992 insertions(+) create mode 100644 src/QuerySpec.Analyzers.CodeFixes/AdvancedFilterExpressionCodeFixProvider.cs create mode 100644 src/QuerySpec.Analyzers.CodeFixes/CacheProviderInvocationCodeFixProvider.cs create mode 100644 src/QuerySpec.Analyzers.CodeFixes/GeoLocationMemberAccessCodeFixProvider.cs create mode 100644 src/QuerySpec.Analyzers.CodeFixes/QuerySpec.Analyzers.CodeFixes.csproj create mode 100644 src/QuerySpec.Analyzers/AdvancedFilterExpressionAnalyzer.cs create mode 100644 src/QuerySpec.Analyzers/AnalyzerReleases.Shipped.md create mode 100644 src/QuerySpec.Analyzers/AnalyzerReleases.Unshipped.md create mode 100644 src/QuerySpec.Analyzers/CacheProviderInvocationAnalyzer.cs create mode 100644 src/QuerySpec.Analyzers/DiagnosticDescriptors.cs create mode 100644 src/QuerySpec.Analyzers/DiagnosticIds.cs create mode 100644 src/QuerySpec.Analyzers/GeoLocationMemberAccessAnalyzer.cs create mode 100644 src/QuerySpec.Analyzers/PublicAPI.Shipped.txt create mode 100644 src/QuerySpec.Analyzers/PublicAPI.Unshipped.txt create mode 100644 src/QuerySpec.Analyzers/QuerySpec.Analyzers.csproj create mode 100644 src/QuerySpec.Analyzers/icon.png create mode 100644 tests/QuerySpec.Analyzers.Tests/AdvancedFilterExpressionAnalyzerTests.cs create mode 100644 tests/QuerySpec.Analyzers.Tests/CacheProviderInvocationAnalyzerTests.cs create mode 100644 tests/QuerySpec.Analyzers.Tests/GeoLocationMemberAccessAnalyzerTests.cs create mode 100644 tests/QuerySpec.Analyzers.Tests/QuerySpec.Analyzers.Tests.csproj create mode 100644 tests/QuerySpec.Analyzers.Tests/Verifiers/CSharpAnalyzerVerifier.cs create mode 100644 tests/QuerySpec.Analyzers.Tests/Verifiers/CSharpCodeFixVerifier.cs create mode 100644 tests/QuerySpec.Analyzers.Tests/Verifiers/QuerySpecReferenceAssemblies.cs create mode 100644 tests/QuerySpec.Analyzers.Tests/Verifiers/TestStubs.cs diff --git a/CHANGELOG.md b/CHANGELOG.md index a7cba4a..af7db08 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/) and this * **di:** `CachingBuilder.UseMemoryCache` / `UseDistributedRedis` / `UseMultiLevel` now register a single provider instance against both `ICacheProvider` (legacy) and `ICacheStore` (new). Consumers may inject either contract through 3.x. * **docs:** Per-diagnostic reference pages under `docs/diagnostics/`: `QSPEC0001.md`, `QSPEC0002.md`, `QSPEC0003.md`. Each `[Obsolete]` attribute uses these as its `UrlFormat` target so IDE quick-info links resolve directly. * **samples:** `samples/Migration/{GeoCoordinateMigration,FilterSpecMigration,CacheStoreMigration}` — three console programs showing the old usage (with the matching `#pragma warning disable QSPEC####`) followed by the new equivalent, including value-type caching and structural equality. +* **core:** `QuerySpec.Analyzers` — standalone Roslyn analyzer + code-fix package shipping `QSPEC0001` (`GeoLocation.Latitude`/`.Longitude` → `GeoCoordinate`), `QSPEC0002` (`AdvancedFilterExpression` → `FilterSpec`), and `QSPEC0003` (`ICacheProvider.GetAsync`/`SetAsync` → `ICacheStore.TryGetAsync`/`SetValueAsync`) diagnostics with one-click code fixes and Fix-All-In-Document/Project/Solution support. Targets `netstandard2.0` per Roslyn host requirements; consumed by adding `` alongside the runtime packages. The analyzers suppress themselves when the target member already carries `[Obsolete(DiagnosticId = "QSPEC####")]` so consumers see exactly one warning per call site. Closes [#151](https://github.com/AbongileBoja/QuerySpec/issues/151). ### Deprecations diff --git a/QuerySpec.sln b/QuerySpec.sln index d5bfc76..29266d1 100644 --- a/QuerySpec.sln +++ b/QuerySpec.sln @@ -37,6 +37,12 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FilterSpecMigration", "samp EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CacheStoreMigration", "samples\Migration\CacheStoreMigration\CacheStoreMigration.csproj", "{649580D0-5030-4968-8110-B75F84A9CC49}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "QuerySpec.Analyzers", "src\QuerySpec.Analyzers\QuerySpec.Analyzers.csproj", "{E6226DAB-342B-4E91-B9F8-FC4C7FBFFE5D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "QuerySpec.Analyzers.CodeFixes", "src\QuerySpec.Analyzers.CodeFixes\QuerySpec.Analyzers.CodeFixes.csproj", "{634574EC-D5AA-4CE1-9D72-02D5AC09C10A}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "QuerySpec.Analyzers.Tests", "tests\QuerySpec.Analyzers.Tests\QuerySpec.Analyzers.Tests.csproj", "{E282FC54-B2EF-4BCC-9F18-8D68EB04DF3F}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -191,6 +197,42 @@ Global {649580D0-5030-4968-8110-B75F84A9CC49}.Release|x64.Build.0 = Release|Any CPU {649580D0-5030-4968-8110-B75F84A9CC49}.Release|x86.ActiveCfg = Release|Any CPU {649580D0-5030-4968-8110-B75F84A9CC49}.Release|x86.Build.0 = Release|Any CPU + {E6226DAB-342B-4E91-B9F8-FC4C7FBFFE5D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E6226DAB-342B-4E91-B9F8-FC4C7FBFFE5D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E6226DAB-342B-4E91-B9F8-FC4C7FBFFE5D}.Debug|x64.ActiveCfg = Debug|Any CPU + {E6226DAB-342B-4E91-B9F8-FC4C7FBFFE5D}.Debug|x64.Build.0 = Debug|Any CPU + {E6226DAB-342B-4E91-B9F8-FC4C7FBFFE5D}.Debug|x86.ActiveCfg = Debug|Any CPU + {E6226DAB-342B-4E91-B9F8-FC4C7FBFFE5D}.Debug|x86.Build.0 = Debug|Any CPU + {E6226DAB-342B-4E91-B9F8-FC4C7FBFFE5D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E6226DAB-342B-4E91-B9F8-FC4C7FBFFE5D}.Release|Any CPU.Build.0 = Release|Any CPU + {E6226DAB-342B-4E91-B9F8-FC4C7FBFFE5D}.Release|x64.ActiveCfg = Release|Any CPU + {E6226DAB-342B-4E91-B9F8-FC4C7FBFFE5D}.Release|x64.Build.0 = Release|Any CPU + {E6226DAB-342B-4E91-B9F8-FC4C7FBFFE5D}.Release|x86.ActiveCfg = Release|Any CPU + {E6226DAB-342B-4E91-B9F8-FC4C7FBFFE5D}.Release|x86.Build.0 = Release|Any CPU + {634574EC-D5AA-4CE1-9D72-02D5AC09C10A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {634574EC-D5AA-4CE1-9D72-02D5AC09C10A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {634574EC-D5AA-4CE1-9D72-02D5AC09C10A}.Debug|x64.ActiveCfg = Debug|Any CPU + {634574EC-D5AA-4CE1-9D72-02D5AC09C10A}.Debug|x64.Build.0 = Debug|Any CPU + {634574EC-D5AA-4CE1-9D72-02D5AC09C10A}.Debug|x86.ActiveCfg = Debug|Any CPU + {634574EC-D5AA-4CE1-9D72-02D5AC09C10A}.Debug|x86.Build.0 = Debug|Any CPU + {634574EC-D5AA-4CE1-9D72-02D5AC09C10A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {634574EC-D5AA-4CE1-9D72-02D5AC09C10A}.Release|Any CPU.Build.0 = Release|Any CPU + {634574EC-D5AA-4CE1-9D72-02D5AC09C10A}.Release|x64.ActiveCfg = Release|Any CPU + {634574EC-D5AA-4CE1-9D72-02D5AC09C10A}.Release|x64.Build.0 = Release|Any CPU + {634574EC-D5AA-4CE1-9D72-02D5AC09C10A}.Release|x86.ActiveCfg = Release|Any CPU + {634574EC-D5AA-4CE1-9D72-02D5AC09C10A}.Release|x86.Build.0 = Release|Any CPU + {E282FC54-B2EF-4BCC-9F18-8D68EB04DF3F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E282FC54-B2EF-4BCC-9F18-8D68EB04DF3F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E282FC54-B2EF-4BCC-9F18-8D68EB04DF3F}.Debug|x64.ActiveCfg = Debug|Any CPU + {E282FC54-B2EF-4BCC-9F18-8D68EB04DF3F}.Debug|x64.Build.0 = Debug|Any CPU + {E282FC54-B2EF-4BCC-9F18-8D68EB04DF3F}.Debug|x86.ActiveCfg = Debug|Any CPU + {E282FC54-B2EF-4BCC-9F18-8D68EB04DF3F}.Debug|x86.Build.0 = Debug|Any CPU + {E282FC54-B2EF-4BCC-9F18-8D68EB04DF3F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E282FC54-B2EF-4BCC-9F18-8D68EB04DF3F}.Release|Any CPU.Build.0 = Release|Any CPU + {E282FC54-B2EF-4BCC-9F18-8D68EB04DF3F}.Release|x64.ActiveCfg = Release|Any CPU + {E282FC54-B2EF-4BCC-9F18-8D68EB04DF3F}.Release|x64.Build.0 = Release|Any CPU + {E282FC54-B2EF-4BCC-9F18-8D68EB04DF3F}.Release|x86.ActiveCfg = Release|Any CPU + {E282FC54-B2EF-4BCC-9F18-8D68EB04DF3F}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -205,5 +247,8 @@ Global {86062595-0822-4A1A-8A21-57F5B8C623E0} = {AC4D1969-34FE-CE3B-A6DC-185217944FF3} {E98B47F0-102F-470A-B40A-230D6A0C5BE7} = {AC4D1969-34FE-CE3B-A6DC-185217944FF3} {649580D0-5030-4968-8110-B75F84A9CC49} = {AC4D1969-34FE-CE3B-A6DC-185217944FF3} + {E6226DAB-342B-4E91-B9F8-FC4C7FBFFE5D} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B} + {634574EC-D5AA-4CE1-9D72-02D5AC09C10A} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B} + {E282FC54-B2EF-4BCC-9F18-8D68EB04DF3F} = {0AB3BF05-4346-4AA6-1389-037BE0695223} EndGlobalSection EndGlobal diff --git a/src/QuerySpec.Analyzers.CodeFixes/AdvancedFilterExpressionCodeFixProvider.cs b/src/QuerySpec.Analyzers.CodeFixes/AdvancedFilterExpressionCodeFixProvider.cs new file mode 100644 index 0000000..979f945 --- /dev/null +++ b/src/QuerySpec.Analyzers.CodeFixes/AdvancedFilterExpressionCodeFixProvider.cs @@ -0,0 +1,71 @@ +using System.Collections.Immutable; +using System.Composition; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.CodeAnalysis; +using Microsoft.CodeAnalysis.CodeActions; +using Microsoft.CodeAnalysis.CodeFixes; +using Microsoft.CodeAnalysis.CSharp; +using Microsoft.CodeAnalysis.CSharp.Syntax; + +namespace QuerySpec.Analyzers; + +/// +/// Code fix for QSPEC0002: rewrites new AdvancedFilterExpression { ... } as +/// new FilterSpec { ... }. The two types share property names so the object initializer +/// transfers verbatim; the new type's accessors are rather than +/// , which is the migration's central guarantee. +/// +[ExportCodeFixProvider(LanguageNames.CSharp, Name = nameof(AdvancedFilterExpressionCodeFixProvider))] +[Shared] +public sealed class AdvancedFilterExpressionCodeFixProvider : CodeFixProvider +{ + private const string Title = "Use FilterSpec instead of AdvancedFilterExpression"; + + /// + public override ImmutableArray FixableDiagnosticIds { get; } = + ImmutableArray.Create(DiagnosticIds.AdvancedFilterExpressionUsage); + + /// + public override FixAllProvider GetFixAllProvider() => WellKnownFixAllProviders.BatchFixer; + + /// + public override async Task RegisterCodeFixesAsync(CodeFixContext context) + { + var root = await context.Document + .GetSyntaxRootAsync(context.CancellationToken) + .ConfigureAwait(false); + if (root is null) return; + + foreach (var diagnostic in context.Diagnostics) + { + var node = root.FindNode(diagnostic.Location.SourceSpan); + var creation = node.FirstAncestorOrSelf(); + if (creation is null) continue; + + context.RegisterCodeFix( + CodeAction.Create( + title: Title, + createChangedDocument: ct => RewriteAsync(context.Document, creation, ct), + equivalenceKey: Title), + diagnostic); + } + } + + private static async Task RewriteAsync( + Document document, + ObjectCreationExpressionSyntax creation, + CancellationToken cancellationToken) + { + var root = await document.GetSyntaxRootAsync(cancellationToken).ConfigureAwait(false); + if (root is null) return document; + + var newTypeName = SyntaxFactory.IdentifierName("FilterSpec") + .WithTriviaFrom(creation.Type); + + var replacement = creation.WithType(newTypeName); + + var newRoot = root.ReplaceNode(creation, replacement); + return document.WithSyntaxRoot(newRoot); + } +} diff --git a/src/QuerySpec.Analyzers.CodeFixes/CacheProviderInvocationCodeFixProvider.cs b/src/QuerySpec.Analyzers.CodeFixes/CacheProviderInvocationCodeFixProvider.cs new file mode 100644 index 0000000..735e57b --- /dev/null +++ b/src/QuerySpec.Analyzers.CodeFixes/CacheProviderInvocationCodeFixProvider.cs @@ -0,0 +1,158 @@ +using System.Collections.Immutable; +using System.Composition; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.CodeAnalysis; +using Microsoft.CodeAnalysis.CodeActions; +using Microsoft.CodeAnalysis.CodeFixes; +using Microsoft.CodeAnalysis.CSharp; +using Microsoft.CodeAnalysis.CSharp.Syntax; +using Microsoft.CodeAnalysis.Formatting; + +namespace QuerySpec.Analyzers; + +/// +/// Code fix for QSPEC0003: rewrites cache.SetAsync<T>(...) as +/// cache.SetValueAsync<T>(...), and rewrites await cache.GetAsync<T>(key) +/// as (await cache.TryGetAsync<T>(key)).GetValueOrDefault() so the consumer keeps the +/// same null-fallback shape they had on the legacy API. +/// +/// +/// The shipping providers (MemoryCacheProvider, DistributedCacheProvider, +/// MultiLevelCache) implement both ICacheProvider and ICacheStore through 3.x, +/// so the rewritten call resolves against the same instance: no DI changes required. Consumers +/// who explicitly typed their variable as ICacheProvider will get a compile error after the +/// fix because the new method does not exist on that interface; the diagnostic message and the +/// migration sample steer them to retype as ICacheStore. We deliberately do not auto-rewrite +/// the variable declaration because that would be a cross-file edit with subtle scoping +/// implications (DI registration, downstream usages, etc.) — that judgement stays with the +/// developer. +/// +[ExportCodeFixProvider(LanguageNames.CSharp, Name = nameof(CacheProviderInvocationCodeFixProvider))] +[Shared] +public sealed class CacheProviderInvocationCodeFixProvider : CodeFixProvider +{ + private const string Title = "Use ICacheStore instead of ICacheProvider"; + + /// + public override ImmutableArray FixableDiagnosticIds { get; } = + ImmutableArray.Create(DiagnosticIds.CacheProviderInvocation); + + /// + public override FixAllProvider GetFixAllProvider() => WellKnownFixAllProviders.BatchFixer; + + /// + public override async Task RegisterCodeFixesAsync(CodeFixContext context) + { + var root = await context.Document + .GetSyntaxRootAsync(context.CancellationToken) + .ConfigureAwait(false); + if (root is null) return; + + foreach (var diagnostic in context.Diagnostics) + { + var node = root.FindNode(diagnostic.Location.SourceSpan); + var memberAccess = node.FirstAncestorOrSelf(); + if (memberAccess?.Parent is not InvocationExpressionSyntax invocation) continue; + + context.RegisterCodeFix( + CodeAction.Create( + title: Title, + createChangedDocument: ct => RewriteAsync(context.Document, invocation, ct), + equivalenceKey: Title), + diagnostic); + } + } + + private static async Task RewriteAsync( + Document document, + InvocationExpressionSyntax invocation, + CancellationToken cancellationToken) + { + var root = await document.GetSyntaxRootAsync(cancellationToken).ConfigureAwait(false); + if (root is null) return document; + + if (invocation.Expression is not MemberAccessExpressionSyntax memberAccess) + { + return document; + } + + var calledName = memberAccess.Name.Identifier.ValueText; + SyntaxNode? newRoot = calledName switch + { + "SetAsync" => RewriteSetAsync(root, invocation, memberAccess), + "GetAsync" => RewriteGetAsync(root, invocation, memberAccess), + _ => null, + }; + + return newRoot is null ? document : document.WithSyntaxRoot(newRoot); + } + + private static SyntaxNode RewriteSetAsync( + SyntaxNode root, + InvocationExpressionSyntax invocation, + MemberAccessExpressionSyntax memberAccess) + { + var renamedName = ReplaceMethodIdentifier(memberAccess.Name, "SetValueAsync"); + var newAccess = memberAccess.WithName(renamedName); + var replacement = invocation.WithExpression(newAccess); + return root.ReplaceNode(invocation, replacement); + } + + private static SyntaxNode RewriteGetAsync( + SyntaxNode root, + InvocationExpressionSyntax invocation, + MemberAccessExpressionSyntax memberAccess) + { + var renamedName = ReplaceMethodIdentifier(memberAccess.Name, "TryGetAsync"); + var newAccess = memberAccess.WithName(renamedName); + var renamedInvocation = invocation.WithExpression(newAccess); + + // Wrap as: (await cache.TryGetAsync(key)).GetValueOrDefault() + // If the original call site was already inside an `await` expression, replace the await + // with the parenthesised form so we keep one await and add the GetValueOrDefault hop. + if (invocation.Parent is AwaitExpressionSyntax existingAwait) + { + var awaited = existingAwait.WithExpression(renamedInvocation); + var parenthesised = SyntaxFactory.ParenthesizedExpression(awaited.WithoutTrivia()); + var dotted = SyntaxFactory.MemberAccessExpression( + SyntaxKind.SimpleMemberAccessExpression, + parenthesised, + SyntaxFactory.IdentifierName("GetValueOrDefault")); + var withFallback = SyntaxFactory.InvocationExpression(dotted) + .WithTriviaFrom(existingAwait) + .WithAdditionalAnnotations(Formatter.Annotation); + return root.ReplaceNode(existingAwait, withFallback); + } + + // No surrounding await — emit a synchronous form that still composes with .Result-style + // patterns the developer may be using. We add the .GetValueOrDefault() hop via a + // continuation so the rewrite remains semantically consistent. + var awaitExpr = SyntaxFactory.AwaitExpression(renamedInvocation.WithoutTrivia()); + var paren = SyntaxFactory.ParenthesizedExpression(awaitExpr); + var member = SyntaxFactory.MemberAccessExpression( + SyntaxKind.SimpleMemberAccessExpression, + paren, + SyntaxFactory.IdentifierName("GetValueOrDefault")); + var newCall = SyntaxFactory.InvocationExpression(member) + .WithTriviaFrom(invocation) + .WithAdditionalAnnotations(Formatter.Annotation); + return root.ReplaceNode(invocation, newCall); + } + + private static SimpleNameSyntax ReplaceMethodIdentifier(SimpleNameSyntax original, string newName) + { + if (original is GenericNameSyntax generic) + { + return generic.WithIdentifier(SyntaxFactory.Identifier(newName)); + } + + if (original is IdentifierNameSyntax identifier) + { + return identifier.WithIdentifier(SyntaxFactory.Identifier(newName)); + } + + return SyntaxFactory.IdentifierName(newName).WithTriviaFrom(original); + } +} diff --git a/src/QuerySpec.Analyzers.CodeFixes/GeoLocationMemberAccessCodeFixProvider.cs b/src/QuerySpec.Analyzers.CodeFixes/GeoLocationMemberAccessCodeFixProvider.cs new file mode 100644 index 0000000..8c9ecd4 --- /dev/null +++ b/src/QuerySpec.Analyzers.CodeFixes/GeoLocationMemberAccessCodeFixProvider.cs @@ -0,0 +1,81 @@ +using System.Collections.Immutable; +using System.Composition; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.CodeAnalysis; +using Microsoft.CodeAnalysis.CodeActions; +using Microsoft.CodeAnalysis.CodeFixes; +using Microsoft.CodeAnalysis.CSharp; +using Microsoft.CodeAnalysis.CSharp.Syntax; + +namespace QuerySpec.Analyzers; + +/// +/// Code fix for QSPEC0001: rewrites legacy.Latitude as legacy.ToGeoCoordinate().Latitude +/// (and likewise for Longitude). The migration helper is intent-revealing, allocation-free +/// (GeoCoordinate is a ), +/// and validates inputs. +/// +[ExportCodeFixProvider(LanguageNames.CSharp, Name = nameof(GeoLocationMemberAccessCodeFixProvider))] +[Shared] +public sealed class GeoLocationMemberAccessCodeFixProvider : CodeFixProvider +{ + private const string Title = "Use GeoCoordinate instead of GeoLocation"; + + /// + public override ImmutableArray FixableDiagnosticIds { get; } = + ImmutableArray.Create(DiagnosticIds.GeoLocationMemberAccess); + + /// + public override FixAllProvider GetFixAllProvider() => WellKnownFixAllProviders.BatchFixer; + + /// + public override async Task RegisterCodeFixesAsync(CodeFixContext context) + { + var root = await context.Document + .GetSyntaxRootAsync(context.CancellationToken) + .ConfigureAwait(false); + if (root is null) return; + + foreach (var diagnostic in context.Diagnostics) + { + var nameSyntax = root.FindNode(diagnostic.Location.SourceSpan); + var memberAccess = nameSyntax.FirstAncestorOrSelf(); + if (memberAccess is null) continue; + + context.RegisterCodeFix( + CodeAction.Create( + title: Title, + createChangedDocument: ct => RewriteAsync(context.Document, memberAccess, ct), + equivalenceKey: Title), + diagnostic); + } + } + + private static async Task RewriteAsync( + Document document, + MemberAccessExpressionSyntax memberAccess, + CancellationToken cancellationToken) + { + var root = await document.GetSyntaxRootAsync(cancellationToken).ConfigureAwait(false); + if (root is null) return document; + + var receiver = memberAccess.Expression; + var memberName = memberAccess.Name; + + var helperCall = SyntaxFactory.InvocationExpression( + SyntaxFactory.MemberAccessExpression( + SyntaxKind.SimpleMemberAccessExpression, + receiver.WithoutTrivia(), + SyntaxFactory.IdentifierName("ToGeoCoordinate"))); + + var replacement = SyntaxFactory.MemberAccessExpression( + SyntaxKind.SimpleMemberAccessExpression, + helperCall, + memberName.WithoutTrivia()) + .WithTriviaFrom(memberAccess); + + var newRoot = root.ReplaceNode(memberAccess, replacement); + return document.WithSyntaxRoot(newRoot); + } +} diff --git a/src/QuerySpec.Analyzers.CodeFixes/QuerySpec.Analyzers.CodeFixes.csproj b/src/QuerySpec.Analyzers.CodeFixes/QuerySpec.Analyzers.CodeFixes.csproj new file mode 100644 index 0000000..101de58 --- /dev/null +++ b/src/QuerySpec.Analyzers.CodeFixes/QuerySpec.Analyzers.CodeFixes.csproj @@ -0,0 +1,31 @@ + + + + + netstandard2.0 + + + QuerySpec.Analyzers + QuerySpec.Analyzers.CodeFixes + + + false + true + + + false + false + + false + + + + + + + + + + + + diff --git a/src/QuerySpec.Analyzers/AdvancedFilterExpressionAnalyzer.cs b/src/QuerySpec.Analyzers/AdvancedFilterExpressionAnalyzer.cs new file mode 100644 index 0000000..7959e73 --- /dev/null +++ b/src/QuerySpec.Analyzers/AdvancedFilterExpressionAnalyzer.cs @@ -0,0 +1,106 @@ +using System.Collections.Immutable; +using Microsoft.CodeAnalysis; +using Microsoft.CodeAnalysis.CSharp; +using Microsoft.CodeAnalysis.CSharp.Syntax; +using Microsoft.CodeAnalysis.Diagnostics; + +namespace QuerySpec.Analyzers; + +/// +/// Reports (QSPEC0002) on +/// every new AdvancedFilterExpression(...) and on every type reference in a variable or +/// parameter declaration that names the deprecated POCO. +/// +/// +/// Two registrations: catches the canonical +/// new AdvancedFilterExpression { ... } migration site, while +/// and cover +/// declared usages so the diagnostic also surfaces on holders that cross API boundaries. Round-trip +/// helpers in the QuerySpec.Core.Advanced namespace itself (FilterSpec.FromMutable / +/// ToMutable) emit on consumer code; the source itself is silenced via +/// WarningsNotAsErrors in the QuerySpec.Core Directory.Build.props. +/// +[DiagnosticAnalyzer(LanguageNames.CSharp)] +public sealed class AdvancedFilterExpressionAnalyzer : DiagnosticAnalyzer +{ + private const string AdvancedFilterExpressionFullName = + "QuerySpec.Core.Advanced.AdvancedFilterExpression"; + + /// + public override ImmutableArray SupportedDiagnostics { get; } = + ImmutableArray.Create(DiagnosticDescriptors.AdvancedFilterExpressionUsage); + + /// + public override void Initialize(AnalysisContext context) + { + if (context is null) return; + + context.ConfigureGeneratedCodeAnalysis(GeneratedCodeAnalysisFlags.None); + context.EnableConcurrentExecution(); + + context.RegisterCompilationStartAction(static compilationStart => + { + var legacy = compilationStart.Compilation.GetTypeByMetadataName( + AdvancedFilterExpressionFullName); + if (legacy is null) + { + return; + } + + compilationStart.RegisterSyntaxNodeAction( + ctx => AnalyzeObjectCreation(ctx, legacy), + SyntaxKind.ObjectCreationExpression); + }); + } + + private static void AnalyzeObjectCreation( + SyntaxNodeAnalysisContext context, + INamedTypeSymbol legacyType) + { + var creation = (ObjectCreationExpressionSyntax)context.Node; + var typeInfo = context.SemanticModel.GetTypeInfo(creation, context.CancellationToken); + if (typeInfo.Type is not INamedTypeSymbol named) + { + return; + } + + if (!SymbolEqualityComparer.Default.Equals(named, legacyType)) + { + return; + } + + if (HasMatchingObsoleteAttribute(named)) + { + return; + } + + context.ReportDiagnostic(Diagnostic.Create( + DiagnosticDescriptors.AdvancedFilterExpressionUsage, + creation.Type.GetLocation())); + } + + private static bool HasMatchingObsoleteAttribute(ISymbol symbol) + { + foreach (var attribute in symbol.GetAttributes()) + { + var className = attribute.AttributeClass?.Name; + if (className is null + || !string.Equals(className, "ObsoleteAttribute", System.StringComparison.Ordinal)) + { + continue; + } + + foreach (var named in attribute.NamedArguments) + { + if (string.Equals(named.Key, "DiagnosticId", System.StringComparison.Ordinal) + && named.Value.Value is string id + && string.Equals(id, DiagnosticIds.AdvancedFilterExpressionUsage, System.StringComparison.Ordinal)) + { + return true; + } + } + } + + return false; + } +} diff --git a/src/QuerySpec.Analyzers/AnalyzerReleases.Shipped.md b/src/QuerySpec.Analyzers/AnalyzerReleases.Shipped.md new file mode 100644 index 0000000..f50bb1f --- /dev/null +++ b/src/QuerySpec.Analyzers/AnalyzerReleases.Shipped.md @@ -0,0 +1,2 @@ +; Shipped analyzer releases +; https://github.com/dotnet/roslyn-analyzers/blob/main/src/Microsoft.CodeAnalysis.Analyzers/ReleaseTrackingAnalyzers.Help.md diff --git a/src/QuerySpec.Analyzers/AnalyzerReleases.Unshipped.md b/src/QuerySpec.Analyzers/AnalyzerReleases.Unshipped.md new file mode 100644 index 0000000..830ec9c --- /dev/null +++ b/src/QuerySpec.Analyzers/AnalyzerReleases.Unshipped.md @@ -0,0 +1,10 @@ +; Unshipped analyzer release +; https://github.com/dotnet/roslyn-analyzers/blob/main/src/Microsoft.CodeAnalysis.Analyzers/ReleaseTrackingAnalyzers.Help.md + +### New Rules + +Rule ID | Category | Severity | Notes +-----------|----------------------|----------|------------------------------------------------------------ +QSPEC0001 | QuerySpec.Migration | Warning | Use GeoCoordinate instead of GeoLocation.Latitude/.Longitude +QSPEC0002 | QuerySpec.Migration | Warning | Use FilterSpec instead of AdvancedFilterExpression +QSPEC0003 | QuerySpec.Migration | Warning | Use ICacheStore instead of ICacheProvider GetAsync/SetAsync diff --git a/src/QuerySpec.Analyzers/CacheProviderInvocationAnalyzer.cs b/src/QuerySpec.Analyzers/CacheProviderInvocationAnalyzer.cs new file mode 100644 index 0000000..2ece6f5 --- /dev/null +++ b/src/QuerySpec.Analyzers/CacheProviderInvocationAnalyzer.cs @@ -0,0 +1,213 @@ +using System.Collections.Immutable; +using Microsoft.CodeAnalysis; +using Microsoft.CodeAnalysis.CSharp; +using Microsoft.CodeAnalysis.CSharp.Syntax; +using Microsoft.CodeAnalysis.Diagnostics; + +namespace QuerySpec.Analyzers; + +/// +/// Reports (QSPEC0003) on every +/// invocation of ICacheProvider.GetAsync<T> or ICacheProvider.SetAsync<T>. +/// +/// +/// Resolution uses on the called member's containing type so +/// the diagnostic fires whether the receiver is typed as ICacheProvider or as one of its +/// shipping implementations (MemoryCacheProvider, DistributedCacheProvider, +/// MultiLevelCache). Concrete-receiver call sites still resolve to the interface member on +/// the explicit-interface implementation path, but the analyzer also handles the +/// non-explicit-interface case by climbing IMethodSymbol.ContainingType until it +/// reaches an ITypeSymbol.AllInterfaces entry that matches. +/// +[DiagnosticAnalyzer(LanguageNames.CSharp)] +public sealed class CacheProviderInvocationAnalyzer : DiagnosticAnalyzer +{ + private const string CacheProviderFullName = "QuerySpec.Core.Caching.ICacheProvider"; + + /// + public override ImmutableArray SupportedDiagnostics { get; } = + ImmutableArray.Create(DiagnosticDescriptors.CacheProviderInvocation); + + /// + public override void Initialize(AnalysisContext context) + { + if (context is null) return; + + context.ConfigureGeneratedCodeAnalysis(GeneratedCodeAnalysisFlags.None); + context.EnableConcurrentExecution(); + + context.RegisterCompilationStartAction(static compilationStart => + { + var cacheProvider = compilationStart.Compilation.GetTypeByMetadataName(CacheProviderFullName); + if (cacheProvider is null) + { + return; + } + + compilationStart.RegisterSyntaxNodeAction( + ctx => AnalyzeInvocation(ctx, cacheProvider), + SyntaxKind.InvocationExpression); + }); + } + + private static void AnalyzeInvocation( + SyntaxNodeAnalysisContext context, + INamedTypeSymbol cacheProviderType) + { + var invocation = (InvocationExpressionSyntax)context.Node; + if (invocation.Expression is not MemberAccessExpressionSyntax memberAccess) + { + return; + } + + var name = memberAccess.Name.Identifier.ValueText; + if (!string.Equals(name, "GetAsync", System.StringComparison.Ordinal) + && !string.Equals(name, "SetAsync", System.StringComparison.Ordinal)) + { + return; + } + + if (context.SemanticModel.GetSymbolInfo(invocation, context.CancellationToken).Symbol + is not IMethodSymbol method) + { + return; + } + + if (!IsCacheProviderMember(method, cacheProviderType)) + { + return; + } + + if (HasMatchingObsoleteAttribute(method)) + { + return; + } + + var replacement = string.Equals(name, "GetAsync", System.StringComparison.Ordinal) + ? "TryGetAsync" + : "SetValueAsync"; + context.ReportDiagnostic(Diagnostic.Create( + DiagnosticDescriptors.CacheProviderInvocation, + memberAccess.Name.Identifier.GetLocation(), + name, + replacement)); + } + + private static bool HasMatchingObsoleteAttribute(IMethodSymbol method) + { + foreach (var candidate in EnumerateCandidateMembers(method)) + { + foreach (var attribute in candidate.GetAttributes()) + { + var className = attribute.AttributeClass?.Name; + if (className is null + || !string.Equals(className, "ObsoleteAttribute", System.StringComparison.Ordinal)) + { + continue; + } + + foreach (var named in attribute.NamedArguments) + { + if (string.Equals(named.Key, "DiagnosticId", System.StringComparison.Ordinal) + && named.Value.Value is string id + && string.Equals(id, DiagnosticIds.CacheProviderInvocation, System.StringComparison.Ordinal)) + { + return true; + } + } + } + } + + return false; + } + + private static System.Collections.Generic.IEnumerable EnumerateCandidateMembers(IMethodSymbol method) + { + yield return method; + + foreach (var implemented in method.ExplicitInterfaceImplementations) + { + yield return implemented; + } + + var containing = method.ContainingType; + if (containing is null) + { + yield break; + } + + foreach (var iface in containing.AllInterfaces) + { + foreach (var member in iface.GetMembers(method.Name)) + { + if (member is not IMethodSymbol interfaceMethod) + { + continue; + } + + var implementor = containing.FindImplementationForInterfaceMember(interfaceMethod); + if (SymbolEqualityComparer.Default.Equals(implementor, method)) + { + yield return interfaceMethod; + } + } + } + } + + private static bool IsCacheProviderMember(IMethodSymbol method, INamedTypeSymbol cacheProviderType) + { + var containing = method.ContainingType; + if (containing is null) + { + return false; + } + + if (SymbolEqualityComparer.Default.Equals(containing.OriginalDefinition, cacheProviderType)) + { + return true; + } + + if (method.IsExtensionMethod) + { + return false; + } + + foreach (var implemented in method.ExplicitInterfaceImplementations) + { + if (SymbolEqualityComparer.Default.Equals(implemented.ContainingType.OriginalDefinition, cacheProviderType)) + { + return true; + } + } + + var methodDefinition = method.OriginalDefinition; + foreach (var iface in containing.AllInterfaces) + { + if (!SymbolEqualityComparer.Default.Equals(iface.OriginalDefinition, cacheProviderType)) + { + continue; + } + + foreach (var member in iface.GetMembers(method.Name)) + { + if (member is not IMethodSymbol interfaceMethod) + { + continue; + } + + var implementor = containing.FindImplementationForInterfaceMember(interfaceMethod); + if (implementor is null) + { + continue; + } + + if (SymbolEqualityComparer.Default.Equals(implementor.OriginalDefinition, methodDefinition)) + { + return true; + } + } + } + + return false; + } +} diff --git a/src/QuerySpec.Analyzers/DiagnosticDescriptors.cs b/src/QuerySpec.Analyzers/DiagnosticDescriptors.cs new file mode 100644 index 0000000..c7a97ea --- /dev/null +++ b/src/QuerySpec.Analyzers/DiagnosticDescriptors.cs @@ -0,0 +1,67 @@ +using Microsoft.CodeAnalysis; + +namespace QuerySpec.Analyzers; + +/// +/// Shared instances for every QuerySpec migration diagnostic. +/// Descriptors are singletons so the analyzer +/// host can fingerprint them across compilations; do not allocate new descriptors per +/// ReportDiagnostic call. +/// +public static class DiagnosticDescriptors +{ + private const string Category = "QuerySpec.Migration"; + + private const string HelpLinkBase = + "https://github.com/AbongileBoja/QuerySpec/blob/main/docs/diagnostics/"; + + /// + /// QSPEC0001 — GeoLocation.Latitude / GeoLocation.Longitude member access. + /// + public static readonly DiagnosticDescriptor GeoLocationMemberAccess = new( + id: DiagnosticIds.GeoLocationMemberAccess, + title: "Use GeoCoordinate instead of GeoLocation.Latitude/.Longitude", + messageFormat: "'GeoLocation.{0}' is deprecated; use 'GeoCoordinate' (call 'ToGeoCoordinate()' to migrate)", + category: Category, + defaultSeverity: DiagnosticSeverity.Warning, + isEnabledByDefault: true, + description: + "GeoLocation exposes decimal latitude/longitude that contradicts every spatial library on .NET. " + + "GeoCoordinate is an immutable readonly record struct with double components, validated " + + "construction, and ISO 6709 round-trip. Will be removed in QuerySpec 4.0.", + helpLinkUri: HelpLinkBase + DiagnosticIds.GeoLocationMemberAccess + ".md"); + + /// + /// QSPEC0002 — usage of the mutable POCO AdvancedFilterExpression. + /// + public static readonly DiagnosticDescriptor AdvancedFilterExpressionUsage = new( + id: DiagnosticIds.AdvancedFilterExpressionUsage, + title: "Use FilterSpec instead of AdvancedFilterExpression", + messageFormat: "'AdvancedFilterExpression' is deprecated; use 'FilterSpec' (immutable record with init accessors)", + category: Category, + defaultSeverity: DiagnosticSeverity.Warning, + isEnabledByDefault: true, + description: + "AdvancedFilterExpression is a mutable POCO that leaks aliasing into compiled-expression " + + "caches and forces defensive copies for safe sharing. FilterSpec is a sealed record with " + + "init-only accessors, structural value equality, and the same Validate/ComputeStableHash " + + "semantics. Will be removed in QuerySpec 4.0.", + helpLinkUri: HelpLinkBase + DiagnosticIds.AdvancedFilterExpressionUsage + ".md"); + + /// + /// QSPEC0003 — invocation of ICacheProvider.GetAsync / SetAsync. + /// + public static readonly DiagnosticDescriptor CacheProviderInvocation = new( + id: DiagnosticIds.CacheProviderInvocation, + title: "Use ICacheStore instead of ICacheProvider GetAsync/SetAsync", + messageFormat: "'ICacheProvider.{0}' is deprecated; use 'ICacheStore.{1}' (no class constraint, value-type-friendly)", + category: Category, + defaultSeverity: DiagnosticSeverity.Warning, + isEnabledByDefault: true, + description: + "ICacheProvider.GetAsync/SetAsync require 'where T : class', excluding value " + + "types and producing ambiguous null-on-miss reads. ICacheStore.TryGetAsync returns " + + "CacheResult whose HasValue flag distinguishes a hit on default(T) from a miss. " + + "Will be removed in QuerySpec 4.0.", + helpLinkUri: HelpLinkBase + DiagnosticIds.CacheProviderInvocation + ".md"); +} diff --git a/src/QuerySpec.Analyzers/DiagnosticIds.cs b/src/QuerySpec.Analyzers/DiagnosticIds.cs new file mode 100644 index 0000000..2490297 --- /dev/null +++ b/src/QuerySpec.Analyzers/DiagnosticIds.cs @@ -0,0 +1,28 @@ +namespace QuerySpec.Analyzers; + +/// +/// Stable diagnostic identifiers emitted by the QuerySpec analyzer package. The IDs are part of +/// the package contract: changing one is a breaking change because it invalidates every +/// #pragma warning disable, NoWarn, and EditorConfig entry in consumer code. +/// +public static class DiagnosticIds +{ + /// + /// QSPEC0001: a member access reads GeoLocation.Latitude or + /// GeoLocation.Longitude. Migrate to GeoCoordinate. + /// + public const string GeoLocationMemberAccess = "QSPEC0001"; + + /// + /// QSPEC0002: a type reference, object creation, or member access targets + /// AdvancedFilterExpression. Migrate to FilterSpec. + /// + public const string AdvancedFilterExpressionUsage = "QSPEC0002"; + + /// + /// QSPEC0003: an invocation calls ICacheProvider.GetAsync<T> or + /// ICacheProvider.SetAsync<T>. Migrate to + /// ICacheStore.TryGetAsync<T> / SetValueAsync<T>. + /// + public const string CacheProviderInvocation = "QSPEC0003"; +} diff --git a/src/QuerySpec.Analyzers/GeoLocationMemberAccessAnalyzer.cs b/src/QuerySpec.Analyzers/GeoLocationMemberAccessAnalyzer.cs new file mode 100644 index 0000000..038e7ca --- /dev/null +++ b/src/QuerySpec.Analyzers/GeoLocationMemberAccessAnalyzer.cs @@ -0,0 +1,113 @@ +using System.Collections.Immutable; +using Microsoft.CodeAnalysis; +using Microsoft.CodeAnalysis.CSharp; +using Microsoft.CodeAnalysis.CSharp.Syntax; +using Microsoft.CodeAnalysis.Diagnostics; + +namespace QuerySpec.Analyzers; + +/// +/// Reports (QSPEC0001) on every read +/// of QuerySpec.Core.Advanced.GeoLocation.Latitude or .Longitude when the legacy +/// member is not already carrying an with the matching +/// DiagnosticId. +/// +/// +/// Detection runs against the semantic model — never against syntax text — so using +/// aliases, fully-qualified usages, and inherited member access all resolve to the same symbol +/// comparison. The analyzer scopes its registration to +/// only, so per-compilation cost is bounded by that node count rather than by every syntax node. +/// In normal QuerySpec consumption the property already carries +/// [Obsolete(DiagnosticId = "QSPEC0001")], so the compiler emits the diagnostic and the +/// analyzer suppresses the duplicate; this analyzer remains the backstop for forks or pre-3.1 +/// copies of the type and is the registration point the QSPEC0001 code fix targets. +/// +[DiagnosticAnalyzer(LanguageNames.CSharp)] +public sealed class GeoLocationMemberAccessAnalyzer : DiagnosticAnalyzer +{ + private const string GeoLocationFullName = "QuerySpec.Core.Advanced.GeoLocation"; + + /// + public override ImmutableArray SupportedDiagnostics { get; } = + ImmutableArray.Create(DiagnosticDescriptors.GeoLocationMemberAccess); + + /// + public override void Initialize(AnalysisContext context) + { + if (context is null) return; + + context.ConfigureGeneratedCodeAnalysis(GeneratedCodeAnalysisFlags.None); + context.EnableConcurrentExecution(); + + context.RegisterCompilationStartAction(static compilationStart => + { + var geoLocation = compilationStart.Compilation.GetTypeByMetadataName(GeoLocationFullName); + if (geoLocation is null) + { + return; + } + + compilationStart.RegisterSyntaxNodeAction( + ctx => Analyze(ctx, geoLocation), + SyntaxKind.SimpleMemberAccessExpression); + }); + } + + private static void Analyze(SyntaxNodeAnalysisContext context, INamedTypeSymbol geoLocationType) + { + var memberAccess = (MemberAccessExpressionSyntax)context.Node; + var name = memberAccess.Name.Identifier.ValueText; + + if (!string.Equals(name, "Latitude", System.StringComparison.Ordinal) + && !string.Equals(name, "Longitude", System.StringComparison.Ordinal)) + { + return; + } + + var symbol = context.SemanticModel.GetSymbolInfo(memberAccess, context.CancellationToken).Symbol; + if (symbol is not IPropertySymbol property) + { + return; + } + + if (!SymbolEqualityComparer.Default.Equals(property.ContainingType, geoLocationType)) + { + return; + } + + if (HasMatchingObsoleteAttribute(property)) + { + return; + } + + context.ReportDiagnostic(Diagnostic.Create( + DiagnosticDescriptors.GeoLocationMemberAccess, + memberAccess.Name.GetLocation(), + name)); + } + + private static bool HasMatchingObsoleteAttribute(ISymbol symbol) + { + foreach (var attribute in symbol.GetAttributes()) + { + var className = attribute.AttributeClass?.Name; + if (className is null + || !string.Equals(className, "ObsoleteAttribute", System.StringComparison.Ordinal)) + { + continue; + } + + foreach (var named in attribute.NamedArguments) + { + if (string.Equals(named.Key, "DiagnosticId", System.StringComparison.Ordinal) + && named.Value.Value is string id + && string.Equals(id, DiagnosticIds.GeoLocationMemberAccess, System.StringComparison.Ordinal)) + { + return true; + } + } + } + + return false; + } +} diff --git a/src/QuerySpec.Analyzers/PublicAPI.Shipped.txt b/src/QuerySpec.Analyzers/PublicAPI.Shipped.txt new file mode 100644 index 0000000..7dc5c58 --- /dev/null +++ b/src/QuerySpec.Analyzers/PublicAPI.Shipped.txt @@ -0,0 +1 @@ +#nullable enable diff --git a/src/QuerySpec.Analyzers/PublicAPI.Unshipped.txt b/src/QuerySpec.Analyzers/PublicAPI.Unshipped.txt new file mode 100644 index 0000000..f19840c --- /dev/null +++ b/src/QuerySpec.Analyzers/PublicAPI.Unshipped.txt @@ -0,0 +1,21 @@ +#nullable enable +QuerySpec.Analyzers.DiagnosticIds +QuerySpec.Analyzers.DiagnosticDescriptors +QuerySpec.Analyzers.GeoLocationMemberAccessAnalyzer +QuerySpec.Analyzers.GeoLocationMemberAccessAnalyzer.GeoLocationMemberAccessAnalyzer() -> void +override QuerySpec.Analyzers.GeoLocationMemberAccessAnalyzer.Initialize(Microsoft.CodeAnalysis.Diagnostics.AnalysisContext! context) -> void +override QuerySpec.Analyzers.GeoLocationMemberAccessAnalyzer.SupportedDiagnostics.get -> System.Collections.Immutable.ImmutableArray +QuerySpec.Analyzers.AdvancedFilterExpressionAnalyzer +QuerySpec.Analyzers.AdvancedFilterExpressionAnalyzer.AdvancedFilterExpressionAnalyzer() -> void +override QuerySpec.Analyzers.AdvancedFilterExpressionAnalyzer.Initialize(Microsoft.CodeAnalysis.Diagnostics.AnalysisContext! context) -> void +override QuerySpec.Analyzers.AdvancedFilterExpressionAnalyzer.SupportedDiagnostics.get -> System.Collections.Immutable.ImmutableArray +QuerySpec.Analyzers.CacheProviderInvocationAnalyzer +QuerySpec.Analyzers.CacheProviderInvocationAnalyzer.CacheProviderInvocationAnalyzer() -> void +override QuerySpec.Analyzers.CacheProviderInvocationAnalyzer.Initialize(Microsoft.CodeAnalysis.Diagnostics.AnalysisContext! context) -> void +override QuerySpec.Analyzers.CacheProviderInvocationAnalyzer.SupportedDiagnostics.get -> System.Collections.Immutable.ImmutableArray +const QuerySpec.Analyzers.DiagnosticIds.GeoLocationMemberAccess = "QSPEC0001" -> string! +const QuerySpec.Analyzers.DiagnosticIds.AdvancedFilterExpressionUsage = "QSPEC0002" -> string! +const QuerySpec.Analyzers.DiagnosticIds.CacheProviderInvocation = "QSPEC0003" -> string! +QuerySpec.Analyzers.DiagnosticDescriptors.GeoLocationMemberAccess -> Microsoft.CodeAnalysis.DiagnosticDescriptor! +QuerySpec.Analyzers.DiagnosticDescriptors.AdvancedFilterExpressionUsage -> Microsoft.CodeAnalysis.DiagnosticDescriptor! +QuerySpec.Analyzers.DiagnosticDescriptors.CacheProviderInvocation -> Microsoft.CodeAnalysis.DiagnosticDescriptor! diff --git a/src/QuerySpec.Analyzers/QuerySpec.Analyzers.csproj b/src/QuerySpec.Analyzers/QuerySpec.Analyzers.csproj new file mode 100644 index 0000000..0153cf2 --- /dev/null +++ b/src/QuerySpec.Analyzers/QuerySpec.Analyzers.csproj @@ -0,0 +1,60 @@ + + + + netstandard2.0 + + + QuerySpec.Analyzers + QuerySpec Analyzers + Roslyn analyzers and code fixes for the QuerySpec migration window. Ships QSPEC0001 (GeoLocation -> GeoCoordinate), QSPEC0002 (AdvancedFilterExpression -> FilterSpec), and QSPEC0003 (ICacheProvider -> ICacheStore) diagnostics with one-click code fixes and Fix-All-In-Document/Project/Solution support. + queryspec;analyzers;roslyn;codefix;migration;dotnet + + true + true + false + true + + true + QuerySpec.Analyzers + QuerySpec.Analyzers + false + false + + false + false + + + + + + + + + + + + + + + + + + + <_CodeFixDll>$(MSBuildThisFileDirectory)..\QuerySpec.Analyzers.CodeFixes\bin\$(Configuration)\netstandard2.0\QuerySpec.Analyzers.CodeFixes.dll + + + + + + + + + diff --git a/src/QuerySpec.Analyzers/icon.png b/src/QuerySpec.Analyzers/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3c82b23e0f430fcbf04e3cc13b5aeac9d3775bf8 GIT binary patch literal 45134 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%0AC5>{?}3nW2wYRRsQtDIH(G4 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 X0>4Xm46%hH)aN57r7YPfZW{hSVwA_4 literal 0 HcmV?d00001 diff --git a/tests/QuerySpec.Analyzers.Tests/AdvancedFilterExpressionAnalyzerTests.cs b/tests/QuerySpec.Analyzers.Tests/AdvancedFilterExpressionAnalyzerTests.cs new file mode 100644 index 0000000..a033104 --- /dev/null +++ b/tests/QuerySpec.Analyzers.Tests/AdvancedFilterExpressionAnalyzerTests.cs @@ -0,0 +1,202 @@ +using System.Threading.Tasks; +using QuerySpec.Analyzers.Tests.Verifiers; +using Xunit; +using VerifyAnalyzer = QuerySpec.Analyzers.Tests.Verifiers.CSharpAnalyzerVerifier; +using VerifyCodeFix = QuerySpec.Analyzers.Tests.Verifiers.CSharpCodeFixVerifier; + +namespace QuerySpec.Analyzers.Tests; + +public sealed class AdvancedFilterExpressionAnalyzerTests +{ + private static readonly string[] StubSources = { TestStubs.FilterTypes }; + + [Fact] + public async Task ObjectCreation_With_Initializer_Triggers_Diagnostic() + { + const string Source = """ + using QuerySpec.Core.Advanced; + + class C + { + object M() => new {|#0:AdvancedFilterExpression|} + { + Field = "Status", + Operator = FilterOperator.Equal, + Value = "Active", + }; + } + """; + + var expected = VerifyAnalyzer.Diagnostic(DiagnosticIds.AdvancedFilterExpressionUsage) + .WithLocation(0); + + await VerifyAnalyzer.VerifyAnalyzerAsync(Source, StubSources, expected); + } + + [Fact] + public async Task ObjectCreation_With_Default_Constructor_Triggers_Diagnostic() + { + const string Source = """ + using QuerySpec.Core.Advanced; + + class C + { + object M() => new {|#0:AdvancedFilterExpression|}(); + } + """; + + var expected = VerifyAnalyzer.Diagnostic(DiagnosticIds.AdvancedFilterExpressionUsage) + .WithLocation(0); + + await VerifyAnalyzer.VerifyAnalyzerAsync(Source, StubSources, expected); + } + + [Fact] + public async Task ObjectCreation_Of_FilterSpec_Does_Not_Trigger() + { + const string Source = """ + using QuerySpec.Core.Advanced; + + class C + { + object M() => new FilterSpec + { + Field = "Status", + Operator = FilterOperator.Equal, + Value = "Active", + }; + } + """; + + await VerifyAnalyzer.VerifyAnalyzerAsync(Source, StubSources); + } + + [Fact] + public async Task Suppression_Pragma_Silences_Diagnostic() + { + const string Source = """ + using QuerySpec.Core.Advanced; + + class C + { + object M() + { + #pragma warning disable QSPEC0002 + return new AdvancedFilterExpression { Field = "X" }; + #pragma warning restore QSPEC0002 + } + } + """; + + await VerifyAnalyzer.VerifyAnalyzerAsync(Source, StubSources); + } + + [Fact] + public async Task Analyzer_Suppresses_When_Type_Already_Has_Matching_Obsolete_DiagnosticId() + { + const string ObsoleteStub = """ + using System; + + namespace QuerySpec.Core.Advanced + { + [Obsolete("Use FilterSpec", DiagnosticId = "QSPEC0002")] + public class AdvancedFilterExpression + { + public string Field { get; set; } = ""; + } + } + """; + const string Source = """ + class C + { + #pragma warning disable QSPEC0002 + object M() => new QuerySpec.Core.Advanced.AdvancedFilterExpression(); + #pragma warning restore QSPEC0002 + } + """; + + await VerifyAnalyzer.VerifyAnalyzerAsync(Source, new[] { ObsoleteStub }); + } + + [Fact] + public void HelpLinkUri_Points_At_GitHub_Diagnostic_Reference() + { + var descriptor = DiagnosticDescriptors.AdvancedFilterExpressionUsage; + Assert.Equal( + "https://github.com/AbongileBoja/QuerySpec/blob/main/docs/diagnostics/QSPEC0002.md", + descriptor.HelpLinkUri); + Assert.Equal("QSPEC0002", descriptor.Id); + } + + [Fact] + public async Task CodeFix_Rewrites_AdvancedFilterExpression_To_FilterSpec() + { + const string Source = """ + using QuerySpec.Core.Advanced; + + class C + { + object M() => new {|#0:AdvancedFilterExpression|} + { + Field = "Status", + Operator = FilterOperator.Equal, + Value = "Active", + }; + } + """; + + const string Fixed = """ + using QuerySpec.Core.Advanced; + + class C + { + object M() => new FilterSpec + { + Field = "Status", + Operator = FilterOperator.Equal, + Value = "Active", + }; + } + """; + + var expected = VerifyCodeFix.Diagnostic(DiagnosticIds.AdvancedFilterExpressionUsage) + .WithLocation(0); + + await VerifyCodeFix.VerifyCodeFixAsync(Source, new[] { expected }, Fixed, StubSources); + } + + [Fact] + public async Task FixAll_Rewrites_Multiple_Object_Creations_In_Document() + { + const string Source = """ + using QuerySpec.Core.Advanced; + + class C + { + object A() => new {|#0:AdvancedFilterExpression|} { Field = "A" }; + object B() => new {|#1:AdvancedFilterExpression|} { Field = "B" }; + object D() => new {|#2:AdvancedFilterExpression|}(); + } + """; + + const string Fixed = """ + using QuerySpec.Core.Advanced; + + class C + { + object A() => new FilterSpec { Field = "A" }; + object B() => new FilterSpec { Field = "B" }; + object D() => new FilterSpec(); + } + """; + + var diagnostics = new[] + { + VerifyCodeFix.Diagnostic(DiagnosticIds.AdvancedFilterExpressionUsage).WithLocation(0), + VerifyCodeFix.Diagnostic(DiagnosticIds.AdvancedFilterExpressionUsage).WithLocation(1), + VerifyCodeFix.Diagnostic(DiagnosticIds.AdvancedFilterExpressionUsage).WithLocation(2), + }; + + await VerifyCodeFix.VerifyCodeFixAsync(Source, diagnostics, Fixed, StubSources); + } +} diff --git a/tests/QuerySpec.Analyzers.Tests/CacheProviderInvocationAnalyzerTests.cs b/tests/QuerySpec.Analyzers.Tests/CacheProviderInvocationAnalyzerTests.cs new file mode 100644 index 0000000..b9f9274 --- /dev/null +++ b/tests/QuerySpec.Analyzers.Tests/CacheProviderInvocationAnalyzerTests.cs @@ -0,0 +1,274 @@ +using System.Threading.Tasks; +using QuerySpec.Analyzers.Tests.Verifiers; +using Xunit; +using VerifyAnalyzer = QuerySpec.Analyzers.Tests.Verifiers.CSharpAnalyzerVerifier; +using VerifyCodeFix = QuerySpec.Analyzers.Tests.Verifiers.CSharpCodeFixVerifier; + +namespace QuerySpec.Analyzers.Tests; + +public sealed class CacheProviderInvocationAnalyzerTests +{ + private static readonly string[] StubSources = { TestStubs.CacheTypes }; + + [Fact] + public async Task GetAsync_On_ICacheProvider_Triggers_Diagnostic() + { + const string Source = """ + using System.Threading.Tasks; + using QuerySpec.Core.Caching; + + class C + { + async Task M(ICacheProvider cache) + { + return await cache.{|#0:GetAsync|}("k"); + } + } + """; + + var expected = VerifyAnalyzer.Diagnostic(DiagnosticIds.CacheProviderInvocation) + .WithLocation(0) + .WithArguments("GetAsync", "TryGetAsync"); + + await VerifyAnalyzer.VerifyAnalyzerAsync(Source, StubSources, expected); + } + + [Fact] + public async Task SetAsync_On_ICacheProvider_Triggers_Diagnostic() + { + const string Source = """ + using System.Threading.Tasks; + using QuerySpec.Core.Caching; + + class C + { + async Task M(ICacheProvider cache) + { + await cache.{|#0:SetAsync|}("k", "v"); + } + } + """; + + var expected = VerifyAnalyzer.Diagnostic(DiagnosticIds.CacheProviderInvocation) + .WithLocation(0) + .WithArguments("SetAsync", "SetValueAsync"); + + await VerifyAnalyzer.VerifyAnalyzerAsync(Source, StubSources, expected); + } + + [Fact] + public async Task TryGetAsync_On_ICacheStore_Does_Not_Trigger() + { + const string Source = """ + using System.Threading.Tasks; + using QuerySpec.Core.Caching; + + class C + { + async Task M(ICacheStore store) + { + var hit = await store.TryGetAsync("k"); + await store.SetValueAsync("k", 1); + } + } + """; + + await VerifyAnalyzer.VerifyAnalyzerAsync(Source, StubSources); + } + + [Fact] + public async Task GetAsync_On_Unrelated_Type_Does_Not_Trigger() + { + const string Source = """ + using System.Threading.Tasks; + + interface IOther + { + Task GetAsync(string key) where T : class; + } + + class C + { + async Task M(IOther o) => await o.GetAsync("k"); + } + """; + + await VerifyAnalyzer.VerifyAnalyzerAsync(Source); + } + + [Fact] + public async Task Suppression_Pragma_Silences_Diagnostic() + { + const string Source = """ + using System.Threading.Tasks; + using QuerySpec.Core.Caching; + + class C + { + async Task M(ICacheProvider cache) + { + #pragma warning disable QSPEC0003 + return await cache.GetAsync("k"); + #pragma warning restore QSPEC0003 + } + } + """; + + await VerifyAnalyzer.VerifyAnalyzerAsync(Source, StubSources); + } + + [Fact] + public async Task Analyzer_Suppresses_When_Method_Already_Has_Matching_Obsolete_DiagnosticId() + { + const string ObsoleteStub = """ + using System; + using System.Threading; + using System.Threading.Tasks; + + namespace QuerySpec.Core.Caching + { + public interface ICacheProvider + { + [Obsolete("Use ICacheStore.TryGetAsync", DiagnosticId = "QSPEC0003")] + ValueTask GetAsync(string key, CancellationToken cancellationToken = default) where T : class; + } + } + """; + const string Source = """ + using System.Threading.Tasks; + using QuerySpec.Core.Caching; + + class C + { + #pragma warning disable QSPEC0003 + async Task M(ICacheProvider cache) + => await cache.GetAsync("k"); + #pragma warning restore QSPEC0003 + } + """; + + await VerifyAnalyzer.VerifyAnalyzerAsync(Source, new[] { ObsoleteStub }); + } + + [Fact] + public void HelpLinkUri_Points_At_GitHub_Diagnostic_Reference() + { + var descriptor = DiagnosticDescriptors.CacheProviderInvocation; + Assert.Equal( + "https://github.com/AbongileBoja/QuerySpec/blob/main/docs/diagnostics/QSPEC0003.md", + descriptor.HelpLinkUri); + Assert.Equal("QSPEC0003", descriptor.Id); + } + + [Fact] + public async Task CodeFix_Rewrites_SetAsync_To_SetValueAsync() + { + const string Source = """ + using System.Threading.Tasks; + using QuerySpec.Core.Caching; + + class C + { + async Task M(TestCacheProvider cache) + { + await cache.{|#0:SetAsync|}("k", "v"); + } + } + """; + + const string Fixed = """ + using System.Threading.Tasks; + using QuerySpec.Core.Caching; + + class C + { + async Task M(TestCacheProvider cache) + { + await cache.SetValueAsync("k", "v"); + } + } + """; + + var expected = VerifyCodeFix.Diagnostic(DiagnosticIds.CacheProviderInvocation) + .WithLocation(0) + .WithArguments("SetAsync", "SetValueAsync"); + + await VerifyCodeFix.VerifyCodeFixAsync(Source, new[] { expected }, Fixed, StubSources); + } + + [Fact] + public async Task CodeFix_Rewrites_GetAsync_With_Await_To_TryGetAsync_Plus_GetValueOrDefault() + { + const string Source = """ + using System.Threading.Tasks; + using QuerySpec.Core.Caching; + + class C + { + async Task M(TestCacheProvider cache) + { + return await cache.{|#0:GetAsync|}("k"); + } + } + """; + + const string Fixed = """ + using System.Threading.Tasks; + using QuerySpec.Core.Caching; + + class C + { + async Task M(TestCacheProvider cache) + { + return (await cache.TryGetAsync("k")).GetValueOrDefault(); + } + } + """; + + var expected = VerifyCodeFix.Diagnostic(DiagnosticIds.CacheProviderInvocation) + .WithLocation(0) + .WithArguments("GetAsync", "TryGetAsync"); + + await VerifyCodeFix.VerifyCodeFixAsync(Source, new[] { expected }, Fixed, StubSources); + } + + [Fact] + public async Task FixAll_Rewrites_Multiple_Cache_Calls_In_Document() + { + const string Source = """ + using System.Threading.Tasks; + using QuerySpec.Core.Caching; + + class C + { + async Task Multi(TestCacheProvider cache) + { + await cache.{|#0:SetAsync|}("a", "x"); + await cache.{|#1:SetAsync|}("b", "y"); + } + } + """; + + const string Fixed = """ + using System.Threading.Tasks; + using QuerySpec.Core.Caching; + + class C + { + async Task Multi(TestCacheProvider cache) + { + await cache.SetValueAsync("a", "x"); + await cache.SetValueAsync("b", "y"); + } + } + """; + + var diagnostics = new[] + { + VerifyCodeFix.Diagnostic(DiagnosticIds.CacheProviderInvocation).WithLocation(0).WithArguments("SetAsync", "SetValueAsync"), + VerifyCodeFix.Diagnostic(DiagnosticIds.CacheProviderInvocation).WithLocation(1).WithArguments("SetAsync", "SetValueAsync"), + }; + + await VerifyCodeFix.VerifyCodeFixAsync(Source, diagnostics, Fixed, StubSources); + } +} diff --git a/tests/QuerySpec.Analyzers.Tests/GeoLocationMemberAccessAnalyzerTests.cs b/tests/QuerySpec.Analyzers.Tests/GeoLocationMemberAccessAnalyzerTests.cs new file mode 100644 index 0000000..8684494 --- /dev/null +++ b/tests/QuerySpec.Analyzers.Tests/GeoLocationMemberAccessAnalyzerTests.cs @@ -0,0 +1,233 @@ +using System.Threading.Tasks; +using QuerySpec.Analyzers.Tests.Verifiers; +using Xunit; +using VerifyAnalyzer = QuerySpec.Analyzers.Tests.Verifiers.CSharpAnalyzerVerifier; +using VerifyCodeFix = QuerySpec.Analyzers.Tests.Verifiers.CSharpCodeFixVerifier; + +namespace QuerySpec.Analyzers.Tests; + +public sealed class GeoLocationMemberAccessAnalyzerTests +{ + private static readonly string[] StubSources = { TestStubs.GeoTypes }; + + [Fact] + public async Task Latitude_Read_On_GeoLocation_Triggers_Diagnostic() + { + const string Source = """ + using QuerySpec.Core.Advanced; + + class C + { + double M(GeoLocation legacy) + { + return (double)legacy.{|#0:Latitude|}; + } + } + """; + + var expected = VerifyAnalyzer.Diagnostic(DiagnosticIds.GeoLocationMemberAccess) + .WithLocation(0) + .WithArguments("Latitude"); + + await VerifyAnalyzer.VerifyAnalyzerAsync(Source, StubSources, expected); + } + + [Fact] + public async Task Longitude_Read_On_GeoLocation_Triggers_Diagnostic() + { + const string Source = """ + using QuerySpec.Core.Advanced; + + class C + { + double M(GeoLocation legacy) + { + return (double)legacy.{|#0:Longitude|}; + } + } + """; + + var expected = VerifyAnalyzer.Diagnostic(DiagnosticIds.GeoLocationMemberAccess) + .WithLocation(0) + .WithArguments("Longitude"); + + await VerifyAnalyzer.VerifyAnalyzerAsync(Source, StubSources, expected); + } + + [Fact] + public async Task Latitude_Read_On_GeoCoordinate_Does_Not_Trigger() + { + const string Source = """ + using QuerySpec.Core.Advanced; + + class C + { + double M(GeoCoordinate coord) => coord.Latitude; + } + """; + + await VerifyAnalyzer.VerifyAnalyzerAsync(Source, StubSources); + } + + [Fact] + public async Task Member_On_Unrelated_Type_Does_Not_Trigger() + { + const string Source = """ + class Other + { + public double Latitude { get; set; } + public double Longitude { get; set; } + } + + class C + { + double M(Other o) => o.Latitude + o.Longitude; + } + """; + + await VerifyAnalyzer.VerifyAnalyzerAsync(Source); + } + + [Fact] + public async Task Suppression_Pragma_Silences_Diagnostic() + { + const string Source = """ + using QuerySpec.Core.Advanced; + + class C + { + double M(GeoLocation legacy) + { + #pragma warning disable QSPEC0001 + var lat = (double)legacy.Latitude; + #pragma warning restore QSPEC0001 + return lat; + } + } + """; + + await VerifyAnalyzer.VerifyAnalyzerAsync(Source, StubSources); + } + + [Fact] + public async Task Analyzer_Suppresses_When_Property_Already_Has_Matching_Obsolete_DiagnosticId() + { + const string ObsoleteStub = """ + using System; + + namespace QuerySpec.Core.Advanced + { + public class GeoLocation + { + [Obsolete("Use GeoCoordinate", DiagnosticId = "QSPEC0001")] + public decimal Latitude { get; set; } + } + + public readonly record struct GeoCoordinate + { + public double Latitude { get; } + } + } + """; + const string Source = """ + class C + { + decimal M(QuerySpec.Core.Advanced.GeoLocation legacy) + { + #pragma warning disable QSPEC0001 + return legacy.Latitude; + #pragma warning restore QSPEC0001 + } + } + """; + + await VerifyAnalyzer.VerifyAnalyzerAsync(Source, new[] { ObsoleteStub }); + } + + [Fact] + public void HelpLinkUri_Points_At_GitHub_Diagnostic_Reference() + { + var descriptor = DiagnosticDescriptors.GeoLocationMemberAccess; + Assert.Equal( + "https://github.com/AbongileBoja/QuerySpec/blob/main/docs/diagnostics/QSPEC0001.md", + descriptor.HelpLinkUri); + Assert.Equal("QSPEC0001", descriptor.Id); + } + + [Fact] + public async Task CodeFix_Rewrites_Latitude_Read_As_ToGeoCoordinate_Call() + { + const string Source = """ + using QuerySpec.Core.Advanced; + + class C + { + double M(GeoLocation legacy) + { + return (double)legacy.{|#0:Latitude|}; + } + } + """; + + const string Fixed = """ + using QuerySpec.Core.Advanced; + + class C + { + double M(GeoLocation legacy) + { + return (double)legacy.ToGeoCoordinate().Latitude; + } + } + """; + + var expected = VerifyCodeFix.Diagnostic(DiagnosticIds.GeoLocationMemberAccess) + .WithLocation(0) + .WithArguments("Latitude"); + + await VerifyCodeFix.VerifyCodeFixAsync(Source, new[] { expected }, Fixed, StubSources); + } + + [Fact] + public async Task FixAll_Rewrites_Multiple_Latitude_Longitude_Reads_In_Document() + { + const string Source = """ + using QuerySpec.Core.Advanced; + + class C + { + double Sum(GeoLocation a, GeoLocation b) + { + var x = (double)a.{|#0:Latitude|}; + var y = (double)a.{|#1:Longitude|}; + var z = (double)b.{|#2:Latitude|}; + return x + y + z; + } + } + """; + + const string Fixed = """ + using QuerySpec.Core.Advanced; + + class C + { + double Sum(GeoLocation a, GeoLocation b) + { + var x = (double)a.ToGeoCoordinate().Latitude; + var y = (double)a.ToGeoCoordinate().Longitude; + var z = (double)b.ToGeoCoordinate().Latitude; + return x + y + z; + } + } + """; + + var diagnostics = new[] + { + VerifyCodeFix.Diagnostic(DiagnosticIds.GeoLocationMemberAccess).WithLocation(0).WithArguments("Latitude"), + VerifyCodeFix.Diagnostic(DiagnosticIds.GeoLocationMemberAccess).WithLocation(1).WithArguments("Longitude"), + VerifyCodeFix.Diagnostic(DiagnosticIds.GeoLocationMemberAccess).WithLocation(2).WithArguments("Latitude"), + }; + + await VerifyCodeFix.VerifyCodeFixAsync(Source, diagnostics, Fixed, StubSources); + } +} diff --git a/tests/QuerySpec.Analyzers.Tests/QuerySpec.Analyzers.Tests.csproj b/tests/QuerySpec.Analyzers.Tests/QuerySpec.Analyzers.Tests.csproj new file mode 100644 index 0000000..25b5c51 --- /dev/null +++ b/tests/QuerySpec.Analyzers.Tests/QuerySpec.Analyzers.Tests.csproj @@ -0,0 +1,36 @@ + + + + net8.0;net9.0;net10.0 + enable + latest + true + Exe + $(NoWarn);CS1591;xUnit1051 + false + + + + + + + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + + + diff --git a/tests/QuerySpec.Analyzers.Tests/Verifiers/CSharpAnalyzerVerifier.cs b/tests/QuerySpec.Analyzers.Tests/Verifiers/CSharpAnalyzerVerifier.cs new file mode 100644 index 0000000..82ca6d8 --- /dev/null +++ b/tests/QuerySpec.Analyzers.Tests/Verifiers/CSharpAnalyzerVerifier.cs @@ -0,0 +1,49 @@ +using System.Threading; +using System.Threading.Tasks; +using Microsoft.CodeAnalysis; +using Microsoft.CodeAnalysis.CSharp.Testing; +using Microsoft.CodeAnalysis.Diagnostics; +using Microsoft.CodeAnalysis.Testing; + +namespace QuerySpec.Analyzers.Tests.Verifiers; + +/// +/// Thin wrapper over the Roslyn analyzer-testing harness pre-wired to net8 reference assemblies. +/// Tests inline their own stub types for the deprecated members so the analyzer is exercised in +/// isolation from the production [Obsolete(DiagnosticId="QSPEC####")] attribute path. +/// +/// The analyzer under test. +public static class CSharpAnalyzerVerifier + where TAnalyzer : DiagnosticAnalyzer, new() +{ + public static DiagnosticResult Diagnostic(string diagnosticId) + => new(diagnosticId, DiagnosticSeverity.Warning); + + public static DiagnosticResult Diagnostic(DiagnosticDescriptor descriptor) + => new(descriptor); + + public static Task VerifyAnalyzerAsync(string source, params DiagnosticResult[] expected) + => VerifyAnalyzerAsync(source, additionalSources: System.Array.Empty(), expected); + + public static Task VerifyAnalyzerAsync(string source, string[] additionalSources, params DiagnosticResult[] expected) + { + var test = new Test + { + TestCode = source, + }; + foreach (var extra in additionalSources) + { + test.TestState.Sources.Add(extra); + } + test.ExpectedDiagnostics.AddRange(expected); + return test.RunAsync(CancellationToken.None); + } + + public sealed class Test : CSharpAnalyzerTest + { + public Test() + { + ReferenceAssemblies = QuerySpecReferenceAssemblies.Default; + } + } +} diff --git a/tests/QuerySpec.Analyzers.Tests/Verifiers/CSharpCodeFixVerifier.cs b/tests/QuerySpec.Analyzers.Tests/Verifiers/CSharpCodeFixVerifier.cs new file mode 100644 index 0000000..d70eb82 --- /dev/null +++ b/tests/QuerySpec.Analyzers.Tests/Verifiers/CSharpCodeFixVerifier.cs @@ -0,0 +1,75 @@ +using System.Threading; +using System.Threading.Tasks; +using Microsoft.CodeAnalysis; +using Microsoft.CodeAnalysis.CodeFixes; +using Microsoft.CodeAnalysis.CSharp.Testing; +using Microsoft.CodeAnalysis.Diagnostics; +using Microsoft.CodeAnalysis.Testing; + +namespace QuerySpec.Analyzers.Tests.Verifiers; + +/// +/// Thin wrapper over the Roslyn code-fix-testing harness pre-wired to net8 reference assemblies. +/// +/// The analyzer that produces the diagnostic to fix. +/// The code-fix provider under test. +public static class CSharpCodeFixVerifier + where TAnalyzer : DiagnosticAnalyzer, new() + where TCodeFix : CodeFixProvider, new() +{ + public static DiagnosticResult Diagnostic(string diagnosticId) + => new(diagnosticId, DiagnosticSeverity.Warning); + + public static DiagnosticResult Diagnostic(DiagnosticDescriptor descriptor) + => new(descriptor); + + public static Task VerifyAnalyzerAsync(string source, params DiagnosticResult[] expected) + => VerifyAnalyzerAsync(source, System.Array.Empty(), expected); + + public static Task VerifyAnalyzerAsync(string source, string[] additionalSources, params DiagnosticResult[] expected) + { + var test = new Test + { + TestCode = source, + }; + foreach (var extra in additionalSources) + { + test.TestState.Sources.Add(extra); + } + test.ExpectedDiagnostics.AddRange(expected); + return test.RunAsync(CancellationToken.None); + } + + public static Task VerifyCodeFixAsync(string source, string fixedSource) + => VerifyCodeFixAsync(source, System.Array.Empty(), fixedSource, System.Array.Empty()); + + public static Task VerifyCodeFixAsync(string source, DiagnosticResult expected, string fixedSource) + => VerifyCodeFixAsync(source, new[] { expected }, fixedSource, System.Array.Empty()); + + public static Task VerifyCodeFixAsync(string source, DiagnosticResult[] expected, string fixedSource) + => VerifyCodeFixAsync(source, expected, fixedSource, System.Array.Empty()); + + public static Task VerifyCodeFixAsync(string source, DiagnosticResult[] expected, string fixedSource, string[] additionalSources) + { + var test = new Test + { + TestCode = source, + FixedCode = fixedSource, + }; + foreach (var extra in additionalSources) + { + test.TestState.Sources.Add(extra); + test.FixedState.Sources.Add(extra); + } + test.ExpectedDiagnostics.AddRange(expected); + return test.RunAsync(CancellationToken.None); + } + + public sealed class Test : CSharpCodeFixTest + { + public Test() + { + ReferenceAssemblies = QuerySpecReferenceAssemblies.Default; + } + } +} diff --git a/tests/QuerySpec.Analyzers.Tests/Verifiers/QuerySpecReferenceAssemblies.cs b/tests/QuerySpec.Analyzers.Tests/Verifiers/QuerySpecReferenceAssemblies.cs new file mode 100644 index 0000000..1f5ab70 --- /dev/null +++ b/tests/QuerySpec.Analyzers.Tests/Verifiers/QuerySpecReferenceAssemblies.cs @@ -0,0 +1,13 @@ +using Microsoft.CodeAnalysis.Testing; + +namespace QuerySpec.Analyzers.Tests.Verifiers; + +/// +/// Reference-assembly bundle every analyzer test inherits. Pinned to .NET 8 so the verifier +/// resolves a stable BCL surface across CI runners; the runtime test project itself executes on +/// net8/9/10 unchanged. +/// +internal static class QuerySpecReferenceAssemblies +{ + public static ReferenceAssemblies Default { get; } = ReferenceAssemblies.Net.Net80; +} diff --git a/tests/QuerySpec.Analyzers.Tests/Verifiers/TestStubs.cs b/tests/QuerySpec.Analyzers.Tests/Verifiers/TestStubs.cs new file mode 100644 index 0000000..184644c --- /dev/null +++ b/tests/QuerySpec.Analyzers.Tests/Verifiers/TestStubs.cs @@ -0,0 +1,102 @@ +namespace QuerySpec.Analyzers.Tests.Verifiers; + +/// +/// Shared stub source fragments for analyzer tests. The stubs reproduce the public shape of the +/// QuerySpec.Core types under test (names, namespaces, signatures) without the production +/// [Obsolete(DiagnosticId = "QSPEC####")] attributes — tests therefore observe ONLY the +/// analyzer's emitted diagnostic, not the compiler's already-shipped obsolete warning. This is +/// the same isolation strategy Roslyn's own analyzer test suite uses for OptionalAttribute and +/// SuppressMessageAttribute scenarios. +/// +internal static class TestStubs +{ + /// Stub of QuerySpec.Core.Advanced.GeoLocation and GeoCoordinate plus the migration helper. + public const string GeoTypes = """ + namespace QuerySpec.Core.Advanced + { + public class GeoLocation + { + public decimal Latitude { get; set; } + public decimal Longitude { get; set; } + public GeoLocation() { } + public GeoLocation(decimal latitude, decimal longitude) { Latitude = latitude; Longitude = longitude; } + public GeoCoordinate ToGeoCoordinate() => new((double)Latitude, (double)Longitude); + } + + public readonly record struct GeoCoordinate + { + public double Latitude { get; } + public double Longitude { get; } + public GeoCoordinate(double latitude, double longitude) { Latitude = latitude; Longitude = longitude; } + } + } + """; + + /// Stub of QuerySpec.Core.Advanced.AdvancedFilterExpression and FilterSpec. + public const string FilterTypes = """ + namespace QuerySpec.Core.Advanced + { + public enum FilterOperator { Equal, NotEqual } + + public class AdvancedFilterExpression + { + public string Field { get; set; } = ""; + public FilterOperator Operator { get; set; } + public object? Value { get; set; } + public AdvancedFilterExpression() { } + } + + public sealed record FilterSpec + { + public string Field { get; init; } = ""; + public FilterOperator Operator { get; init; } + public object? Value { get; init; } + } + } + """; + + /// Stub of QuerySpec.Core.Caching.ICacheProvider, ICacheStore, CacheResult, and a dual-interface concrete provider. + public const string CacheTypes = """ + using System; + using System.Threading; + using System.Threading.Tasks; + + namespace QuerySpec.Core.Caching + { + public readonly struct CacheResult + { + public bool HasValue { get; } + public T Value { get; } + public CacheResult(bool hasValue, T value) { HasValue = hasValue; Value = value; } + public T? GetValueOrDefault() => HasValue ? Value : default; + public T GetValueOrDefault(T fallback) => HasValue ? Value : fallback; + } + + public interface ICacheProvider + { + ValueTask GetAsync(string key, CancellationToken cancellationToken = default) where T : class; + ValueTask SetAsync(string key, T value, TimeSpan? expiration = null, CancellationToken cancellationToken = default) where T : class; + ValueTask RemoveAsync(string key, CancellationToken cancellationToken = default); + } + + public interface ICacheStore + { + ValueTask> TryGetAsync(string key, CancellationToken cancellationToken = default); + ValueTask SetValueAsync(string key, T value, TimeSpan? ttl = null, CancellationToken cancellationToken = default); + ValueTask RemoveAsync(string key, CancellationToken cancellationToken = default); + } + + // Mirrors the shipping MemoryCacheProvider/DistributedCacheProvider/MultiLevelCache + // shape: dual-interface so a consumer who already has the concrete instance can call + // either contract. The QSPEC0003 codefix's well-typed scenario. + public class TestCacheProvider : ICacheProvider, ICacheStore + { + public ValueTask GetAsync(string key, CancellationToken cancellationToken = default) where T : class => default; + public ValueTask SetAsync(string key, T value, TimeSpan? expiration = null, CancellationToken cancellationToken = default) where T : class => default; + public ValueTask> TryGetAsync(string key, CancellationToken cancellationToken = default) => default; + public ValueTask SetValueAsync(string key, T value, TimeSpan? ttl = null, CancellationToken cancellationToken = default) => default; + public ValueTask RemoveAsync(string key, CancellationToken cancellationToken = default) => default; + } + } + """; +} From 805f259cea6ad94812b11f4183c428330a11e0de Mon Sep 17 00:00:00 2001 From: Abongile Boja Date: Mon, 27 Apr 2026 13:54:46 +0200 Subject: [PATCH 2/2] chore(core): update QuerySpec.Analyzers package icon to branded logo Replace placeholder QuerySpec.Core icon with the dedicated Analyzers logo. Resized to 512x512 with white padding to honor NuGet's <=1MB icon limit (NU5047) and the square-icon convention used on nuget.org. Refs #151 --- src/QuerySpec.Analyzers/icon.png | Bin 45134 -> 166505 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/QuerySpec.Analyzers/icon.png b/src/QuerySpec.Analyzers/icon.png index 3c82b23e0f430fcbf04e3cc13b5aeac9d3775bf8..03435cb6d6263e9e075f80228d367a39464c4a69 100644 GIT binary patch literal 166505 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%0AC5>{?}3nW2wYRRsQtDIH(G4 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 X0>4Xm46%hH)aN57r7YPfZW{hSVwA_4