// Given a message identifier (e.g., CS0219), severity, warning as error and a culture, // get the entire prefix (e.g., "error CS0219: Warning as Error:" for C#) used on error messages. public override string GetMessagePrefix(string id, DiagnosticSeverity severity, bool isWarningAsError, CultureInfo culture) { return(String.Format(culture, "{0} {1}{2}", severity == DiagnosticSeverity.Error || isWarningAsError ? "error" : "warning", id, isWarningAsError ? ErrorFacts.GetMessage(MessageID.IDS_WarnAsError, culture) : "")); }
public override void PrintLangVersions(TextWriter consoleOutput) { consoleOutput.WriteLine(ErrorFacts.GetMessage(MessageID.IDS_LangVersions, Culture)); var defaultVersion = LanguageVersion.Default.MapSpecifiedToEffectiveVersion(); var latestVersion = LanguageVersion.Latest.MapSpecifiedToEffectiveVersion(); foreach (LanguageVersion v in Enum.GetValues(typeof(LanguageVersion))) { if (v == defaultVersion) { consoleOutput.WriteLine($"{v.ToDisplayString()} (default)"); } else if (v == latestVersion) { consoleOutput.WriteLine($"{v.ToDisplayString()} (latest)"); } else if (v == LanguageVersion.CSharp8) { // https://github.com/dotnet/roslyn/issues/29819 This should be removed once we are ready to move C# 8.0 out of beta consoleOutput.WriteLine($"{v.ToDisplayString()} *beta*"); } else { consoleOutput.WriteLine(v.ToDisplayString()); } } consoleOutput.WriteLine(); }
/// <summary> /// Print compiler logo /// </summary> /// <param name="consoleOutput"></param> protected override void PrintLogo(TextWriter consoleOutput) { Assembly thisAssembly = GetType().Assembly; consoleOutput.WriteLine(ErrorFacts.GetMessage(MessageID.IDS_LogoLine1, Culture), FileVersionInfo.GetVersionInfo(thisAssembly.Location).FileVersion); consoleOutput.WriteLine(ErrorFacts.GetMessage(MessageID.IDS_LogoLine2, Culture)); consoleOutput.WriteLine(); }
/// <summary> /// Print compiler logo /// </summary> /// <param name="consoleOutput"></param> public override void PrintLogo(TextWriter consoleOutput) { consoleOutput.WriteLine( ErrorFacts.GetMessage(MessageID.IDS_LogoLine1, Culture), GetToolName(), GetCompilerVersion() ); consoleOutput.WriteLine(ErrorFacts.GetMessage(MessageID.IDS_LogoLine2, Culture)); consoleOutput.WriteLine(); }
private static string MakeCommentMessage(Location location, MessageID messageId) { if (location.IsInSource) { return(ErrorFacts.GetMessage(messageId, CultureInfo.CurrentUICulture)); } else { return(null); } }
private string MakeCommentMessage(Location location, MessageID messageId) { if (location.IsInSource) { // TODO: use culture from compilation instead of invariant culture? return(ErrorFacts.GetMessage(messageId, CultureInfo.InvariantCulture)); } else { return(null); } }
public override string GetMessage(IFormatProvider?formatProvider = null) { var culture = formatProvider as CultureInfo; string messagePrefix = this.MessageProvider.LoadMessage(this.Code, culture); string message = ErrorFacts.GetMessage(_xmlErrorCode, culture); RoslynDebug.Assert(!string.IsNullOrEmpty(message)); if (this.Arguments == null || this.Arguments.Length == 0) { return(String.Format(formatProvider, messagePrefix, message)); } return(String.Format(formatProvider, String.Format(formatProvider, messagePrefix, message), GetArgumentsToUse(formatProvider))); }
public override string GetMessage(CultureInfo culture = null) { if (culture == null) { culture = CultureInfo.InvariantCulture; } string messagePrefix = this.MessageProvider.LoadMessage(this.Code, culture); string message = ErrorFacts.GetMessage(xmlErrorCode, culture); System.Diagnostics.Debug.Assert(!string.IsNullOrEmpty(message)); if (this.Arguments == null || this.Arguments.Length == 0) { return(String.Format(culture, messagePrefix, message)); } return(String.Format(culture, String.Format(culture, messagePrefix, message), this.Arguments)); }
public override void PrintLangVersions(TextWriter consoleOutput) { consoleOutput.WriteLine(ErrorFacts.GetMessage(MessageID.IDS_LangVersions, Culture)); var defaultVersion = LanguageVersion.Default.MapSpecifiedToEffectiveVersion(); var latestVersion = LanguageVersion.Latest.MapSpecifiedToEffectiveVersion(); foreach (var v in (LanguageVersion[])Enum.GetValues(typeof(LanguageVersion))) { if (v == defaultVersion) { consoleOutput.WriteLine($"{v.ToDisplayString()} (default)"); } else if (v == latestVersion) { consoleOutput.WriteLine($"{v.ToDisplayString()} (latest)"); } else { consoleOutput.WriteLine(v.ToDisplayString()); } } consoleOutput.WriteLine(); }
public string ToString(string?format, IFormatProvider?formatProvider) { return(ErrorFacts.GetMessage(_id, formatProvider as System.Globalization.CultureInfo)); }
public override void PrintHelp(TextWriter consoleOutput) { consoleOutput.WriteLine(ErrorFacts.GetMessage(MessageID.IDS_CSCHelp, Culture)); }
internal override string GetToolName() { return(ErrorFacts.GetMessage(MessageID.IDS_ToolName, Culture)); }
public override string LoadMessage(int code, CultureInfo language) { return(ErrorFacts.GetMessage((ErrorCode)code, language)); }
private XNode[] RewriteIncludeElement(XElement includeElement, string currentXmlFilePath, CSharpSyntaxNode originatingSyntax, out string commentMessage) { Location location = GetIncludeElementLocation(includeElement, ref currentXmlFilePath, ref originatingSyntax); Debug.Assert(originatingSyntax != null); bool diagnose = originatingSyntax.SyntaxTree.ReportDocumentationCommentDiagnostics(); if (!EnterIncludeElement(location)) { // NOTE: these must exist since we're already processed this node elsewhere in the call stack. XAttribute fileAttr = includeElement.Attribute(XName.Get(DocumentationCommentXmlNames.FileAttributeName)); XAttribute pathAttr = includeElement.Attribute(XName.Get(DocumentationCommentXmlNames.PathAttributeName)); string filePathValue = fileAttr.Value; string xpathValue = pathAttr.Value; if (diagnose) { _diagnostics.Add(ErrorCode.WRN_FailedInclude, location, filePathValue, xpathValue, new LocalizableErrorArgument(MessageID.IDS_OperationCausedStackOverflow)); } commentMessage = ErrorFacts.GetMessage(MessageID.IDS_XMLNOINCLUDE, CultureInfo.CurrentUICulture); // Don't inspect the children - we're already in a cycle. return(new XNode[] { new XComment(commentMessage), includeElement.Copy(copyAttributeAnnotations: false) }); } DiagnosticBag includeDiagnostics = DiagnosticBag.GetInstance(); try { XAttribute fileAttr = includeElement.Attribute(XName.Get(DocumentationCommentXmlNames.FileAttributeName)); XAttribute pathAttr = includeElement.Attribute(XName.Get(DocumentationCommentXmlNames.PathAttributeName)); bool hasFileAttribute = fileAttr != null; bool hasPathAttribute = pathAttr != null; if (!hasFileAttribute || !hasPathAttribute) { var subMessage = hasFileAttribute ? MessageID.IDS_XMLMISSINGINCLUDEPATH.Localize() : MessageID.IDS_XMLMISSINGINCLUDEFILE.Localize(); includeDiagnostics.Add(ErrorCode.WRN_InvalidInclude, location, subMessage); commentMessage = MakeCommentMessage(location, MessageID.IDS_XMLBADINCLUDE); return(null); } string xpathValue = pathAttr.Value; string filePathValue = fileAttr.Value; var resolver = _compilation.Options.XmlReferenceResolver; if (resolver == null) { includeDiagnostics.Add(ErrorCode.WRN_FailedInclude, location, filePathValue, xpathValue, new CodeAnalysisResourcesLocalizableErrorArgument(nameof(CodeAnalysisResources.XmlReferencesNotSupported))); commentMessage = MakeCommentMessage(location, MessageID.IDS_XMLFAILEDINCLUDE); return(null); } string resolvedFilePath = resolver.ResolveReference(filePathValue, currentXmlFilePath); if (resolvedFilePath == null) { // NOTE: same behavior as IOException. includeDiagnostics.Add(ErrorCode.WRN_FailedInclude, location, filePathValue, xpathValue, new CodeAnalysisResourcesLocalizableErrorArgument(nameof(CodeAnalysisResources.FileNotFound))); commentMessage = MakeCommentMessage(location, MessageID.IDS_XMLFAILEDINCLUDE); return(null); } if (_includedFileCache == null) { _includedFileCache = new DocumentationCommentIncludeCache(resolver); } try { XDocument doc; try { doc = _includedFileCache.GetOrMakeDocument(resolvedFilePath); } catch (IOException e) { // NOTE: same behavior as resolvedFilePath == null. includeDiagnostics.Add(ErrorCode.WRN_FailedInclude, location, filePathValue, xpathValue, e.Message); commentMessage = MakeCommentMessage(location, MessageID.IDS_XMLFAILEDINCLUDE); return(null); } Debug.Assert(doc != null); string errorMessage; bool invalidXPath; XElement[] loadedElements = XmlUtilities.TrySelectElements(doc, xpathValue, out errorMessage, out invalidXPath); if (loadedElements == null) { includeDiagnostics.Add(ErrorCode.WRN_FailedInclude, location, filePathValue, xpathValue, errorMessage); commentMessage = MakeCommentMessage(location, MessageID.IDS_XMLFAILEDINCLUDE); if (invalidXPath) { // leave the include node as is return(null); } if (location.IsInSource) { // As in Dev11, return only the comment - drop the include element. return(new XNode[] { new XComment(commentMessage) }); } else { commentMessage = null; return(Array.Empty <XNode>()); } } if (loadedElements != null && loadedElements.Length > 0) { // change the current XML file path for nodes contained in the document: XNode[] result = RewriteMany(loadedElements, resolvedFilePath, originatingSyntax); // The elements could be rewritten away if they are includes that refer to invalid // (but existing and accessible) XML files. If this occurs, behave as if we // had failed to find any XPath results (as in Dev11). if (result.Length > 0) { // NOTE: in this case, we do NOT visit the children of the include element - // they are dropped. commentMessage = null; return(result); } } commentMessage = MakeCommentMessage(location, MessageID.IDS_XMLNOINCLUDE); return(null); } catch (XmlException e) { // NOTE: invalid XML is handled differently from other errors - we don't include the include element // in the results and the location is in the included (vs includING) file. Location errorLocation = XmlLocation.Create(e, resolvedFilePath); includeDiagnostics.Add(ErrorCode.WRN_XMLParseIncludeError, errorLocation, GetDescription(e)); //NOTE: location is in included file. if (location.IsInSource) { commentMessage = string.Format(ErrorFacts.GetMessage(MessageID.IDS_XMLIGNORED2, CultureInfo.CurrentUICulture), resolvedFilePath); // As in Dev11, return only the comment - drop the include element. return(new XNode[] { new XComment(commentMessage) }); } else { commentMessage = null; return(Array.Empty <XNode>()); } } } finally { if (diagnose) { _diagnostics.AddRange(includeDiagnostics); } includeDiagnostics.Free(); LeaveIncludeElement(location); } }
internal override string GetWarnAsErrorMessage(CultureInfo culture) { return(ErrorFacts.GetMessage(MessageID.IDS_WarnAsError, culture)); }
/// <summary> /// Print compiler logo /// </summary> /// <param name="consoleOutput"></param> protected override void PrintLogo(TextWriter consoleOutput) { consoleOutput.WriteLine(ErrorFacts.GetMessage(MessageID.IDS_LogoLine1, Culture), GetToolName(), GetAssemblyFileVersion()); consoleOutput.WriteLine(ErrorFacts.GetMessage(MessageID.IDS_LogoLine2, Culture)); consoleOutput.WriteLine(); }