diff --git a/Source/Moq.Analyzers.Test/.editorconfig b/Source/Moq.Analyzers.Test/.editorconfig new file mode 100644 index 000000000..7f840f54b --- /dev/null +++ b/Source/Moq.Analyzers.Test/.editorconfig @@ -0,0 +1,14 @@ +root = false + +# C# files +[*.cs] + +#### XMLDocs validation #### +# CS1573: Parameter 'parameter' has no matching param tag in the XML comment for 'parameter' (but other parameters do) +dotnet_diagnostic.CS1573.severity = suggestion + +# CS1591: Missing XML comment for publicly visible type or member 'Type_or_Member' +dotnet_diagnostic.CS1591.severity = suggestion + +# CS1712: Type parameter 'type parameter' has no matching typeparam tag in the XML comment on 'type' (but other type parameters do) +dotnet_diagnostic.CS1712.severity = suggestion diff --git a/Source/Moq.Analyzers/AsShouldBeUsedOnlyForInterfaceAnalyzer.cs b/Source/Moq.Analyzers/AsShouldBeUsedOnlyForInterfaceAnalyzer.cs index 55c7bea4f..8ee18fb47 100644 --- a/Source/Moq.Analyzers/AsShouldBeUsedOnlyForInterfaceAnalyzer.cs +++ b/Source/Moq.Analyzers/AsShouldBeUsedOnlyForInterfaceAnalyzer.cs @@ -1,5 +1,8 @@ namespace Moq.Analyzers; +/// +/// Mock.As() should take interfaces only. +/// [DiagnosticAnalyzer(LanguageNames.CSharp)] public class AsShouldBeUsedOnlyForInterfaceAnalyzer : DiagnosticAnalyzer { @@ -18,8 +21,10 @@ public class AsShouldBeUsedOnlyForInterfaceAnalyzer : DiagnosticAnalyzer isEnabledByDefault: true, helpLinkUri: $"https://github.com/rjmurillo/moq.analyzers/blob/main/docs/rules/{RuleId}.md"); + /// public override ImmutableArray SupportedDiagnostics => ImmutableArray.Create(Rule); + /// public override void Initialize(AnalysisContext context) { context.EnableConcurrentExecution(); diff --git a/Source/Moq.Analyzers/CallbackSignatureShouldMatchMockedMethodAnalyzer.cs b/Source/Moq.Analyzers/CallbackSignatureShouldMatchMockedMethodAnalyzer.cs index 5adb9d677..e9bc2d963 100644 --- a/Source/Moq.Analyzers/CallbackSignatureShouldMatchMockedMethodAnalyzer.cs +++ b/Source/Moq.Analyzers/CallbackSignatureShouldMatchMockedMethodAnalyzer.cs @@ -1,5 +1,8 @@ namespace Moq.Analyzers; +/// +/// Callback signature must match the signature of the mocked method. +/// [DiagnosticAnalyzer(LanguageNames.CSharp)] public class CallbackSignatureShouldMatchMockedMethodAnalyzer : DiagnosticAnalyzer { @@ -16,11 +19,13 @@ public class CallbackSignatureShouldMatchMockedMethodAnalyzer : DiagnosticAnalyz isEnabledByDefault: true, helpLinkUri: $"https://github.com/rjmurillo/moq.analyzers/blob/main/docs/rules/{RuleId}.md"); + /// public override ImmutableArray SupportedDiagnostics { get { return ImmutableArray.Create(Rule); } } + /// public override void Initialize(AnalysisContext context) { context.EnableConcurrentExecution(); diff --git a/Source/Moq.Analyzers/CallbackSignatureShouldMatchMockedMethodCodeFix.cs b/Source/Moq.Analyzers/CallbackSignatureShouldMatchMockedMethodCodeFix.cs index 938cb6e98..87f403a6c 100644 --- a/Source/Moq.Analyzers/CallbackSignatureShouldMatchMockedMethodCodeFix.cs +++ b/Source/Moq.Analyzers/CallbackSignatureShouldMatchMockedMethodCodeFix.cs @@ -6,20 +6,26 @@ namespace Moq.Analyzers; +/// +/// Fixes . +/// [ExportCodeFixProvider(LanguageNames.CSharp, Name = nameof(CallbackSignatureShouldMatchMockedMethodCodeFix))] [Shared] public class CallbackSignatureShouldMatchMockedMethodCodeFix : CodeFixProvider { + /// public sealed override ImmutableArray FixableDiagnosticIds { get { return ImmutableArray.Create(CallbackSignatureShouldMatchMockedMethodAnalyzer.RuleId); } } + /// public sealed override FixAllProvider GetFixAllProvider() { return WellKnownFixAllProviders.BatchFixer; } + /// public sealed override async Task RegisterCodeFixesAsync(CodeFixContext context) { SyntaxNode? root = await context.Document.GetSyntaxRootAsync(context.CancellationToken).ConfigureAwait(false); diff --git a/Source/Moq.Analyzers/ConstructorArgumentsShouldMatchAnalyzer.cs b/Source/Moq.Analyzers/ConstructorArgumentsShouldMatchAnalyzer.cs index 8496b235d..2f57141ff 100644 --- a/Source/Moq.Analyzers/ConstructorArgumentsShouldMatchAnalyzer.cs +++ b/Source/Moq.Analyzers/ConstructorArgumentsShouldMatchAnalyzer.cs @@ -2,6 +2,9 @@ namespace Moq.Analyzers; +/// +/// Parameters provided into mock do not match any existing constructors. +/// [DiagnosticAnalyzer(LanguageNames.CSharp)] public class ConstructorArgumentsShouldMatchAnalyzer : DiagnosticAnalyzer { @@ -18,6 +21,7 @@ public class ConstructorArgumentsShouldMatchAnalyzer : DiagnosticAnalyzer isEnabledByDefault: true, helpLinkUri: $"https://github.com/rjmurillo/moq.analyzers/blob/main/docs/rules/{RuleId}.md"); + /// public override ImmutableArray SupportedDiagnostics { get { return ImmutableArray.Create(Rule); } diff --git a/Source/Moq.Analyzers/NoConstructorArgumentsForInterfaceMockAnalyzer.cs b/Source/Moq.Analyzers/NoConstructorArgumentsForInterfaceMockAnalyzer.cs index 591e33919..3a037f893 100644 --- a/Source/Moq.Analyzers/NoConstructorArgumentsForInterfaceMockAnalyzer.cs +++ b/Source/Moq.Analyzers/NoConstructorArgumentsForInterfaceMockAnalyzer.cs @@ -2,6 +2,9 @@ namespace Moq.Analyzers; +/// +/// Mocked interfaces cannot have constructor parameters. +/// [DiagnosticAnalyzer(LanguageNames.CSharp)] public class NoConstructorArgumentsForInterfaceMockAnalyzer : DiagnosticAnalyzer { @@ -18,11 +21,13 @@ public class NoConstructorArgumentsForInterfaceMockAnalyzer : DiagnosticAnalyzer isEnabledByDefault: true, helpLinkUri: $"https://github.com/rjmurillo/moq.analyzers/blob/main/docs/rules/{RuleId}.md"); + /// public override ImmutableArray SupportedDiagnostics { get { return ImmutableArray.Create(Rule); } } + /// public override void Initialize(AnalysisContext context) { context.EnableConcurrentExecution(); diff --git a/Source/Moq.Analyzers/NoMethodsInPropertySetupAnalyzer.cs b/Source/Moq.Analyzers/NoMethodsInPropertySetupAnalyzer.cs index 871d49159..cd5a59ec5 100644 --- a/Source/Moq.Analyzers/NoMethodsInPropertySetupAnalyzer.cs +++ b/Source/Moq.Analyzers/NoMethodsInPropertySetupAnalyzer.cs @@ -1,5 +1,8 @@ namespace Moq.Analyzers; +/// +/// SetupGet/SetupSet should be used for properties, not for methods. +/// [DiagnosticAnalyzer(LanguageNames.CSharp)] public class NoMethodsInPropertySetupAnalyzer : DiagnosticAnalyzer { @@ -16,11 +19,13 @@ public class NoMethodsInPropertySetupAnalyzer : DiagnosticAnalyzer isEnabledByDefault: true, helpLinkUri: $"https://github.com/rjmurillo/moq.analyzers/blob/main/docs/rules/{RuleId}.md"); + /// public override ImmutableArray SupportedDiagnostics { get { return ImmutableArray.Create(Rule); } } + /// public override void Initialize(AnalysisContext context) { context.EnableConcurrentExecution(); diff --git a/Source/Moq.Analyzers/NoSealedClassMocksAnalyzer.cs b/Source/Moq.Analyzers/NoSealedClassMocksAnalyzer.cs index 4e3a74b8c..58b31879d 100644 --- a/Source/Moq.Analyzers/NoSealedClassMocksAnalyzer.cs +++ b/Source/Moq.Analyzers/NoSealedClassMocksAnalyzer.cs @@ -1,5 +1,8 @@ namespace Moq.Analyzers; +/// +/// Sealed classes cannot be mocked. +/// [DiagnosticAnalyzer(LanguageNames.CSharp)] public class NoSealedClassMocksAnalyzer : DiagnosticAnalyzer { @@ -16,11 +19,13 @@ public class NoSealedClassMocksAnalyzer : DiagnosticAnalyzer isEnabledByDefault: true, helpLinkUri: $"https://github.com/rjmurillo/moq.analyzers/blob/main/docs/rules/{RuleId}.md"); + /// public override ImmutableArray SupportedDiagnostics { get { return ImmutableArray.Create(Rule); } } + /// public override void Initialize(AnalysisContext context) { context.EnableConcurrentExecution(); diff --git a/Source/Moq.Analyzers/SetupShouldBeUsedOnlyForOverridableMembersAnalyzer.cs b/Source/Moq.Analyzers/SetupShouldBeUsedOnlyForOverridableMembersAnalyzer.cs index f6bec1cde..4145492f0 100644 --- a/Source/Moq.Analyzers/SetupShouldBeUsedOnlyForOverridableMembersAnalyzer.cs +++ b/Source/Moq.Analyzers/SetupShouldBeUsedOnlyForOverridableMembersAnalyzer.cs @@ -1,5 +1,8 @@ namespace Moq.Analyzers; +/// +/// Setup should be used only for overridable members. +/// [DiagnosticAnalyzer(LanguageNames.CSharp)] public class SetupShouldBeUsedOnlyForOverridableMembersAnalyzer : DiagnosticAnalyzer { @@ -16,8 +19,10 @@ public class SetupShouldBeUsedOnlyForOverridableMembersAnalyzer : DiagnosticAnal isEnabledByDefault: true, helpLinkUri: $"https://github.com/rjmurillo/moq.analyzers/blob/main/docs/rules/{RuleId}.md"); + /// public override ImmutableArray SupportedDiagnostics => ImmutableArray.Create(Rule); + /// public override void Initialize(AnalysisContext context) { context.EnableConcurrentExecution(); diff --git a/Source/Moq.Analyzers/SetupShouldNotIncludeAsyncResultAnalyzer.cs b/Source/Moq.Analyzers/SetupShouldNotIncludeAsyncResultAnalyzer.cs index e0c0606c1..db703d7a8 100644 --- a/Source/Moq.Analyzers/SetupShouldNotIncludeAsyncResultAnalyzer.cs +++ b/Source/Moq.Analyzers/SetupShouldNotIncludeAsyncResultAnalyzer.cs @@ -1,5 +1,8 @@ namespace Moq.Analyzers; +/// +/// Setup of async method should use ReturnsAsync instead of .Result. +/// [DiagnosticAnalyzer(LanguageNames.CSharp)] public class SetupShouldNotIncludeAsyncResultAnalyzer : DiagnosticAnalyzer { @@ -16,8 +19,10 @@ public class SetupShouldNotIncludeAsyncResultAnalyzer : DiagnosticAnalyzer isEnabledByDefault: true, helpLinkUri: $"https://github.com/rjmurillo/moq.analyzers/blob/main/docs/rules/{RuleId}.md"); + /// public override ImmutableArray SupportedDiagnostics => ImmutableArray.Create(Rule); + /// public override void Initialize(AnalysisContext context) { context.EnableConcurrentExecution(); diff --git a/build/targets/codeanalysis/CodeAnalysis.props b/build/targets/codeanalysis/CodeAnalysis.props index e78f5421f..d49d75d9b 100644 --- a/build/targets/codeanalysis/CodeAnalysis.props +++ b/build/targets/codeanalysis/CodeAnalysis.props @@ -4,6 +4,7 @@ true preview 9999 + true