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