private static void Analyze <TNode>( SyntaxNodeAnalysisContext context, SyntaxList <XmlNodeSyntax> xmlNodes, SeparatedSyntaxList <TNode> nodes, XmlTag tag, Func <SeparatedSyntaxList <TNode>, string, int> indexOf) where TNode : SyntaxNode { XmlNodeSyntax firstElement = null; int firstIndex = -1; for (int i = 0; i < xmlNodes.Count; i++) { XmlElementInfo elementInfo = SyntaxInfo.XmlElementInfo(xmlNodes[i]); if (!elementInfo.Success) { continue; } if (!elementInfo.HasTag(tag)) { firstIndex = -1; continue; } XmlNodeSyntax element = elementInfo.Element; string name = (element.IsKind(SyntaxKind.XmlElement)) ? ((XmlElementSyntax)element).GetAttributeValue("name") : ((XmlEmptyElementSyntax)element).GetAttributeValue("name"); if (name == null) { firstIndex = -1; continue; } int index = indexOf(nodes, name); if (index == -1) { ReportUnusedElement(context, element, i, xmlNodes); } else if (index < firstIndex) { ReportDiagnosticIfNotSuppressed(context, DiagnosticRules.OrderElementsInDocumentationComment, firstElement); return; } else { firstElement = element; } firstIndex = index; } }
internal static XmlNodeSyntax AddCrefIdentifierToNullKeywordElement(XmlNodeSyntax node, string identifier) { if (node.IsKind(SyntaxKind.XmlEmptyElement)) { node = ((XmlEmptyElementSyntax)(node)).WithAttributes( SyntaxFactory.SingletonList <XmlAttributeSyntax>( SyntaxFactory.XmlCrefAttribute( SyntaxFactory.NameMemberCref( SyntaxFactory.IdentifierName(identifier))))); } return(node); }
private static DocumentationCommentTriviaSyntax RemoveFilterPriorityElement(DocumentationCommentTriviaSyntax commentTrivia) { SyntaxList<XmlNodeSyntax> content = commentTrivia.Content; for (int i = content.Count - 1; i >= 0; i--) { XmlNodeSyntax xmlNode = content[i]; if (xmlNode.IsKind(SyntaxKind.XmlElement)) { var xmlElement = (XmlElementSyntax)xmlNode; if (xmlElement.IsLocalName("filterpriority", StringComparison.OrdinalIgnoreCase)) content = content.RemoveAt(i); } } return commentTrivia.WithContent(content); }
private static DocumentationCommentTriviaSyntax RemoveFilterPriorityElement(DocumentationCommentTriviaSyntax commentTrivia) { SyntaxList <XmlNodeSyntax> content = commentTrivia.Content; for (int i = content.Count - 1; i >= 0; i--) { XmlNodeSyntax xmlNode = content[i]; if (xmlNode.IsKind(SyntaxKind.XmlElement)) { var xmlElement = (XmlElementSyntax)xmlNode; if (xmlElement.IsLocalName("filterpriority", "FILTERPRIORITY")) { content = content.RemoveAt(i); } } } return(commentTrivia.WithContent(content)); }
private static bool IsSummaryMissing(XmlElementSyntax summaryElement) { SyntaxList <XmlNodeSyntax> content = summaryElement.Content; if (content.Count == 0) { return(true); } else if (content.Count == 1) { XmlNodeSyntax node = content.First(); if (node.IsKind(SyntaxKind.XmlText)) { var xmlText = (XmlTextSyntax)node; return(xmlText.TextTokens.All(IsWhitespaceOrNewLine)); } } return(false); }
private static DocumentationCommentTriviaSyntax RemoveFilterPriorityElement(DocumentationCommentTriviaSyntax commentTrivia) { SyntaxList <XmlNodeSyntax> content = commentTrivia.Content; for (int i = content.Count - 1; i >= 0; i--) { XmlNodeSyntax xmlNode = content[i]; if (xmlNode.IsKind(SyntaxKind.XmlElement)) { var xmlElement = (XmlElementSyntax)xmlNode; string name = xmlElement.StartTag?.Name?.LocalName.ValueText; if (string.Equals(name, "filterpriority", StringComparison.OrdinalIgnoreCase)) { content = content.RemoveAt(i); } } } return(commentTrivia.WithContent(content)); }
private static SyntaxList <XmlNodeSyntax> SortElements <TNode>( SeparatedSyntaxList <TNode> nodes, SyntaxList <XmlNodeSyntax> content, int firstIndex, XmlElementKind kind, Func <SeparatedSyntaxList <TNode>, string, int> indexOf) where TNode : SyntaxNode { var xmlNodes = new List <XmlNodeSyntax>(); var ranks = new Dictionary <XmlNodeSyntax, int>(); for (int i = firstIndex; i < content.Count; i++) { XmlElementInfo elementInfo = SyntaxInfo.XmlElementInfo(content[i]); if (elementInfo.Success) { if (elementInfo.IsElementKind(kind)) { XmlNodeSyntax element = elementInfo.Element; string value = (element.IsKind(SyntaxKind.XmlElement)) ? ((XmlElementSyntax)element).GetAttributeValue("name") : ((XmlEmptyElementSyntax)element).GetAttributeValue("name"); if (value != null) { ranks[element] = indexOf(nodes, value); } else { break; } } else { break; } } xmlNodes.Add(content[i]); } for (int i = 0; i < xmlNodes.Count - 1; i++) { for (int j = 0; j < xmlNodes.Count - i - 1; j++) { XmlNodeSyntax node1 = xmlNodes[j]; if (ranks.TryGetValue(node1, out int rank1)) { int k = j + 1; while (k < xmlNodes.Count - i - 1) { XmlNodeSyntax node2 = xmlNodes[k]; if (ranks.TryGetValue(node2, out int rank2)) { if (rank1 > rank2) { xmlNodes[k] = node1; xmlNodes[j] = node2; } break; } k++; } } } } return(content.ReplaceRange(firstIndex, xmlNodes.Count, xmlNodes)); }