private static GeneratorState SetGeneratorException(CommonMessageProvider provider, GeneratorState generatorState, ISourceGenerator generator, Exception e, DiagnosticBag?diagnosticBag, bool isInit = false) { var errorCode = isInit ? provider.WRN_GeneratorFailedDuringInitialization : provider.WRN_GeneratorFailedDuringGeneration; // ISSUE: Diagnostics don't currently allow descriptions with arguments, so we have to manually create the diagnostic description // ISSUE: Exceptions also don't support IFormattable, so will always be in the current UI Culture. // ISSUE: See https://github.com/dotnet/roslyn/issues/46939 var description = string.Format(provider.GetDescription(errorCode).ToString(CultureInfo.CurrentUICulture), e); var descriptor = new DiagnosticDescriptor( provider.GetIdForErrorCode(errorCode), provider.GetTitle(errorCode), provider.GetMessageFormat(errorCode), description: description, category: "Compiler", defaultSeverity: DiagnosticSeverity.Warning, isEnabledByDefault: true, customTags: WellKnownDiagnosticTags.AnalyzerException); var diagnostic = Diagnostic.Create(descriptor, Location.None, generator.GetType().Name, e.GetType().Name, e.Message); diagnosticBag?.Add(diagnostic); return(new GeneratorState(generatorState.Info, e, diagnostic)); }
private static DiagnosticDescriptor CreateDescriptor( int errorCode, DiagnosticSeverity defaultSeverity, CommonMessageProvider messageProvider ) { var id = messageProvider.GetIdForErrorCode(errorCode); var title = messageProvider.GetTitle(errorCode); var description = messageProvider.GetDescription(errorCode); var messageFormat = messageProvider.GetMessageFormat(errorCode); var helpLink = messageProvider.GetHelpLink(errorCode); var category = messageProvider.GetCategory(errorCode); var customTags = GetCustomTags(defaultSeverity); return(new DiagnosticDescriptor( id, title, messageFormat, category, defaultSeverity, isEnabledByDefault: true, description: description, helpLinkUri: helpLink, customTags: customTags )); }
private static DiagnosticDescriptor CreateDescriptor(int errorCode, DiagnosticSeverity defaultSeverity, CommonMessageProvider messageProvider) { var id = messageProvider.GetIdForErrorCode(errorCode); var title = messageProvider.GetTitle(errorCode); var description = messageProvider.GetDescription(errorCode); var messageFormat = messageProvider.GetMessageFormat(errorCode); var helpLink = messageProvider.GetHelpLink(errorCode); var category = messageProvider.GetCategory(errorCode); var customTags = GetCustomTags(defaultSeverity); return new DiagnosticDescriptor(id, title, messageFormat, category, defaultSeverity, isEnabledByDefault: true, description: description, helpLinkUri: helpLink, customTags: customTags); }
private static DiagnosticDescriptor CreateDescriptor(int errorCode, DiagnosticSeverity defaultSeverity, CommonMessageProvider messageProvider) { string id = messageProvider.GetIdForErrorCode(errorCode); LocalizableString title = messageProvider.GetTitle(errorCode); LocalizableString description = messageProvider.GetDescription(errorCode); LocalizableString messageFormat = messageProvider.GetMessageFormat(errorCode); string helpLink = messageProvider.GetHelpLink(errorCode); string category = messageProvider.GetCategory(errorCode); ImmutableArray <string> customTags = GetCustomTags(defaultSeverity); return(new DiagnosticDescriptor(id, title, messageFormat, category, defaultSeverity, isEnabledByDefault: true, description: description, helpLinkUri: helpLink, customTags: customTags)); }