private void AddXmlDocumentation(ISymbol symbol, MetadataItems metadata) { INamespaceSymbol namespaceSymbol = symbol as INamespaceSymbol; string documentationCommentXml = namespaceSymbol == null ? symbol.GetDocumentationCommentXml(expandIncludes : true) : GetNamespaceDocumentationCommentXml(namespaceSymbol); XmlDocumentationParser xmlDocumentationParser = new XmlDocumentationParser(_context, symbol, _compilation, _symbolToDocument, _cssClasses); IEnumerable <string> otherHtmlElementNames = xmlDocumentationParser.Parse(documentationCommentXml); // Add standard HTML elements metadata.AddRange(new [] { new MetadataItem(CodeAnalysisKeys.CommentXml, documentationCommentXml), new MetadataItem(CodeAnalysisKeys.Example, _ => xmlDocumentationParser.Process().Example), new MetadataItem(CodeAnalysisKeys.Remarks, _ => xmlDocumentationParser.Process().Remarks), new MetadataItem(CodeAnalysisKeys.Summary, _ => xmlDocumentationParser.Process().Summary), new MetadataItem(CodeAnalysisKeys.Returns, _ => xmlDocumentationParser.Process().Returns), new MetadataItem(CodeAnalysisKeys.Value, _ => xmlDocumentationParser.Process().Value), new MetadataItem(CodeAnalysisKeys.Exceptions, _ => xmlDocumentationParser.Process().Exceptions), new MetadataItem(CodeAnalysisKeys.Permissions, _ => xmlDocumentationParser.Process().Permissions), new MetadataItem(CodeAnalysisKeys.Params, _ => xmlDocumentationParser.Process().Params), new MetadataItem(CodeAnalysisKeys.TypeParams, _ => xmlDocumentationParser.Process().TypeParams), new MetadataItem(CodeAnalysisKeys.SeeAlso, _ => xmlDocumentationParser.Process().SeeAlso) }); // Add other HTML elements with keys of [ElementName]Html metadata.AddRange(otherHtmlElementNames.Select(x => new MetadataItem(FirstLetterToUpper(x) + "Comments", _ => xmlDocumentationParser.Process().OtherComments[x]))); }
private void AddXmlDocumentation(ISymbol symbol, MetadataItems metadata) { // Get the documentation comments INamespaceSymbol namespaceSymbol = symbol as INamespaceSymbol; string documentationCommentXml; lock (XmlDocLock) { // Need to lock the XML comment access or it sometimes doesn't get generated when using external XML doc files documentationCommentXml = namespaceSymbol == null ? symbol.GetDocumentationCommentXml(expandIncludes : true) : GetNamespaceDocumentationCommentXml(namespaceSymbol); } // Should we assume inheritdoc? if (string.IsNullOrEmpty(documentationCommentXml) && _implicitInheritDoc) { documentationCommentXml = "<inheritdoc/>"; } // Create and parse the documentation comments XmlDocumentationParser xmlDocumentationParser = new XmlDocumentationParser(_context, symbol, _compilation, _symbolToDocument, _cssClasses); IEnumerable <string> otherHtmlElementNames = xmlDocumentationParser.Parse(documentationCommentXml); // Add standard HTML elements metadata.AddRange(new [] { new MetadataItem(CodeAnalysisKeys.CommentXml, documentationCommentXml), new MetadataItem(CodeAnalysisKeys.Example, _ => xmlDocumentationParser.Process().Example), new MetadataItem(CodeAnalysisKeys.Remarks, _ => xmlDocumentationParser.Process().Remarks), new MetadataItem(CodeAnalysisKeys.Summary, _ => xmlDocumentationParser.Process().Summary), new MetadataItem(CodeAnalysisKeys.Returns, _ => xmlDocumentationParser.Process().Returns), new MetadataItem(CodeAnalysisKeys.Value, _ => xmlDocumentationParser.Process().Value), new MetadataItem(CodeAnalysisKeys.Exceptions, _ => xmlDocumentationParser.Process().Exceptions), new MetadataItem(CodeAnalysisKeys.Permissions, _ => xmlDocumentationParser.Process().Permissions), new MetadataItem(CodeAnalysisKeys.Params, _ => xmlDocumentationParser.Process().Params), new MetadataItem(CodeAnalysisKeys.TypeParams, _ => xmlDocumentationParser.Process().TypeParams), new MetadataItem(CodeAnalysisKeys.SeeAlso, _ => xmlDocumentationParser.Process().SeeAlso) }); // Add other HTML elements with keys of [ElementName]Html metadata.AddRange(otherHtmlElementNames.Select(x => new MetadataItem( FirstLetterToUpper(x) + "Comments", _ => xmlDocumentationParser.Process().OtherComments[x]))); }