diff --git a/src/Meziantou.Analyzer/Rules/DoNotUseUnknownParameterForRazorComponentAnalyzer.cs b/src/Meziantou.Analyzer/Rules/DoNotUseUnknownParameterForRazorComponentAnalyzer.cs index 2c1048504..4937cebc6 100644 --- a/src/Meziantou.Analyzer/Rules/DoNotUseUnknownParameterForRazorComponentAnalyzer.cs +++ b/src/Meziantou.Analyzer/Rules/DoNotUseUnknownParameterForRazorComponentAnalyzer.cs @@ -1,4 +1,5 @@ -using System.Collections.Concurrent; +using System; +using System.Collections.Concurrent; using System.Collections.Generic; using System.Collections.Immutable; using System.Linq; @@ -15,7 +16,7 @@ public sealed class DoNotUseUnknownParameterForRazorComponentAnalyzer : Diagnost private static readonly DiagnosticDescriptor Rule = new( RuleIdentifiers.DoNotUseUnknownParameterForRazorComponent, title: "Unknown component parameter", - messageFormat: "The parameter '{0}' does not exist on component '{1}'", + messageFormat: "The parameter '{0}' does not exist on component '{1}'. Available parameters: {2}.", RuleCategories.Usage, DiagnosticSeverity.Warning, isEnabledByDefault: true, @@ -85,7 +86,8 @@ public void AnalyzeBlockOptions(OperationAnalysisContext context) var reportPascalCaseUnmatchedParameter = context.Options.GetConfigurationValue(operation, "MA0115.ReportPascalCaseUnmatchedParameter", defaultValue: true); if (!IsValidAttribute(currentComponent, parameterName, reportPascalCaseUnmatchedParameter)) { - context.ReportDiagnostic(Rule, invocation.Syntax, parameterName, currentComponent.ToDisplayString(NullableFlowState.None)); + var availableParameters = string.Join(", ", GetComponentDescriptor(currentComponent).Parameters.Order(StringComparer.Ordinal)); + context.ReportDiagnostic(Rule, invocation.Syntax, parameterName, currentComponent.ToDisplayString(NullableFlowState.None), availableParameters); } } } diff --git a/tests/Meziantou.Analyzer.Test/Rules/DoNotUseUnknownParameterForRazorComponentAnalyzerTests.cs b/tests/Meziantou.Analyzer.Test/Rules/DoNotUseUnknownParameterForRazorComponentAnalyzerTests.cs index c69a1ad4d..cea8f695e 100755 --- a/tests/Meziantou.Analyzer.Test/Rules/DoNotUseUnknownParameterForRazorComponentAnalyzerTests.cs +++ b/tests/Meziantou.Analyzer.Test/Rules/DoNotUseUnknownParameterForRazorComponentAnalyzerTests.cs @@ -155,6 +155,7 @@ protected override void BuildRenderTree(Microsoft.AspNetCore.Components.Renderin """; await CreateProjectBuilder() .WithSourceCode(Usings + sourceCode + ComponentWithCaptureUnmatchedValues) + .ShouldReportDiagnosticWithMessage("The parameter 'UnknownParams' does not exist on component 'SampleComponent'. Available parameters: Param1, Param2") .AddAnalyzerConfiguration("MA0115.ReportPascalCaseUnmatchedParameter", "true") .ValidateAsync(); }