diff --git a/src/Microsoft.VisualStudio.Threading.Analyzers/Utils.cs b/src/Microsoft.VisualStudio.Threading.Analyzers/Utils.cs index ae636d9b8..ae4a96cb5 100644 --- a/src/Microsoft.VisualStudio.Threading.Analyzers/Utils.cs +++ b/src/Microsoft.VisualStudio.Threading.Analyzers/Utils.cs @@ -635,6 +635,11 @@ internal static void Deconstruct(this Tuple tupl item4 = tuple.Item4; } + internal static string GetHelpLink(string analyzerId) + { + return $"https://github.com/Microsoft/vs-threading/blob/master/doc/analyzers/{analyzerId}.md"; + } + private static CSharpSyntaxNode UpdateStatementsForAsyncMethod(CSharpSyntaxNode body, SemanticModel semanticModel, bool hasResultValue) { var blockBody = body as BlockSyntax; diff --git a/src/Microsoft.VisualStudio.Threading.Analyzers/VSTHRD001UseSwitchToMainThreadAsyncAnalyzer.cs b/src/Microsoft.VisualStudio.Threading.Analyzers/VSTHRD001UseSwitchToMainThreadAsyncAnalyzer.cs index f2f4e685f..30d3bd629 100644 --- a/src/Microsoft.VisualStudio.Threading.Analyzers/VSTHRD001UseSwitchToMainThreadAsyncAnalyzer.cs +++ b/src/Microsoft.VisualStudio.Threading.Analyzers/VSTHRD001UseSwitchToMainThreadAsyncAnalyzer.cs @@ -20,6 +20,7 @@ public class VSTHRD001UseSwitchToMainThreadAsyncAnalyzer : DiagnosticAnalyzer id: Id, title: Strings.VSTHRD001_Title, messageFormat: Strings.VSTHRD001_MessageFormat, + helpLinkUri: Utils.GetHelpLink(Id), category: "Usage", defaultSeverity: DiagnosticSeverity.Warning, isEnabledByDefault: true); diff --git a/src/Microsoft.VisualStudio.Threading.Analyzers/VSTHRD002UseJtfRunAnalyzer.cs b/src/Microsoft.VisualStudio.Threading.Analyzers/VSTHRD002UseJtfRunAnalyzer.cs index e0cd3033d..15ae68271 100644 --- a/src/Microsoft.VisualStudio.Threading.Analyzers/VSTHRD002UseJtfRunAnalyzer.cs +++ b/src/Microsoft.VisualStudio.Threading.Analyzers/VSTHRD002UseJtfRunAnalyzer.cs @@ -39,6 +39,7 @@ public class VSTHRD002UseJtfRunAnalyzer : DiagnosticAnalyzer id: Id, title: Strings.VSTHRD002_Title, messageFormat: Strings.VSTHRD002_MessageFormat, + helpLinkUri: Utils.GetHelpLink(Id), category: "Usage", defaultSeverity: DiagnosticSeverity.Warning, isEnabledByDefault: true); diff --git a/src/Microsoft.VisualStudio.Threading.Analyzers/VSTHRD003UseJtfRunAsyncAnalyzer.cs b/src/Microsoft.VisualStudio.Threading.Analyzers/VSTHRD003UseJtfRunAsyncAnalyzer.cs index 7edeaa6d0..31452b884 100644 --- a/src/Microsoft.VisualStudio.Threading.Analyzers/VSTHRD003UseJtfRunAsyncAnalyzer.cs +++ b/src/Microsoft.VisualStudio.Threading.Analyzers/VSTHRD003UseJtfRunAsyncAnalyzer.cs @@ -46,6 +46,7 @@ public class VSTHRD003UseJtfRunAsyncAnalyzer : DiagnosticAnalyzer id: Id, title: Strings.VSTHRD003_Title, messageFormat: Strings.VSTHRD003_MessageFormat, + helpLinkUri: Utils.GetHelpLink(Id), category: "Usage", defaultSeverity: DiagnosticSeverity.Warning, isEnabledByDefault: true); diff --git a/src/Microsoft.VisualStudio.Threading.Analyzers/VSTHRD010VsServiceUsageAnalyzer.cs b/src/Microsoft.VisualStudio.Threading.Analyzers/VSTHRD010VsServiceUsageAnalyzer.cs index f17b825d1..105e5eb61 100644 --- a/src/Microsoft.VisualStudio.Threading.Analyzers/VSTHRD010VsServiceUsageAnalyzer.cs +++ b/src/Microsoft.VisualStudio.Threading.Analyzers/VSTHRD010VsServiceUsageAnalyzer.cs @@ -45,12 +45,13 @@ public class VSTHRD010VsServiceUsageAnalyzer : DiagnosticAnalyzer public const string Id = "VSTHRD010"; internal static readonly DiagnosticDescriptor Descriptor = new DiagnosticDescriptor( - id: Id, - title: Strings.VSTHRD010_Title, - messageFormat: Strings.VSTHRD010_MessageFormat, - category: "Usage", - defaultSeverity: DiagnosticSeverity.Warning, - isEnabledByDefault: true); + id: Id, + title: Strings.VSTHRD010_Title, + messageFormat: Strings.VSTHRD010_MessageFormat, + helpLinkUri: Utils.GetHelpLink(Id), + category: "Usage", + defaultSeverity: DiagnosticSeverity.Warning, + isEnabledByDefault: true); private static readonly IImmutableSet KnownMethodsToSwitchToMainThread = ImmutableHashSet.Create(StringComparer.Ordinal, Types.JoinableTaskFactory.SwitchToMainThreadAsync, diff --git a/src/Microsoft.VisualStudio.Threading.Analyzers/VSTHRD011LazyOfTaskAnalyzer.cs b/src/Microsoft.VisualStudio.Threading.Analyzers/VSTHRD011LazyOfTaskAnalyzer.cs index 9a1cc879a..186ed99e5 100644 --- a/src/Microsoft.VisualStudio.Threading.Analyzers/VSTHRD011LazyOfTaskAnalyzer.cs +++ b/src/Microsoft.VisualStudio.Threading.Analyzers/VSTHRD011LazyOfTaskAnalyzer.cs @@ -20,6 +20,7 @@ public class VSTHRD011LazyOfTaskAnalyzer : DiagnosticAnalyzer id: Id, title: Strings.VSTHRD011_Title, messageFormat: Strings.VSTHRD011_MessageFormat, + helpLinkUri: Utils.GetHelpLink(Id), category: "Usage", defaultSeverity: DiagnosticSeverity.Error, isEnabledByDefault: true); diff --git a/src/Microsoft.VisualStudio.Threading.Analyzers/VSTHRD100AsyncVoidMethodAnalyzer.cs b/src/Microsoft.VisualStudio.Threading.Analyzers/VSTHRD100AsyncVoidMethodAnalyzer.cs index 19e001653..4b471017c 100644 --- a/src/Microsoft.VisualStudio.Threading.Analyzers/VSTHRD100AsyncVoidMethodAnalyzer.cs +++ b/src/Microsoft.VisualStudio.Threading.Analyzers/VSTHRD100AsyncVoidMethodAnalyzer.cs @@ -39,6 +39,7 @@ public class VSTHRD100AsyncVoidMethodAnalyzer : DiagnosticAnalyzer id: Id, title: Strings.VSTHRD100_Title, messageFormat: Strings.VSTHRD100_MessageFormat, + helpLinkUri: Utils.GetHelpLink(Id), category: "Usage", defaultSeverity: DiagnosticSeverity.Warning, isEnabledByDefault: true); diff --git a/src/Microsoft.VisualStudio.Threading.Analyzers/VSTHRD101AsyncVoidLambdaAnalyzer.cs b/src/Microsoft.VisualStudio.Threading.Analyzers/VSTHRD101AsyncVoidLambdaAnalyzer.cs index e2a94630b..d993c9941 100644 --- a/src/Microsoft.VisualStudio.Threading.Analyzers/VSTHRD101AsyncVoidLambdaAnalyzer.cs +++ b/src/Microsoft.VisualStudio.Threading.Analyzers/VSTHRD101AsyncVoidLambdaAnalyzer.cs @@ -50,6 +50,7 @@ public class VSTHRD101AsyncVoidLambdaAnalyzer : DiagnosticAnalyzer id: Id, title: Strings.VSTHRD101_Title, messageFormat: Strings.VSTHRD101_MessageFormat, + helpLinkUri: Utils.GetHelpLink(Id), category: "Usage", defaultSeverity: DiagnosticSeverity.Warning, isEnabledByDefault: true); diff --git a/src/Microsoft.VisualStudio.Threading.Analyzers/VSTHRD102AvoidJtfRunInNonPublicMembersAnalyzer.cs b/src/Microsoft.VisualStudio.Threading.Analyzers/VSTHRD102AvoidJtfRunInNonPublicMembersAnalyzer.cs index 5312119ab..88ff024c9 100644 --- a/src/Microsoft.VisualStudio.Threading.Analyzers/VSTHRD102AvoidJtfRunInNonPublicMembersAnalyzer.cs +++ b/src/Microsoft.VisualStudio.Threading.Analyzers/VSTHRD102AvoidJtfRunInNonPublicMembersAnalyzer.cs @@ -24,6 +24,7 @@ public class VSTHRD102AvoidJtfRunInNonPublicMembersAnalyzer : DiagnosticAnalyzer id: Id, title: Strings.VSTHRD102_Title, messageFormat: Strings.VSTHRD102_MessageFormat, + helpLinkUri: Utils.GetHelpLink(Id), category: "Usage", defaultSeverity: DiagnosticSeverity.Info, isEnabledByDefault: true); diff --git a/src/Microsoft.VisualStudio.Threading.Analyzers/VSTHRD103UseAsyncOptionAnalyzer.cs b/src/Microsoft.VisualStudio.Threading.Analyzers/VSTHRD103UseAsyncOptionAnalyzer.cs index a5c6c4060..0f4e76315 100644 --- a/src/Microsoft.VisualStudio.Threading.Analyzers/VSTHRD103UseAsyncOptionAnalyzer.cs +++ b/src/Microsoft.VisualStudio.Threading.Analyzers/VSTHRD103UseAsyncOptionAnalyzer.cs @@ -35,6 +35,7 @@ public class VSTHRD103UseAsyncOptionAnalyzer : DiagnosticAnalyzer id: Id, title: Strings.VSTHRD103_Title, messageFormat: Strings.VSTHRD103_MessageFormat, + helpLinkUri: Utils.GetHelpLink(Id), category: "Usage", defaultSeverity: DiagnosticSeverity.Warning, isEnabledByDefault: true); diff --git a/src/Microsoft.VisualStudio.Threading.Analyzers/VSTHRD104OfferAsyncOptionAnalyzer.cs b/src/Microsoft.VisualStudio.Threading.Analyzers/VSTHRD104OfferAsyncOptionAnalyzer.cs index cf588eac8..cf83b8fea 100644 --- a/src/Microsoft.VisualStudio.Threading.Analyzers/VSTHRD104OfferAsyncOptionAnalyzer.cs +++ b/src/Microsoft.VisualStudio.Threading.Analyzers/VSTHRD104OfferAsyncOptionAnalyzer.cs @@ -20,6 +20,7 @@ public class VSTHRD104OfferAsyncOptionAnalyzer : DiagnosticAnalyzer id: Id, title: Strings.VSTHRD104_Title, messageFormat: Strings.VSTHRD104_MessageFormat, + helpLinkUri: Utils.GetHelpLink(Id), category: "Usage", defaultSeverity: DiagnosticSeverity.Info, isEnabledByDefault: true); diff --git a/src/Microsoft.VisualStudio.Threading.Analyzers/VSTHRD105AvoidImplicitTaskSchedulerCurrentAnalyzer.cs b/src/Microsoft.VisualStudio.Threading.Analyzers/VSTHRD105AvoidImplicitTaskSchedulerCurrentAnalyzer.cs index 397554d21..4303035ba 100644 --- a/src/Microsoft.VisualStudio.Threading.Analyzers/VSTHRD105AvoidImplicitTaskSchedulerCurrentAnalyzer.cs +++ b/src/Microsoft.VisualStudio.Threading.Analyzers/VSTHRD105AvoidImplicitTaskSchedulerCurrentAnalyzer.cs @@ -39,6 +39,7 @@ public class VSTHRD105AvoidImplicitTaskSchedulerCurrentAnalyzer : DiagnosticAnal id: Id, title: Strings.VSTHRD105_Title, messageFormat: Strings.VSTHRD105_MessageFormat, + helpLinkUri: Utils.GetHelpLink(Id), category: "Usage", defaultSeverity: DiagnosticSeverity.Warning, isEnabledByDefault: true); diff --git a/src/Microsoft.VisualStudio.Threading.Analyzers/VSTHRD106UseInvokeAsyncForAsyncEventsAnalyzer.cs b/src/Microsoft.VisualStudio.Threading.Analyzers/VSTHRD106UseInvokeAsyncForAsyncEventsAnalyzer.cs index 5d8a0d1a4..10b78885e 100644 --- a/src/Microsoft.VisualStudio.Threading.Analyzers/VSTHRD106UseInvokeAsyncForAsyncEventsAnalyzer.cs +++ b/src/Microsoft.VisualStudio.Threading.Analyzers/VSTHRD106UseInvokeAsyncForAsyncEventsAnalyzer.cs @@ -45,6 +45,7 @@ public class VSTHRD106UseInvokeAsyncForAsyncEventsAnalyzer : DiagnosticAnalyzer id: Id, title: Strings.VSTHRD106_Title, messageFormat: Strings.VSTHRD106_MessageFormat, + helpLinkUri: Utils.GetHelpLink(Id), category: "Usage", defaultSeverity: DiagnosticSeverity.Warning, isEnabledByDefault: true); diff --git a/src/Microsoft.VisualStudio.Threading.Analyzers/VSTHRD107AwaitTaskWithinUsingExpressionAnalyzer.cs b/src/Microsoft.VisualStudio.Threading.Analyzers/VSTHRD107AwaitTaskWithinUsingExpressionAnalyzer.cs index 6a0e156bb..de148cdf0 100644 --- a/src/Microsoft.VisualStudio.Threading.Analyzers/VSTHRD107AwaitTaskWithinUsingExpressionAnalyzer.cs +++ b/src/Microsoft.VisualStudio.Threading.Analyzers/VSTHRD107AwaitTaskWithinUsingExpressionAnalyzer.cs @@ -40,6 +40,7 @@ public class VSTHRD107AwaitTaskWithinUsingExpressionAnalyzer : DiagnosticAnalyze id: Id, title: Strings.VSTHRD107_Title, messageFormat: Strings.VSTHRD107_MessageFormat, + helpLinkUri: Utils.GetHelpLink(Id), category: "Usage", defaultSeverity: DiagnosticSeverity.Error, isEnabledByDefault: true); diff --git a/src/Microsoft.VisualStudio.Threading.Analyzers/VSTHRD200UseAsyncNamingConventionAnalyzer.cs b/src/Microsoft.VisualStudio.Threading.Analyzers/VSTHRD200UseAsyncNamingConventionAnalyzer.cs index 50e5a27b1..b3b50f8e1 100644 --- a/src/Microsoft.VisualStudio.Threading.Analyzers/VSTHRD200UseAsyncNamingConventionAnalyzer.cs +++ b/src/Microsoft.VisualStudio.Threading.Analyzers/VSTHRD200UseAsyncNamingConventionAnalyzer.cs @@ -26,6 +26,7 @@ public class VSTHRD200UseAsyncNamingConventionAnalyzer : DiagnosticAnalyzer id: Id, title: Strings.VSTHRD200_Title, messageFormat: Strings.VSTHRD200_MessageFormat, + helpLinkUri: Utils.GetHelpLink(Id), category: "Style", defaultSeverity: DiagnosticSeverity.Warning, isEnabledByDefault: true);