From 60b00ff70b8339d2b2413b974401b307bf316b89 Mon Sep 17 00:00:00 2001 From: MartyIX <203266+MartyIX@users.noreply.github.com> Date: Wed, 18 Sep 2024 21:28:01 +0200 Subject: [PATCH 01/14] test --- ...unityToolkitInitializationAnalyzerTests.cs | 135 +++++++++--------- ...eCommunityToolkitInitializationAnalyzer.cs | 42 +++--- 2 files changed, 96 insertions(+), 81 deletions(-) diff --git a/src/CommunityToolkit.Maui.Analyzers.UnitTests/UseCommunityToolkitInitializationAnalyzerTests.cs b/src/CommunityToolkit.Maui.Analyzers.UnitTests/UseCommunityToolkitInitializationAnalyzerTests.cs index 4fc02d3fee..5cb7894e94 100644 --- a/src/CommunityToolkit.Maui.Analyzers.UnitTests/UseCommunityToolkitInitializationAnalyzerTests.cs +++ b/src/CommunityToolkit.Maui.Analyzers.UnitTests/UseCommunityToolkitInitializationAnalyzerTests.cs @@ -16,61 +16,64 @@ public void UseCommunityToolkitInitializationAnalyzerId() [Fact] public async Task VerifyNoErrorsWhenUseMauiCommunityToolkit() { - const string source = @" -namespace CommunityToolkit.Maui.Analyzers.UnitTests -{ - using Microsoft.Maui.Controls.Hosting; - using Microsoft.Maui.Hosting; - using CommunityToolkit.Maui; + const string source = /* language=C#-test */ """ + namespace CommunityToolkit.Maui.Analyzers.UnitTests + { + using Microsoft.Maui.Controls.Hosting; + using Microsoft.Maui.Hosting; + using CommunityToolkit.Maui; - public static class MauiProgram - { - public static MauiApp CreateMauiApp() - { - var builder = MauiApp.CreateBuilder(); - builder.UseMauiApp() - .UseMauiCommunityToolkit() - .ConfigureFonts(fonts => + public static class MauiProgram { - fonts.AddFont(""OpenSans-Regular.ttf"", ""OpenSansRegular""); - fonts.AddFont(""OpenSans-Semibold.ttf"", ""OpenSansSemibold""); - }); + public static MauiApp CreateMauiApp() + { + var builder = MauiApp.CreateBuilder(); + builder.UseMauiApp() + .UseMauiCommunityToolkit() + .ConfigureFonts(fonts => + { + fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular"); + fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold"); + }); - return builder.Build(); - } - } -}"; + return builder.Build(); + } + } + } + """; - await VerifyMauiToolkitAnalyzer(source); + + await VerifyMauiToolkitAnalyzer(source); } [Fact] public async Task VerifyNoErrorsWhenUseMauiCommunityToolkitHasAdditonalWhitespace() { - const string source = @" -namespace CommunityToolkit.Maui.Analyzers.UnitTests -{ - using Microsoft.Maui.Controls.Hosting; - using Microsoft.Maui.Hosting; - using CommunityToolkit.Maui; + const string source = /* language=C#-test */ """ + namespace CommunityToolkit.Maui.Analyzers.UnitTests + { + using Microsoft.Maui.Controls.Hosting; + using Microsoft.Maui.Hosting; + using CommunityToolkit.Maui; - public static class MauiProgram - { - public static MauiApp CreateMauiApp() - { - var builder = MauiApp.CreateBuilder (); - builder.UseMauiApp () - .UseMauiCommunityToolkit () - .ConfigureFonts (fonts => + public static class MauiProgram { - fonts.AddFont(""OpenSans-Regular.ttf"", ""OpenSansRegular""); - fonts.AddFont(""OpenSans-Semibold.ttf"", ""OpenSansSemibold""); - }); + public static MauiApp CreateMauiApp() + { + var builder = MauiApp.CreateBuilder (); + builder.UseMauiApp () + .UseMauiCommunityToolkit () + .ConfigureFonts (fonts => + { + fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular"); + fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold"); + }); - return builder.Build (); - } - } -}"; + return builder.Build (); + } + } + } + """; await VerifyMauiToolkitAnalyzer(source); } @@ -78,31 +81,33 @@ public static MauiApp CreateMauiApp() [Fact] public async Task VerifyErrorsWhenMissingUseMauiCommunityToolkit() { - const string source = @" -namespace CommunityToolkit.Maui.Analyzers.UnitTests -{ - using Microsoft.Maui.Controls.Hosting; - using Microsoft.Maui.Hosting; - using CommunityToolkit.Maui; + const string source = /* language=C#-test */ """ - public static class MauiProgram - { - public static MauiApp CreateMauiApp() - { - var builder = MauiApp.CreateBuilder(); - builder.UseMauiApp() - .ConfigureFonts(fonts => + namespace CommunityToolkit.Maui.Analyzers.UnitTests + { + using Microsoft.Maui.Controls.Hosting; + using Microsoft.Maui.Hosting; + using CommunityToolkit.Maui; + + public static class MauiProgram { - fonts.AddFont(""OpenSans-Regular.ttf"", ""OpenSansRegular""); - fonts.AddFont(""OpenSans-Semibold.ttf"", ""OpenSansSemibold""); - }); + public static MauiApp CreateMauiApp() + { + var builder = MauiApp.CreateBuilder(); + builder.[|UseMauiApp|]() + .ConfigureFonts(fonts => + { + fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular"); + fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold"); + }); - return builder.Build(); - } - } -}"; - - await VerifyMauiToolkitAnalyzer(source, Diagnostic().WithSpan(13, 4, 13, 61).WithSeverity(DiagnosticSeverity.Error)); + return builder.Build(); + } + } + } + """; + + await VerifyMauiToolkitAnalyzer(source); } static Task VerifyMauiToolkitAnalyzer(string source, params DiagnosticResult[] expected) diff --git a/src/CommunityToolkit.Maui.Analyzers/UseCommunityToolkitInitializationAnalyzer.cs b/src/CommunityToolkit.Maui.Analyzers/UseCommunityToolkitInitializationAnalyzer.cs index f58d7fe30a..87eff31e4f 100644 --- a/src/CommunityToolkit.Maui.Analyzers/UseCommunityToolkitInitializationAnalyzer.cs +++ b/src/CommunityToolkit.Maui.Analyzers/UseCommunityToolkitInitializationAnalyzer.cs @@ -27,29 +27,39 @@ public override void Initialize(AnalysisContext context) { context.ConfigureGeneratedCodeAnalysis(GeneratedCodeAnalysisFlags.None); context.EnableConcurrentExecution(); - context.RegisterSyntaxNodeAction(AnalyzeNode, SyntaxKind.InvocationExpression); + context.RegisterSyntaxNodeAction(AnalyzeNode, SyntaxKind.SimpleMemberAccessExpression); } static void AnalyzeNode(SyntaxNodeAnalysisContext context) { - if (context.Node is InvocationExpressionSyntax invocationExpression - && invocationExpression.Expression is MemberAccessExpressionSyntax memberAccessExpression - && memberAccessExpression.Name.Identifier.ValueText == useMauiAppMethodName) + var memberAccessExpression = (MemberAccessExpressionSyntax)context.Node; + + if (memberAccessExpression.Name is not GenericNameSyntax genericName) + { + return; + } + + if (genericName.Arity != 1 || genericName.Identifier.Text != useMauiAppMethodName) { - var root = invocationExpression.SyntaxTree.GetRoot(); - var methodDeclaration = root.FindNode(invocationExpression.FullSpan) - .Ancestors() - .OfType() - .FirstOrDefault(); - - if (methodDeclaration is not null - && !methodDeclaration.DescendantNodes().OfType().Any(static n => - n.Expression is MemberAccessExpressionSyntax m && - m.Name.Identifier.ValueText == useMauiCommunityToolkitMethodName)) + return; + } + + var root = memberAccessExpression.SyntaxTree.GetRoot(); + bool found = false; + + foreach (var item in root.DescendantNodes().OfType()) + { + if (item.Name is IdentifierNameSyntax identifierName && identifierName.Identifier.Text == useMauiCommunityToolkitMethodName) { - var diagnostic = Diagnostic.Create(rule, invocationExpression.GetLocation()); - context.ReportDiagnostic(diagnostic); + found = true; + break; } } + + if (!found) + { + var diagnostic = Diagnostic.Create(rule, genericName.GetLocation()); + context.ReportDiagnostic(diagnostic); + } } } \ No newline at end of file From 4b4fd85c53b321e6b38ecc1deb21ca750638dc77 Mon Sep 17 00:00:00 2001 From: Brandon Minnick <13558917+brminnick@users.noreply.github.com> Date: Wed, 18 Sep 2024 14:59:54 -0700 Subject: [PATCH 02/14] Add Benchmarks --- .gitignore | 3 ++ samples/CommunityToolkit.Maui.Sample.sln | 13 +++++++-- ...tyToolkit.Maui.Analyzers.Benchmarks.csproj | 22 +++++++++++++++ .../CommunityToolkitMauiAnalyzerBenchmarks.cs | 28 +++++++++++++++++++ .../Program.cs | 13 +++++++++ 5 files changed, 77 insertions(+), 2 deletions(-) create mode 100644 src/CommunityToolkit.Maui.Analyzers.Benchmarks/CommunityToolkit.Maui.Analyzers.Benchmarks.csproj create mode 100644 src/CommunityToolkit.Maui.Analyzers.Benchmarks/CommunityToolkitMauiAnalyzerBenchmarks.cs create mode 100644 src/CommunityToolkit.Maui.Analyzers.Benchmarks/Program.cs diff --git a/.gitignore b/.gitignore index 6700a158b5..10868dd944 100644 --- a/.gitignore +++ b/.gitignore @@ -265,3 +265,6 @@ paket-files/ # Visual Studio Code .vscode /samples/workload-install.ps1 + +# Benchmarkdot +BenchmarkDotNet.Artifacts/ \ No newline at end of file diff --git a/samples/CommunityToolkit.Maui.Sample.sln b/samples/CommunityToolkit.Maui.Sample.sln index edb8ed88f9..94bec1c258 100644 --- a/samples/CommunityToolkit.Maui.Sample.sln +++ b/samples/CommunityToolkit.Maui.Sample.sln @@ -1,6 +1,6 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# 17 +# Visual Studio Version 17 VisualStudioVersion = 17.0.31521.260 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CommunityToolkit.Maui.UnitTests", "..\src\CommunityToolkit.Maui.UnitTests\CommunityToolkit.Maui.UnitTests.csproj", "{7D49CC16-93CF-471B-B1FA-0BA44DECC15D}" @@ -49,6 +49,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CommunityToolkit.Maui.Camer EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CommunityToolkit.Maui.Camera.Analyzers", "..\src\CommunityToolkit.Maui.Camera.Analyzers\CommunityToolkit.Maui.Camera.Analyzers.csproj", "{02C5B93A-B8D6-421D-B0EA-D0CC41A00F0B}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Benchmarks", "Benchmarks", "{ED5A9C0B-D270-442D-BABE-F4FF622926C8}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CommunityToolkit.Maui.Analyzers.Benchmarks.csproj", "..\src\CommunityToolkit.Maui.Analyzers.Benchmarks\CommunityToolkit.Maui.Analyzers.Benchmarks.csproj", "{B80F59B7-276C-4A55-A8DD-54587C8BC3D2}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -123,6 +127,10 @@ Global {02C5B93A-B8D6-421D-B0EA-D0CC41A00F0B}.Debug|Any CPU.Build.0 = Debug|Any CPU {02C5B93A-B8D6-421D-B0EA-D0CC41A00F0B}.Release|Any CPU.ActiveCfg = Release|Any CPU {02C5B93A-B8D6-421D-B0EA-D0CC41A00F0B}.Release|Any CPU.Build.0 = Release|Any CPU + {B80F59B7-276C-4A55-A8DD-54587C8BC3D2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B80F59B7-276C-4A55-A8DD-54587C8BC3D2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B80F59B7-276C-4A55-A8DD-54587C8BC3D2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B80F59B7-276C-4A55-A8DD-54587C8BC3D2}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -137,8 +145,9 @@ Global {85B875BD-62F6-4EC3-BCFF-4DC25E94BCAE} = {9BFC4026-BC8F-43E2-BAA9-5BC2D764D37D} {215083C8-D9CA-48FA-8B0A-1D21A989D055} = {9BFC4026-BC8F-43E2-BAA9-5BC2D764D37D} {8CDCF66E-D969-4BFD-A6E3-816BBE5F80B6} = {9BFC4026-BC8F-43E2-BAA9-5BC2D764D37D} - {02C5B93A-B8D6-421D-B0EA-D0CC41A00F0B} = {9BFC4026-BC8F-43E2-BAA9-5BC2D764D37D} {372D6A40-A4E0-434A-A463-C001441C68EB} = {9BFC4026-BC8F-43E2-BAA9-5BC2D764D37D} + {02C5B93A-B8D6-421D-B0EA-D0CC41A00F0B} = {9BFC4026-BC8F-43E2-BAA9-5BC2D764D37D} + {B80F59B7-276C-4A55-A8DD-54587C8BC3D2} = {ED5A9C0B-D270-442D-BABE-F4FF622926C8} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {1E9E61C1-5CB7-4C8E-87BA-6C1D38238679} diff --git a/src/CommunityToolkit.Maui.Analyzers.Benchmarks/CommunityToolkit.Maui.Analyzers.Benchmarks.csproj b/src/CommunityToolkit.Maui.Analyzers.Benchmarks/CommunityToolkit.Maui.Analyzers.Benchmarks.csproj new file mode 100644 index 0000000000..b871c06c5a --- /dev/null +++ b/src/CommunityToolkit.Maui.Analyzers.Benchmarks/CommunityToolkit.Maui.Analyzers.Benchmarks.csproj @@ -0,0 +1,22 @@ + + + net8.0 + Exe + + + AnyCPU + pdbonly + true + true + true + Release + false + + + + + + + + + \ No newline at end of file diff --git a/src/CommunityToolkit.Maui.Analyzers.Benchmarks/CommunityToolkitMauiAnalyzerBenchmarks.cs b/src/CommunityToolkit.Maui.Analyzers.Benchmarks/CommunityToolkitMauiAnalyzerBenchmarks.cs new file mode 100644 index 0000000000..eef7bf87b6 --- /dev/null +++ b/src/CommunityToolkit.Maui.Analyzers.Benchmarks/CommunityToolkitMauiAnalyzerBenchmarks.cs @@ -0,0 +1,28 @@ +using BenchmarkDotNet.Attributes; +using CommunityToolkit.Maui.Analyzers.UnitTests; + +namespace CommunityToolkit.Maui.Analyzers.Benchmarks; + +[MemoryDiagnoser] +public class CommunityToolkitMauiAnalyzerBenchmarks +{ + static readonly UseCommunityToolkitInitializationAnalyzerTests useCommunityToolkitInitializationAnalyzerTests = new(); + + [Benchmark] + public Task VerifyNoErrorsWhenUseMauiCommunityToolkit() + { + return useCommunityToolkitInitializationAnalyzerTests.VerifyNoErrorsWhenUseMauiCommunityToolkit(); + } + + [Benchmark] + public Task VerifyNoErrorsWhenUseMauiCommunityToolkitHasAdditonalWhitespace() + { + return useCommunityToolkitInitializationAnalyzerTests.VerifyNoErrorsWhenUseMauiCommunityToolkitHasAdditonalWhitespace(); + } + + [Benchmark] + public Task VerifyErrorsWhenMissingUseMauiCommunityToolkit() + { + return useCommunityToolkitInitializationAnalyzerTests.VerifyErrorsWhenMissingUseMauiCommunityToolkit(); + } +} diff --git a/src/CommunityToolkit.Maui.Analyzers.Benchmarks/Program.cs b/src/CommunityToolkit.Maui.Analyzers.Benchmarks/Program.cs new file mode 100644 index 0000000000..b808722149 --- /dev/null +++ b/src/CommunityToolkit.Maui.Analyzers.Benchmarks/Program.cs @@ -0,0 +1,13 @@ +using BenchmarkDotNet.Configs; +using BenchmarkDotNet.Running; + +namespace CommunityToolkit.Maui.Analyzers.Benchmarks; + +public class Program +{ + public static void Main(string[] args) + { + var config = DefaultConfig.Instance; + var summary = BenchmarkRunner.Run(config, args); + } +} \ No newline at end of file From 75cf7cc8c1a806e9de1ed623962a1ea80a669f13 Mon Sep 17 00:00:00 2001 From: Brandon Minnick <13558917+brminnick@users.noreply.github.com> Date: Wed, 18 Sep 2024 15:06:40 -0700 Subject: [PATCH 03/14] Add Camera + MediaElement Analyzer Benchmarks --- ...ommunityToolkitCameraAnalyzerBenchmarks.cs | 28 +++++++++++++++++++ ...tyToolkitMediaElementAnalyzerBenchmarks.cs | 28 +++++++++++++++++++ 2 files changed, 56 insertions(+) create mode 100644 src/CommunityToolkit.Maui.Analyzers.Benchmarks/CommunityToolkitCameraAnalyzerBenchmarks.cs create mode 100644 src/CommunityToolkit.Maui.Analyzers.Benchmarks/CommunityToolkitMediaElementAnalyzerBenchmarks.cs diff --git a/src/CommunityToolkit.Maui.Analyzers.Benchmarks/CommunityToolkitCameraAnalyzerBenchmarks.cs b/src/CommunityToolkit.Maui.Analyzers.Benchmarks/CommunityToolkitCameraAnalyzerBenchmarks.cs new file mode 100644 index 0000000000..f34c138f31 --- /dev/null +++ b/src/CommunityToolkit.Maui.Analyzers.Benchmarks/CommunityToolkitCameraAnalyzerBenchmarks.cs @@ -0,0 +1,28 @@ +using BenchmarkDotNet.Attributes; +using CommunityToolkit.Maui.Analyzers.UnitTests; + +namespace CommunityToolkit.Maui.Analyzers.Benchmarks; + +[MemoryDiagnoser] +class CommunityToolkitCameraAnalyzerBenchmarks +{ + static readonly UseCommunityToolkitCameraInitializationAnalyzerTests useCommunityToolkitCameraInitializationAnalyzerTests = new(); + + [Benchmark] + public Task VerifyNoErrorsWhenUseMauiCommunityToolkitCamera() + { + return useCommunityToolkitCameraInitializationAnalyzerTests.VerifyNoErrorsWhenUseMauiCommunityToolkitCamera(); + } + + [Benchmark] + public Task VerifyNoErrorsWhenUseMauiCommunityToolkitCameraHasAdditonalWhitespace() + { + return useCommunityToolkitCameraInitializationAnalyzerTests.VerifyNoErrorsWhenUseMauiCommunityToolkitCameraHasAdditonalWhitespace(); + } + + [Benchmark] + public Task VerifyErrorsWhenMissingUseMauiCommunityToolkitCamera() + { + return useCommunityToolkitCameraInitializationAnalyzerTests.VerifyErrorsWhenMissingUseMauiCommunityToolkitCamera(); + } +} diff --git a/src/CommunityToolkit.Maui.Analyzers.Benchmarks/CommunityToolkitMediaElementAnalyzerBenchmarks.cs b/src/CommunityToolkit.Maui.Analyzers.Benchmarks/CommunityToolkitMediaElementAnalyzerBenchmarks.cs new file mode 100644 index 0000000000..67dbe1fc0c --- /dev/null +++ b/src/CommunityToolkit.Maui.Analyzers.Benchmarks/CommunityToolkitMediaElementAnalyzerBenchmarks.cs @@ -0,0 +1,28 @@ +using BenchmarkDotNet.Attributes; +using CommunityToolkit.Maui.Analyzers.UnitTests; + +namespace CommunityToolkit.Maui.Analyzers.Benchmarks; + +[MemoryDiagnoser] +public class CommunityToolkitMediaElementInitializationAnalyzerBenchmarks +{ + static readonly UseCommunityToolkitMediaElementInitializationAnalyzerTests useCommunityToolkitMediaElementInitializationAnalyzerTests = new(); + + [Benchmark] + public Task VerifyNoErrorsWhenUseMauiCommunityToolkitMediaElement() + { + return useCommunityToolkitMediaElementInitializationAnalyzerTests.VerifyNoErrorsWhenUseMauiCommunityToolkitMediaElement(); + } + + [Benchmark] + public Task VerifyNoErrorsWhenUseMauiCommunityToolkitMediaElementHasAdditonalWhitespace() + { + return useCommunityToolkitMediaElementInitializationAnalyzerTests.VerifyNoErrorsWhenUseMauiCommunityToolkitMediaElementHasAdditonalWhitespace(); + } + + [Benchmark] + public Task VerifyErrorsWhenMissingUseMauiCommunityToolkitMediaElement() + { + return useCommunityToolkitMediaElementInitializationAnalyzerTests.VerifyErrorsWhenMissingUseMauiCommunityToolkitMediaElement(); + } +} From 7b48950c463c7f4f17ec8dcd981a1fe7ece10fb9 Mon Sep 17 00:00:00 2001 From: Brandon Minnick <13558917+brminnick@users.noreply.github.com> Date: Wed, 18 Sep 2024 15:08:26 -0700 Subject: [PATCH 04/14] Add `run_benchmarks` --- azure-pipelines.yml | 56 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index a45eee7a9f..ffa5521bad 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -26,6 +26,7 @@ variables: PathToCommunityToolkitCameraAnalyzersCodeFixCsproj: 'src/CommunityToolkit.Maui.Camera.Analyzers.CodeFixes/CommunityToolkit.Maui.Camera.Analyzers.CodeFixes.csproj' PathToCommunityToolkitMediaElementAnalyzersCodeFixCsproj: 'src/CommunityToolkit.Maui.MediaElement.Analyzers.CodeFixes/CommunityToolkit.Maui.MediaElement.Analyzers.CodeFixes.csproj' PathToCommunityToolkitAnalyzersUnitTestCsproj: 'src/CommunityToolkit.Maui.Analyzers.UnitTests/CommunityToolkit.Maui.Analyzers.UnitTests.csproj' + PathToCommunityToolkitAnalyzersBenchmarkCsproj: 'src/CommunityToolkit.Maui.Analyzers.Benchmarks/CommunityToolkit.Maui.Analyzers.Benchmarks.csproj' DotNetMauiRollbackFile: 'https://maui.blob.core.windows.net/metadata/rollbacks/8.0.6.json' CommunityToolkitSampleApp_Xcode_Version: '15.4' CommunityToolkitLibrary_Xcode_Version: '15.4' @@ -442,3 +443,58 @@ jobs: inputs: artifactName: nuget pathToPublish: '$(Build.ArtifactStagingDirectory)' + +- job: run_benchmarks + displayName: Run Benchmarks + strategy: + matrix: + 'Windows': + image: 'windows-latest' + 'macOS': + image: 'macos-14' + pool: + vmImage: $(image) + steps: + - script: | + sudo xcode-select -s /Applications/Xcode_$(CommunityToolkitLibrary_Xcode_Version).app + sudo xcode-select -p + displayName: 'Set Xcode v$(CommunityToolkitLibrary_Xcode_Version)' + condition: eq(variables['Agent.OS'], 'Darwin') # Only run this step on macOS + + - task: UseDotNet@2 + displayName: 'Install .NET SDK' + inputs: + packageType: 'sdk' + version: '$(NET_VERSION)' + includePreviewVersions: false + + - task: CmdLine@2 + displayName: 'Install .NET MAUI Workload' + inputs: + script : 'dotnet workload install maui' + + - pwsh: | + Invoke-WebRequest 'https://raw.githubusercontent.com/Samsung/Tizen.NET/main/workload/scripts/workload-install.ps1' -OutFile 'workload-install.ps1' + .\workload-install.ps1 + displayName: Install Tizen Workload + + # Print Information on the .NET SDK Used By the CI Build Host + # These logs are useful information when debugging CI Builds + # Note: This step doesn't execute nor modify any code; it is strictly used for logging + debugging purposes + - task: CmdLine@2 + displayName: 'Display dotnet --info' + inputs: + script: dotnet --info + + - task: CmdLine@2 + displayName: 'Run Benchmarks' + inputs: + script : 'dotnet run --project $(PathToCommunityToolkitAnalyzersBenchmarkCsproj) -c Release -- -a $(Build.ArtifactStagingDirectory)' + + # publish the Benchmark Results + - task: PublishBuildArtifacts@1 + condition: eq(variables['Agent.OS'], 'Windows_NT') # Only run this step on Windows + displayName: 'Publish Benchmark Artifacts' + inputs: + artifactName: benchmarks + pathToPublish: '$(Build.ArtifactStagingDirectory)' \ No newline at end of file From 52cf3d56565b6ef6b538b067524301233a80b6d4 Mon Sep 17 00:00:00 2001 From: Brandon Minnick <13558917+brminnick@users.noreply.github.com> Date: Wed, 18 Sep 2024 15:11:32 -0700 Subject: [PATCH 05/14] Revert to main --- ...eCommunityToolkitInitializationAnalyzer.cs | 42 +++++++------------ 1 file changed, 16 insertions(+), 26 deletions(-) diff --git a/src/CommunityToolkit.Maui.Analyzers/UseCommunityToolkitInitializationAnalyzer.cs b/src/CommunityToolkit.Maui.Analyzers/UseCommunityToolkitInitializationAnalyzer.cs index 87eff31e4f..f58d7fe30a 100644 --- a/src/CommunityToolkit.Maui.Analyzers/UseCommunityToolkitInitializationAnalyzer.cs +++ b/src/CommunityToolkit.Maui.Analyzers/UseCommunityToolkitInitializationAnalyzer.cs @@ -27,39 +27,29 @@ public override void Initialize(AnalysisContext context) { context.ConfigureGeneratedCodeAnalysis(GeneratedCodeAnalysisFlags.None); context.EnableConcurrentExecution(); - context.RegisterSyntaxNodeAction(AnalyzeNode, SyntaxKind.SimpleMemberAccessExpression); + context.RegisterSyntaxNodeAction(AnalyzeNode, SyntaxKind.InvocationExpression); } static void AnalyzeNode(SyntaxNodeAnalysisContext context) { - var memberAccessExpression = (MemberAccessExpressionSyntax)context.Node; - - if (memberAccessExpression.Name is not GenericNameSyntax genericName) - { - return; - } - - if (genericName.Arity != 1 || genericName.Identifier.Text != useMauiAppMethodName) + if (context.Node is InvocationExpressionSyntax invocationExpression + && invocationExpression.Expression is MemberAccessExpressionSyntax memberAccessExpression + && memberAccessExpression.Name.Identifier.ValueText == useMauiAppMethodName) { - return; - } - - var root = memberAccessExpression.SyntaxTree.GetRoot(); - bool found = false; - - foreach (var item in root.DescendantNodes().OfType()) - { - if (item.Name is IdentifierNameSyntax identifierName && identifierName.Identifier.Text == useMauiCommunityToolkitMethodName) + var root = invocationExpression.SyntaxTree.GetRoot(); + var methodDeclaration = root.FindNode(invocationExpression.FullSpan) + .Ancestors() + .OfType() + .FirstOrDefault(); + + if (methodDeclaration is not null + && !methodDeclaration.DescendantNodes().OfType().Any(static n => + n.Expression is MemberAccessExpressionSyntax m && + m.Name.Identifier.ValueText == useMauiCommunityToolkitMethodName)) { - found = true; - break; + var diagnostic = Diagnostic.Create(rule, invocationExpression.GetLocation()); + context.ReportDiagnostic(diagnostic); } } - - if (!found) - { - var diagnostic = Diagnostic.Create(rule, genericName.GetLocation()); - context.ReportDiagnostic(diagnostic); - } } } \ No newline at end of file From c203c2280287756049cd585f7d929cdf16d34405 Mon Sep 17 00:00:00 2001 From: Brandon Minnick <13558917+brminnick@users.noreply.github.com> Date: Wed, 18 Sep 2024 15:14:09 -0700 Subject: [PATCH 06/14] Fix Formatting --- azure-pipelines.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index ffa5521bad..79658477b8 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -444,14 +444,14 @@ jobs: artifactName: nuget pathToPublish: '$(Build.ArtifactStagingDirectory)' -- job: run_benchmarks + - job: run_benchmarks displayName: Run Benchmarks strategy: - matrix: - 'Windows': - image: 'windows-latest' - 'macOS': - image: 'macos-14' + matrix: + 'Windows': + image: 'windows-latest' + 'macOS': + image: 'macos-14' pool: vmImage: $(image) steps: From 4fe9ee03c95c0f963a5871f4a6c8998a386f6271 Mon Sep 17 00:00:00 2001 From: Brandon Minnick <13558917+brminnick@users.noreply.github.com> Date: Wed, 18 Sep 2024 15:15:41 -0700 Subject: [PATCH 07/14] Use `$(NetVersion)` --- .../CommunityToolkit.Maui.Analyzers.Benchmarks.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/CommunityToolkit.Maui.Analyzers.Benchmarks/CommunityToolkit.Maui.Analyzers.Benchmarks.csproj b/src/CommunityToolkit.Maui.Analyzers.Benchmarks/CommunityToolkit.Maui.Analyzers.Benchmarks.csproj index b871c06c5a..e65320eb46 100644 --- a/src/CommunityToolkit.Maui.Analyzers.Benchmarks/CommunityToolkit.Maui.Analyzers.Benchmarks.csproj +++ b/src/CommunityToolkit.Maui.Analyzers.Benchmarks/CommunityToolkit.Maui.Analyzers.Benchmarks.csproj @@ -1,6 +1,6 @@ - net8.0 + $(NetVersion) Exe From 938548f4d826bba519e37f2178d524a05d418fbb Mon Sep 17 00:00:00 2001 From: Brandon Minnick <13558917+brminnick@users.noreply.github.com> Date: Wed, 18 Sep 2024 15:17:23 -0700 Subject: [PATCH 08/14] Rename Files --- .../CommunityToolkitMediaElementAnalyzerBenchmarks.cs | 2 +- ...nchmarks.cs => UseMauiCommunityToolkitAnalyzerBenchmarks.cs} | 2 +- ...ks.cs => UseMauiCommunityToolkitCameraAnalyzerBenchmarks.cs} | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) rename src/CommunityToolkit.Maui.Analyzers.Benchmarks/{CommunityToolkitMauiAnalyzerBenchmarks.cs => UseMauiCommunityToolkitAnalyzerBenchmarks.cs} (94%) rename src/CommunityToolkit.Maui.Analyzers.Benchmarks/{CommunityToolkitCameraAnalyzerBenchmarks.cs => UseMauiCommunityToolkitCameraAnalyzerBenchmarks.cs} (94%) diff --git a/src/CommunityToolkit.Maui.Analyzers.Benchmarks/CommunityToolkitMediaElementAnalyzerBenchmarks.cs b/src/CommunityToolkit.Maui.Analyzers.Benchmarks/CommunityToolkitMediaElementAnalyzerBenchmarks.cs index 67dbe1fc0c..244543bf3a 100644 --- a/src/CommunityToolkit.Maui.Analyzers.Benchmarks/CommunityToolkitMediaElementAnalyzerBenchmarks.cs +++ b/src/CommunityToolkit.Maui.Analyzers.Benchmarks/CommunityToolkitMediaElementAnalyzerBenchmarks.cs @@ -4,7 +4,7 @@ namespace CommunityToolkit.Maui.Analyzers.Benchmarks; [MemoryDiagnoser] -public class CommunityToolkitMediaElementInitializationAnalyzerBenchmarks +public class UseMauiCommunityToolkitMediaElementInitializationAnalyzerBenchmarks { static readonly UseCommunityToolkitMediaElementInitializationAnalyzerTests useCommunityToolkitMediaElementInitializationAnalyzerTests = new(); diff --git a/src/CommunityToolkit.Maui.Analyzers.Benchmarks/CommunityToolkitMauiAnalyzerBenchmarks.cs b/src/CommunityToolkit.Maui.Analyzers.Benchmarks/UseMauiCommunityToolkitAnalyzerBenchmarks.cs similarity index 94% rename from src/CommunityToolkit.Maui.Analyzers.Benchmarks/CommunityToolkitMauiAnalyzerBenchmarks.cs rename to src/CommunityToolkit.Maui.Analyzers.Benchmarks/UseMauiCommunityToolkitAnalyzerBenchmarks.cs index eef7bf87b6..5d73cdf39e 100644 --- a/src/CommunityToolkit.Maui.Analyzers.Benchmarks/CommunityToolkitMauiAnalyzerBenchmarks.cs +++ b/src/CommunityToolkit.Maui.Analyzers.Benchmarks/UseMauiCommunityToolkitAnalyzerBenchmarks.cs @@ -4,7 +4,7 @@ namespace CommunityToolkit.Maui.Analyzers.Benchmarks; [MemoryDiagnoser] -public class CommunityToolkitMauiAnalyzerBenchmarks +public class UseMauiCommunityToolkitAnalyzerBenchmarks { static readonly UseCommunityToolkitInitializationAnalyzerTests useCommunityToolkitInitializationAnalyzerTests = new(); diff --git a/src/CommunityToolkit.Maui.Analyzers.Benchmarks/CommunityToolkitCameraAnalyzerBenchmarks.cs b/src/CommunityToolkit.Maui.Analyzers.Benchmarks/UseMauiCommunityToolkitCameraAnalyzerBenchmarks.cs similarity index 94% rename from src/CommunityToolkit.Maui.Analyzers.Benchmarks/CommunityToolkitCameraAnalyzerBenchmarks.cs rename to src/CommunityToolkit.Maui.Analyzers.Benchmarks/UseMauiCommunityToolkitCameraAnalyzerBenchmarks.cs index f34c138f31..835b4dcae4 100644 --- a/src/CommunityToolkit.Maui.Analyzers.Benchmarks/CommunityToolkitCameraAnalyzerBenchmarks.cs +++ b/src/CommunityToolkit.Maui.Analyzers.Benchmarks/UseMauiCommunityToolkitCameraAnalyzerBenchmarks.cs @@ -4,7 +4,7 @@ namespace CommunityToolkit.Maui.Analyzers.Benchmarks; [MemoryDiagnoser] -class CommunityToolkitCameraAnalyzerBenchmarks +class UseMauiCommunityToolkitCameraAnalyzerBenchmarks { static readonly UseCommunityToolkitCameraInitializationAnalyzerTests useCommunityToolkitCameraInitializationAnalyzerTests = new(); From 5686946550fef57ec9f1d6ab96587e902e9a2f87 Mon Sep 17 00:00:00 2001 From: Brandon Minnick <13558917+brminnick@users.noreply.github.com> Date: Wed, 18 Sep 2024 15:17:31 -0700 Subject: [PATCH 09/14] Run all 3 benchmarks --- src/CommunityToolkit.Maui.Analyzers.Benchmarks/Program.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/CommunityToolkit.Maui.Analyzers.Benchmarks/Program.cs b/src/CommunityToolkit.Maui.Analyzers.Benchmarks/Program.cs index b808722149..bb49aaade9 100644 --- a/src/CommunityToolkit.Maui.Analyzers.Benchmarks/Program.cs +++ b/src/CommunityToolkit.Maui.Analyzers.Benchmarks/Program.cs @@ -8,6 +8,8 @@ public class Program public static void Main(string[] args) { var config = DefaultConfig.Instance; - var summary = BenchmarkRunner.Run(config, args); + BenchmarkRunner.Run(config, args); + BenchmarkRunner.Run(config, args); + BenchmarkRunner.Run(config, args); } } \ No newline at end of file From 0c8c441562c0cf8862dab6628b5ebce8f9561f28 Mon Sep 17 00:00:00 2001 From: Brandon Minnick <13558917+brminnick@users.noreply.github.com> Date: Wed, 18 Sep 2024 15:23:43 -0700 Subject: [PATCH 10/14] Add `/* language=C#-test */` --- ...oolkitCameraInitializationAnalyzerTests.cs | 15 +- ...unityToolkitInitializationAnalyzerTests.cs | 146 +++++++++--------- ...MediaElementInitializationAnalyzerTests.cs | 15 +- 3 files changed, 90 insertions(+), 86 deletions(-) diff --git a/src/CommunityToolkit.Maui.Analyzers.UnitTests/UseCommunityToolkitCameraInitializationAnalyzerTests.cs b/src/CommunityToolkit.Maui.Analyzers.UnitTests/UseCommunityToolkitCameraInitializationAnalyzerTests.cs index be7f913f2f..67339101ba 100644 --- a/src/CommunityToolkit.Maui.Analyzers.UnitTests/UseCommunityToolkitCameraInitializationAnalyzerTests.cs +++ b/src/CommunityToolkit.Maui.Analyzers.UnitTests/UseCommunityToolkitCameraInitializationAnalyzerTests.cs @@ -16,7 +16,7 @@ public void UseCommunityToolkitMediaElementInitializationAnalyzerId() [Fact] public async Task VerifyNoErrorsWhenUseMauiCommunityToolkitCamera() { - const string source = @" + const string source = /* language=C#-test */ """ namespace CommunityToolkit.Maui.Analyzers.UnitTests { using Microsoft.Maui.Controls.Hosting; @@ -39,7 +39,8 @@ public static MauiApp CreateMauiApp() return builder.Build(); } } -}"; +} +"""; await VerifyCameraToolkitAnalyzer(source); } @@ -47,7 +48,7 @@ public static MauiApp CreateMauiApp() [Fact] public async Task VerifyNoErrorsWhenUseMauiCommunityToolkitCameraHasAdditonalWhitespace() { - const string source = @" + const string source = /* language=C#-test */ """ namespace CommunityToolkit.Maui.Analyzers.UnitTests { using Microsoft.Maui.Controls.Hosting; @@ -70,7 +71,8 @@ public static MauiApp CreateMauiApp() return builder.Build (); } } -}"; +} +"""; await VerifyCameraToolkitAnalyzer(source); } @@ -78,7 +80,7 @@ public static MauiApp CreateMauiApp() [Fact] public async Task VerifyErrorsWhenMissingUseMauiCommunityToolkitCamera() { - const string source = @" + const string source = /* language=C#-test */ """ namespace CommunityToolkit.Maui.Analyzers.UnitTests { using Microsoft.Maui.Controls.Hosting; @@ -100,7 +102,8 @@ public static MauiApp CreateMauiApp() return builder.Build(); } } -}"; +} +"""; await VerifyCameraToolkitAnalyzer(source, Diagnostic().WithSpan(13, 4, 13, 61).WithSeverity(DiagnosticSeverity.Error)); } diff --git a/src/CommunityToolkit.Maui.Analyzers.UnitTests/UseCommunityToolkitInitializationAnalyzerTests.cs b/src/CommunityToolkit.Maui.Analyzers.UnitTests/UseCommunityToolkitInitializationAnalyzerTests.cs index 5cb7894e94..459abdb4bf 100644 --- a/src/CommunityToolkit.Maui.Analyzers.UnitTests/UseCommunityToolkitInitializationAnalyzerTests.cs +++ b/src/CommunityToolkit.Maui.Analyzers.UnitTests/UseCommunityToolkitInitializationAnalyzerTests.cs @@ -1,7 +1,6 @@ -using Microsoft.CodeAnalysis; -using Microsoft.CodeAnalysis.Testing; +using Microsoft.CodeAnalysis.Testing; using Xunit; -using static CommunityToolkit.Maui.Analyzers.UnitTests.CSharpAnalyzerVerifier; +using static CommunityToolkit.Maui.Analyzers.UnitTests.CSharpCodeFixVerifier; namespace CommunityToolkit.Maui.Analyzers.UnitTests; @@ -17,63 +16,63 @@ public void UseCommunityToolkitInitializationAnalyzerId() public async Task VerifyNoErrorsWhenUseMauiCommunityToolkit() { const string source = /* language=C#-test */ """ - namespace CommunityToolkit.Maui.Analyzers.UnitTests - { - using Microsoft.Maui.Controls.Hosting; - using Microsoft.Maui.Hosting; - using CommunityToolkit.Maui; +namespace CommunityToolkit.Maui.Analyzers.UnitTests +{ + using Microsoft.Maui.Controls.Hosting; + using Microsoft.Maui.Hosting; + using CommunityToolkit.Maui; - public static class MauiProgram + public static class MauiProgram + { + public static MauiApp CreateMauiApp() + { + var builder = MauiApp.CreateBuilder(); + builder.UseMauiApp() + .UseMauiCommunityToolkit() + .ConfigureFonts(fonts => { - public static MauiApp CreateMauiApp() - { - var builder = MauiApp.CreateBuilder(); - builder.UseMauiApp() - .UseMauiCommunityToolkit() - .ConfigureFonts(fonts => - { - fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular"); - fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold"); - }); - - return builder.Build(); - } - } - } - """; - - - await VerifyMauiToolkitAnalyzer(source); + fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular"); + fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold"); + }); + + return builder.Build(); + } + } +} +"""; + + + await VerifyMauiToolkitAnalyzer(source); } [Fact] public async Task VerifyNoErrorsWhenUseMauiCommunityToolkitHasAdditonalWhitespace() { const string source = /* language=C#-test */ """ - namespace CommunityToolkit.Maui.Analyzers.UnitTests - { - using Microsoft.Maui.Controls.Hosting; - using Microsoft.Maui.Hosting; - using CommunityToolkit.Maui; +namespace CommunityToolkit.Maui.Analyzers.UnitTests +{ + using Microsoft.Maui.Controls.Hosting; + using Microsoft.Maui.Hosting; + using CommunityToolkit.Maui; - public static class MauiProgram + public static class MauiProgram + { + public static MauiApp CreateMauiApp() + { + var builder = MauiApp.CreateBuilder (); + builder.UseMauiApp () + .UseMauiCommunityToolkit () + .ConfigureFonts (fonts => { - public static MauiApp CreateMauiApp() - { - var builder = MauiApp.CreateBuilder (); - builder.UseMauiApp () - .UseMauiCommunityToolkit () - .ConfigureFonts (fonts => - { - fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular"); - fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold"); - }); - - return builder.Build (); - } - } - } - """; + fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular"); + fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold"); + }); + + return builder.Build (); + } + } +} +"""; await VerifyMauiToolkitAnalyzer(source); } @@ -82,32 +81,31 @@ public static MauiApp CreateMauiApp() public async Task VerifyErrorsWhenMissingUseMauiCommunityToolkit() { const string source = /* language=C#-test */ """ +namespace CommunityToolkit.Maui.Analyzers.UnitTests +{ + using Microsoft.Maui.Controls.Hosting; + using Microsoft.Maui.Hosting; + using CommunityToolkit.Maui; - namespace CommunityToolkit.Maui.Analyzers.UnitTests - { - using Microsoft.Maui.Controls.Hosting; - using Microsoft.Maui.Hosting; - using CommunityToolkit.Maui; - - public static class MauiProgram + public static class MauiProgram + { + public static MauiApp CreateMauiApp() + { + var builder = MauiApp.CreateBuilder(); + builder.[|UseMauiApp|]() + .ConfigureFonts(fonts => { - public static MauiApp CreateMauiApp() - { - var builder = MauiApp.CreateBuilder(); - builder.[|UseMauiApp|]() - .ConfigureFonts(fonts => - { - fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular"); - fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold"); - }); - - return builder.Build(); - } - } - } - """; - - await VerifyMauiToolkitAnalyzer(source); + fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular"); + fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold"); + }); + + return builder.Build(); + } + } +} +"""; + + await VerifyMauiToolkitAnalyzer(source); } static Task VerifyMauiToolkitAnalyzer(string source, params DiagnosticResult[] expected) diff --git a/src/CommunityToolkit.Maui.Analyzers.UnitTests/UseCommunityToolkitMediaElementInitializationAnalyzerTests.cs b/src/CommunityToolkit.Maui.Analyzers.UnitTests/UseCommunityToolkitMediaElementInitializationAnalyzerTests.cs index 20fd14dacb..8bd7ab9b17 100644 --- a/src/CommunityToolkit.Maui.Analyzers.UnitTests/UseCommunityToolkitMediaElementInitializationAnalyzerTests.cs +++ b/src/CommunityToolkit.Maui.Analyzers.UnitTests/UseCommunityToolkitMediaElementInitializationAnalyzerTests.cs @@ -17,7 +17,7 @@ public void UseCommunityToolkitMediaElementInitializationAnalyzerId() [Fact] public async Task VerifyNoErrorsWhenUseMauiCommunityToolkitMediaElement() { - const string source = @" + const string source = /* language=C#-test */ """ namespace CommunityToolkit.Maui.Analyzers.UnitTests { using Microsoft.Maui.Controls.Hosting; @@ -40,7 +40,8 @@ public static MauiApp CreateMauiApp() return builder.Build(); } } -}"; +} +"""; await VerifyMediaElementToolkitAnalyzer(source); } @@ -48,7 +49,7 @@ public static MauiApp CreateMauiApp() [Fact] public async Task VerifyNoErrorsWhenUseMauiCommunityToolkitMediaElementHasAdditonalWhitespace() { - const string source = @" + const string source = /* language=C#-test */ """ namespace CommunityToolkit.Maui.Analyzers.UnitTests { using Microsoft.Maui.Controls.Hosting; @@ -71,7 +72,8 @@ public static MauiApp CreateMauiApp() return builder.Build (); } } -}"; +} +"""; await VerifyMediaElementToolkitAnalyzer(source); } @@ -79,7 +81,7 @@ public static MauiApp CreateMauiApp() [Fact] public async Task VerifyErrorsWhenMissingUseMauiCommunityToolkitMediaElement() { - const string source = @" + const string source = /* language=C#-test */ """ namespace CommunityToolkit.Maui.Analyzers.UnitTests { using Microsoft.Maui.Controls.Hosting; @@ -101,7 +103,8 @@ public static MauiApp CreateMauiApp() return builder.Build(); } } -}"; +} +"""; await VerifyMediaElementToolkitAnalyzer(source, Diagnostic().WithSpan(13, 4, 13, 61).WithSeverity(DiagnosticSeverity.Error)); } From 470b23a3af864a7d7e793caffe3df439dcf72862 Mon Sep 17 00:00:00 2001 From: Brandon Minnick <13558917+brminnick@users.noreply.github.com> Date: Wed, 18 Sep 2024 15:29:09 -0700 Subject: [PATCH 11/14] Fix Failing Tests --- ...nityToolkitCameraInitializationAnalyzerTests.cs | 14 +++++++------- ...eCommunityToolkitInitializationAnalyzerTests.cs | 7 ++++--- ...olkitMediaElementInitializationAnalyzerTests.cs | 14 +++++++------- 3 files changed, 18 insertions(+), 17 deletions(-) diff --git a/src/CommunityToolkit.Maui.Analyzers.UnitTests/UseCommunityToolkitCameraInitializationAnalyzerTests.cs b/src/CommunityToolkit.Maui.Analyzers.UnitTests/UseCommunityToolkitCameraInitializationAnalyzerTests.cs index 67339101ba..f7dbabf3f9 100644 --- a/src/CommunityToolkit.Maui.Analyzers.UnitTests/UseCommunityToolkitCameraInitializationAnalyzerTests.cs +++ b/src/CommunityToolkit.Maui.Analyzers.UnitTests/UseCommunityToolkitCameraInitializationAnalyzerTests.cs @@ -32,8 +32,8 @@ public static MauiApp CreateMauiApp() .UseMauiCommunityToolkitCamera() .ConfigureFonts(fonts => { - fonts.AddFont(""OpenSans-Regular.ttf"", ""OpenSansRegular""); - fonts.AddFont(""OpenSans-Semibold.ttf"", ""OpenSansSemibold""); + fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular"); + fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold"); }); return builder.Build(); @@ -64,8 +64,8 @@ public static MauiApp CreateMauiApp() .UseMauiCommunityToolkitCamera () .ConfigureFonts(fonts => { - fonts.AddFont(""OpenSans-Regular.ttf"", ""OpenSansRegular""); - fonts.AddFont(""OpenSans-Semibold.ttf"", ""OpenSansSemibold""); + fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular"); + fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold"); }); return builder.Build (); @@ -95,8 +95,8 @@ public static MauiApp CreateMauiApp() builder.UseMauiApp() .ConfigureFonts(fonts => { - fonts.AddFont(""OpenSans-Regular.ttf"", ""OpenSansRegular""); - fonts.AddFont(""OpenSans-Semibold.ttf"", ""OpenSansSemibold""); + fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular"); + fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold"); }); return builder.Build(); @@ -105,7 +105,7 @@ public static MauiApp CreateMauiApp() } """; - await VerifyCameraToolkitAnalyzer(source, Diagnostic().WithSpan(13, 4, 13, 61).WithSeverity(DiagnosticSeverity.Error)); + await VerifyCameraToolkitAnalyzer(source, Diagnostic().WithSpan(12, 4, 12, 61).WithSeverity(DiagnosticSeverity.Error)); } static Task VerifyCameraToolkitAnalyzer(string source, params DiagnosticResult[] diagnosticResults) diff --git a/src/CommunityToolkit.Maui.Analyzers.UnitTests/UseCommunityToolkitInitializationAnalyzerTests.cs b/src/CommunityToolkit.Maui.Analyzers.UnitTests/UseCommunityToolkitInitializationAnalyzerTests.cs index 459abdb4bf..3a0233fb5f 100644 --- a/src/CommunityToolkit.Maui.Analyzers.UnitTests/UseCommunityToolkitInitializationAnalyzerTests.cs +++ b/src/CommunityToolkit.Maui.Analyzers.UnitTests/UseCommunityToolkitInitializationAnalyzerTests.cs @@ -1,4 +1,5 @@ -using Microsoft.CodeAnalysis.Testing; +using Microsoft.CodeAnalysis; +using Microsoft.CodeAnalysis.Testing; using Xunit; using static CommunityToolkit.Maui.Analyzers.UnitTests.CSharpCodeFixVerifier; @@ -92,7 +93,7 @@ public static class MauiProgram public static MauiApp CreateMauiApp() { var builder = MauiApp.CreateBuilder(); - builder.[|UseMauiApp|]() + builder.UseMauiApp() .ConfigureFonts(fonts => { fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular"); @@ -105,7 +106,7 @@ public static MauiApp CreateMauiApp() } """; - await VerifyMauiToolkitAnalyzer(source); + await VerifyMauiToolkitAnalyzer(source, Diagnostic().WithSpan(12, 4, 12, 61).WithSeverity(DiagnosticSeverity.Error)); } static Task VerifyMauiToolkitAnalyzer(string source, params DiagnosticResult[] expected) diff --git a/src/CommunityToolkit.Maui.Analyzers.UnitTests/UseCommunityToolkitMediaElementInitializationAnalyzerTests.cs b/src/CommunityToolkit.Maui.Analyzers.UnitTests/UseCommunityToolkitMediaElementInitializationAnalyzerTests.cs index 8bd7ab9b17..b255860ced 100644 --- a/src/CommunityToolkit.Maui.Analyzers.UnitTests/UseCommunityToolkitMediaElementInitializationAnalyzerTests.cs +++ b/src/CommunityToolkit.Maui.Analyzers.UnitTests/UseCommunityToolkitMediaElementInitializationAnalyzerTests.cs @@ -33,8 +33,8 @@ public static MauiApp CreateMauiApp() .UseMauiCommunityToolkitMediaElement() .ConfigureFonts(fonts => { - fonts.AddFont(""OpenSans-Regular.ttf"", ""OpenSansRegular""); - fonts.AddFont(""OpenSans-Semibold.ttf"", ""OpenSansSemibold""); + fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular"); + fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold"); }); return builder.Build(); @@ -65,8 +65,8 @@ public static MauiApp CreateMauiApp() .UseMauiCommunityToolkitMediaElement () .ConfigureFonts(fonts => { - fonts.AddFont(""OpenSans-Regular.ttf"", ""OpenSansRegular""); - fonts.AddFont(""OpenSans-Semibold.ttf"", ""OpenSansSemibold""); + fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular"); + fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold"); }); return builder.Build (); @@ -96,8 +96,8 @@ public static MauiApp CreateMauiApp() builder.UseMauiApp() .ConfigureFonts(fonts => { - fonts.AddFont(""OpenSans-Regular.ttf"", ""OpenSansRegular""); - fonts.AddFont(""OpenSans-Semibold.ttf"", ""OpenSansSemibold""); + fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular"); + fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold"); }); return builder.Build(); @@ -106,7 +106,7 @@ public static MauiApp CreateMauiApp() } """; - await VerifyMediaElementToolkitAnalyzer(source, Diagnostic().WithSpan(13, 4, 13, 61).WithSeverity(DiagnosticSeverity.Error)); + await VerifyMediaElementToolkitAnalyzer(source, Diagnostic().WithSpan(12, 4, 12, 61).WithSeverity(DiagnosticSeverity.Error)); } static Task VerifyMediaElementToolkitAnalyzer(string source, params DiagnosticResult[] diagnosticResults) From 00376cab75d190c9e48cca8ceb46df256ed9f5d9 Mon Sep 17 00:00:00 2001 From: Brandon Minnick <13558917+brminnick@users.noreply.github.com> Date: Wed, 18 Sep 2024 15:31:16 -0700 Subject: [PATCH 12/14] Update azure-pipelines.yml --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 79658477b8..2bdeee0726 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -465,7 +465,7 @@ jobs: displayName: 'Install .NET SDK' inputs: packageType: 'sdk' - version: '$(NET_VERSION)' + version: '$(LATEST_NET_VERSION)' includePreviewVersions: false - task: CmdLine@2 From 8b6fa24ca14e9d4ef98dc90e8c8a6636fc85acb8 Mon Sep 17 00:00:00 2001 From: Brandon Minnick <13558917+brminnick@users.noreply.github.com> Date: Wed, 18 Sep 2024 15:40:09 -0700 Subject: [PATCH 13/14] Add `public` --- .../UseMauiCommunityToolkitCameraAnalyzerBenchmarks.cs | 2 +- ...unityToolkitMediaElementInitializationAnalyzerBenchmarks.cs} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename src/CommunityToolkit.Maui.Analyzers.Benchmarks/{CommunityToolkitMediaElementAnalyzerBenchmarks.cs => UseMauiCommunityToolkitMediaElementInitializationAnalyzerBenchmarks.cs} (100%) diff --git a/src/CommunityToolkit.Maui.Analyzers.Benchmarks/UseMauiCommunityToolkitCameraAnalyzerBenchmarks.cs b/src/CommunityToolkit.Maui.Analyzers.Benchmarks/UseMauiCommunityToolkitCameraAnalyzerBenchmarks.cs index 835b4dcae4..fbb54c6ff8 100644 --- a/src/CommunityToolkit.Maui.Analyzers.Benchmarks/UseMauiCommunityToolkitCameraAnalyzerBenchmarks.cs +++ b/src/CommunityToolkit.Maui.Analyzers.Benchmarks/UseMauiCommunityToolkitCameraAnalyzerBenchmarks.cs @@ -4,7 +4,7 @@ namespace CommunityToolkit.Maui.Analyzers.Benchmarks; [MemoryDiagnoser] -class UseMauiCommunityToolkitCameraAnalyzerBenchmarks +public class UseMauiCommunityToolkitCameraAnalyzerBenchmarks { static readonly UseCommunityToolkitCameraInitializationAnalyzerTests useCommunityToolkitCameraInitializationAnalyzerTests = new(); diff --git a/src/CommunityToolkit.Maui.Analyzers.Benchmarks/CommunityToolkitMediaElementAnalyzerBenchmarks.cs b/src/CommunityToolkit.Maui.Analyzers.Benchmarks/UseMauiCommunityToolkitMediaElementInitializationAnalyzerBenchmarks.cs similarity index 100% rename from src/CommunityToolkit.Maui.Analyzers.Benchmarks/CommunityToolkitMediaElementAnalyzerBenchmarks.cs rename to src/CommunityToolkit.Maui.Analyzers.Benchmarks/UseMauiCommunityToolkitMediaElementInitializationAnalyzerBenchmarks.cs From 3f39ba7ef3fed98079baac781681cfe1908317fb Mon Sep 17 00:00:00 2001 From: Brandon Minnick <13558917+brminnick@users.noreply.github.com> Date: Wed, 18 Sep 2024 16:22:41 -0700 Subject: [PATCH 14/14] Fix Analyzer Build Warnings --- Directory.Build.props | 12 +++++++--- .../AnalyzerReleases.Shipped.md | 6 ++--- .../AnalyzerReleases.Unshipped.md | 8 +++---- .../CommunityToolkit.Maui.Analyzers.csproj | 5 ---- .../AnalyzerReleases.Shipped.md | 6 ++--- .../AnalyzerReleases.Unshipped.md | 8 +++---- ...munityToolkit.Maui.Camera.Analyzers.csproj | 4 ---- .../AnalyzerReleases.Shipped.md | 6 ++--- .../AnalyzerReleases.Unshipped.md | 8 +++---- ...Toolkit.Maui.MediaElement.Analyzers.csproj | 4 ---- .../AnalyzerReleases.Shipped.md | 6 +++++ .../AnalyzerReleases.Unshipped.md | 4 ++++ .../AnalyzerReleases.Shipped.md | 24 +++++++++---------- .../AnalyzerReleases.Unshipped.md | 8 +++---- 14 files changed, 52 insertions(+), 57 deletions(-) create mode 100644 src/CommunityToolkit.Maui.SourceGenerators.Internal/AnalyzerReleases.Shipped.md create mode 100644 src/CommunityToolkit.Maui.SourceGenerators.Internal/AnalyzerReleases.Unshipped.md diff --git a/Directory.Build.props b/Directory.Build.props index d96f40baad..b7803c1c6f 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -38,11 +38,16 @@ CS1711: XML comment has a typeparam tag, but there is no type parameter by that name CS1712: Type parameter has no matching typeparam tag in the XML comment CS1723: XML comment has cref attribute that refers to a type parameter - CS1734: XML comment has a paramref tag, but there is no parameter by that name + CS1734: XML comment has a paramref tag, but there is no parameter by that name + xUnit1012: Null should not be used for type parameter xUnit2021: Assert.ThrowsAsync is async. The resulting task should be awaited + IL2***: Trim Warnings - IL3***: AOT Warnings --> + + IL3***: AOT Warnings + + RS2007: Analyzer release file 'AnalyzerReleases.Shipped.md' has a missing or invalid release header--> nullable, CS0419,CS1570,CS1571,CS1572,CS1573,CS1574,CS1580,CS1581,CS1584,CS1587,CS1589,CS1590,CS1591,CS1592,CS1598,CS1658,CS1710,CS1711,CS1712,CS1723,CS1734, xUnit1012,xUnit2021, @@ -59,7 +64,8 @@ IL2100,IL2101,IL2102,IL2103,IL2104,IL2105,IL2106,IL2107,IL2108,IL2109, IL2110,IL2111,IL2112,IL2113,IL2114,IL2115,IL2116,IL2117,IL2118,IL2119, IL2120,IL2121,IL2122, - IL3050,IL3051,IL3052,IL3053,IL3054,IL3055,IL3056 + IL3050,IL3051,IL3052,IL3053,IL3054,IL3055,IL3056, + RS2007 diff --git a/src/CommunityToolkit.Maui.Analyzers/AnalyzerReleases.Shipped.md b/src/CommunityToolkit.Maui.Analyzers/AnalyzerReleases.Shipped.md index 7de2e2858a..2a5fac1f80 100644 --- a/src/CommunityToolkit.Maui.Analyzers/AnalyzerReleases.Shipped.md +++ b/src/CommunityToolkit.Maui.Analyzers/AnalyzerReleases.Shipped.md @@ -2,6 +2,6 @@ ### New Rules -| Rule ID | Severity | Notes | -|---------|----------|----------------------------------------------------------| -| MCT001 | Error | `.UseMauiCommunityToolkit()` Not Found on MauiAppBuilder | \ No newline at end of file +Rule ID | Category | Severity | Notes +--------|----------|----------|----------------------------------------------------- +MCT001 | Usage | Error | `.UseMauiCommunityToolkit()` Not Found on MauiAppBuilder \ No newline at end of file diff --git a/src/CommunityToolkit.Maui.Analyzers/AnalyzerReleases.Unshipped.md b/src/CommunityToolkit.Maui.Analyzers/AnalyzerReleases.Unshipped.md index dcd8b2e7a7..e361996f93 100644 --- a/src/CommunityToolkit.Maui.Analyzers/AnalyzerReleases.Unshipped.md +++ b/src/CommunityToolkit.Maui.Analyzers/AnalyzerReleases.Unshipped.md @@ -1,6 +1,4 @@ -## Release 1.1.0 +### New Rules -### New Rules - -| Rule ID | Severity | Notes | -|---------|----------|-------| \ No newline at end of file +Rule ID | Category | Severity | Notes +--------|----------|----------|-------------------- \ No newline at end of file diff --git a/src/CommunityToolkit.Maui.Analyzers/CommunityToolkit.Maui.Analyzers.csproj b/src/CommunityToolkit.Maui.Analyzers/CommunityToolkit.Maui.Analyzers.csproj index f2b434ee25..2aa45b70d7 100644 --- a/src/CommunityToolkit.Maui.Analyzers/CommunityToolkit.Maui.Analyzers.csproj +++ b/src/CommunityToolkit.Maui.Analyzers/CommunityToolkit.Maui.Analyzers.csproj @@ -22,9 +22,4 @@ - - - - - diff --git a/src/CommunityToolkit.Maui.Camera.Analyzers/AnalyzerReleases.Shipped.md b/src/CommunityToolkit.Maui.Camera.Analyzers/AnalyzerReleases.Shipped.md index d6b7eb9fc0..2d1b0116d6 100644 --- a/src/CommunityToolkit.Maui.Camera.Analyzers/AnalyzerReleases.Shipped.md +++ b/src/CommunityToolkit.Maui.Camera.Analyzers/AnalyzerReleases.Shipped.md @@ -2,6 +2,6 @@ ### New Rules -| Rule ID | Severity | Notes | -|---------|----------|----------------------------------------------------------------| -| MCTC001 | Error | `.UseMauiCommunityToolkitCamera()` Not Found on MauiAppBuilder | \ No newline at end of file +Rule ID | Category | Severity | Notes +--------|----------|----------|----------------------------------------------------- +MCTC001 | Usage | Error | `.UseMauiCommunityToolkitCamera()` Not Found on MauiAppBuilder \ No newline at end of file diff --git a/src/CommunityToolkit.Maui.Camera.Analyzers/AnalyzerReleases.Unshipped.md b/src/CommunityToolkit.Maui.Camera.Analyzers/AnalyzerReleases.Unshipped.md index 402e16cb36..e361996f93 100644 --- a/src/CommunityToolkit.Maui.Camera.Analyzers/AnalyzerReleases.Unshipped.md +++ b/src/CommunityToolkit.Maui.Camera.Analyzers/AnalyzerReleases.Unshipped.md @@ -1,6 +1,4 @@ -## Release 1.0.0 +### New Rules -### New Rules - -| Rule ID | Severity | Notes | -|---------|----------|-------| \ No newline at end of file +Rule ID | Category | Severity | Notes +--------|----------|----------|-------------------- \ No newline at end of file diff --git a/src/CommunityToolkit.Maui.Camera.Analyzers/CommunityToolkit.Maui.Camera.Analyzers.csproj b/src/CommunityToolkit.Maui.Camera.Analyzers/CommunityToolkit.Maui.Camera.Analyzers.csproj index ce6e577cb3..7920397691 100644 --- a/src/CommunityToolkit.Maui.Camera.Analyzers/CommunityToolkit.Maui.Camera.Analyzers.csproj +++ b/src/CommunityToolkit.Maui.Camera.Analyzers/CommunityToolkit.Maui.Camera.Analyzers.csproj @@ -22,8 +22,4 @@ - - - - diff --git a/src/CommunityToolkit.Maui.MediaElement.Analyzers/AnalyzerReleases.Shipped.md b/src/CommunityToolkit.Maui.MediaElement.Analyzers/AnalyzerReleases.Shipped.md index e37d80b47a..681a05a972 100644 --- a/src/CommunityToolkit.Maui.MediaElement.Analyzers/AnalyzerReleases.Shipped.md +++ b/src/CommunityToolkit.Maui.MediaElement.Analyzers/AnalyzerReleases.Shipped.md @@ -2,6 +2,6 @@ ### New Rules -| Rule ID | Severity | Notes | -|----------|----------|----------------------------------------------------------------------| -| MCTME001 | Error | `.UseMauiCommunityToolkitMediaElement()` Not Found on MauiAppBuilder | \ No newline at end of file +Rule ID | Category | Severity | Notes +--------|----------|----------|-------------------- +MCTME001| Usage | Error | `.UseMauiCommunityToolkitMediaElement()` Not Found on MauiAppBuilder \ No newline at end of file diff --git a/src/CommunityToolkit.Maui.MediaElement.Analyzers/AnalyzerReleases.Unshipped.md b/src/CommunityToolkit.Maui.MediaElement.Analyzers/AnalyzerReleases.Unshipped.md index 402e16cb36..e361996f93 100644 --- a/src/CommunityToolkit.Maui.MediaElement.Analyzers/AnalyzerReleases.Unshipped.md +++ b/src/CommunityToolkit.Maui.MediaElement.Analyzers/AnalyzerReleases.Unshipped.md @@ -1,6 +1,4 @@ -## Release 1.0.0 +### New Rules -### New Rules - -| Rule ID | Severity | Notes | -|---------|----------|-------| \ No newline at end of file +Rule ID | Category | Severity | Notes +--------|----------|----------|-------------------- \ No newline at end of file diff --git a/src/CommunityToolkit.Maui.MediaElement.Analyzers/CommunityToolkit.Maui.MediaElement.Analyzers.csproj b/src/CommunityToolkit.Maui.MediaElement.Analyzers/CommunityToolkit.Maui.MediaElement.Analyzers.csproj index bcf6df1130..746a0a3177 100644 --- a/src/CommunityToolkit.Maui.MediaElement.Analyzers/CommunityToolkit.Maui.MediaElement.Analyzers.csproj +++ b/src/CommunityToolkit.Maui.MediaElement.Analyzers/CommunityToolkit.Maui.MediaElement.Analyzers.csproj @@ -22,8 +22,4 @@ - - - - diff --git a/src/CommunityToolkit.Maui.SourceGenerators.Internal/AnalyzerReleases.Shipped.md b/src/CommunityToolkit.Maui.SourceGenerators.Internal/AnalyzerReleases.Shipped.md new file mode 100644 index 0000000000..7ab7bd161b --- /dev/null +++ b/src/CommunityToolkit.Maui.SourceGenerators.Internal/AnalyzerReleases.Shipped.md @@ -0,0 +1,6 @@ +## Release 1.0.0 + +### New Rules + +Rule ID | Category | Severity | Notes +--------|----------|----------|----------------------------------------------------- \ No newline at end of file diff --git a/src/CommunityToolkit.Maui.SourceGenerators.Internal/AnalyzerReleases.Unshipped.md b/src/CommunityToolkit.Maui.SourceGenerators.Internal/AnalyzerReleases.Unshipped.md new file mode 100644 index 0000000000..e361996f93 --- /dev/null +++ b/src/CommunityToolkit.Maui.SourceGenerators.Internal/AnalyzerReleases.Unshipped.md @@ -0,0 +1,4 @@ +### New Rules + +Rule ID | Category | Severity | Notes +--------|----------|----------|-------------------- \ No newline at end of file diff --git a/src/CommunityToolkit.Maui.SourceGenerators/AnalyzerReleases.Shipped.md b/src/CommunityToolkit.Maui.SourceGenerators/AnalyzerReleases.Shipped.md index 8f162ae3c5..0dd70049a5 100644 --- a/src/CommunityToolkit.Maui.SourceGenerators/AnalyzerReleases.Shipped.md +++ b/src/CommunityToolkit.Maui.SourceGenerators/AnalyzerReleases.Shipped.md @@ -2,20 +2,20 @@ ### New Rules -Rule ID | Severity | Notes ---------|----------|------- -MCT001 | Warning | Global namespace is not support for this Source Generator -MCT002 | Error | Was not possible to find Microsoft.Maui.ITextStyle and or Microsoft.Maui.IAnimatable -MCT003 | Info | Was not possible to get information from the Class -MCT004 | Info | Class marked with invalid modifier access +Rule ID | Category | Severity | Notes +--------|----------|----------|----------------------------------------------------- +MCT001 | Usage | Warning | Global namespace is not support for this Source Generator +MCT002 | Usage | Error | Was not possible to find Microsoft.Maui.ITextStyle and or Microsoft.Maui.IAnimatable +MCT003 | Usage | Info | Was not possible to get information from the Class +MCT004 | Usage | Info | Class marked with invalid modifier access ## Release 4.0.0 ### New Rules -Rule ID | Severity | Notes ---------|----------|------- -MCTSG001 | Warning | Global namespace is not support for this Source Generator -MCTSG002 | Error | Was not possible to find Microsoft.Maui.ITextStyle and or Microsoft.Maui.IAnimatable -MCTSG003 | Info | Was not possible to get information from the Class -MCTSG004 | Info | Class marked with invalid modifier access \ No newline at end of file +Rule ID | Category | Severity | Notes +--------|----------|----------|----------------------------------------------------- +MCTSG001 | Usage | Warning | Global namespace is not support for this Source Generator +MCTSG002 | Usage | Error | Was not possible to find Microsoft.Maui.ITextStyle and or Microsoft.Maui.IAnimatable +MCTSG003 | Usage | Info | Was not possible to get information from the Class +MCTSG004 | Usage | Info | Class marked with invalid modifier access \ No newline at end of file diff --git a/src/CommunityToolkit.Maui.SourceGenerators/AnalyzerReleases.Unshipped.md b/src/CommunityToolkit.Maui.SourceGenerators/AnalyzerReleases.Unshipped.md index bb3d8927ad..e361996f93 100644 --- a/src/CommunityToolkit.Maui.SourceGenerators/AnalyzerReleases.Unshipped.md +++ b/src/CommunityToolkit.Maui.SourceGenerators/AnalyzerReleases.Unshipped.md @@ -1,6 +1,4 @@ -## Release 1.0.0 +### New Rules -### New Rules - -Rule ID | Severity | Notes ---------|----------|------- \ No newline at end of file +Rule ID | Category | Severity | Notes +--------|----------|----------|-------------------- \ No newline at end of file