private void ArrangeSection(XNodeSection section, CsProjArrange.ArrangeOptions options) { CombineRootElementsAndSort(section, options); if (options.HasFlag(CsProjArrange.ArrangeOptions.SplitItemGroups)) { SplitItemGroups(section, _stickyElementNames); } if (options.HasFlag(CsProjArrange.ArrangeOptions.SortRootElements)) { SortRootElements(section); } }
private void CombineRootElementsAndSort(XNodeSection section, CsProjArrange.ArrangeOptions options) { var combineGroups = section.Nodes .Where(x => x is XElement) .Cast <XElement>() .GroupBy( x => { var combGroup = new CombineGroups { Name = x.Name.Namespace.ToString() + ":" + x.Name.LocalName, Attributes = string.Join(Environment.NewLine, x.Attributes() .Select(y => y.Name.Namespace.ToString() + ":" + y.Name.LocalName + ":" + y.Value)), }; combGroup.Name += this.TryAddSubNodeSuffix(x, "PropertyGroup", "VSToolsPath"); combGroup.Name += this.TryAddSubNodeSuffix(x, "PropertyGroup", "PostBuildEvent"); combGroup.Name += this.TryAddSubNodeSuffix(x, "ItemGroup", "Folder"); return(combGroup); }); foreach (var elementGroup in combineGroups) { if (options.HasFlag(CsProjArrange.ArrangeOptions.CombineRootElements)) { CombineIdenticalRootElements(section, elementGroup); } ArrangeAllElementsInGroup(elementGroup); } }
private void CombineRootElementsAndSort(XNodeSection section, CsProjArrange.ArrangeOptions options) { var combineGroups = section.Nodes .Where(x => x is XElement) .Cast <XElement>() .GroupBy( x => new CombineGroups { Name = x.Name.Namespace.ToString() + ":" + x.Name.LocalName, Attributes = string.Join(Environment.NewLine, x.Attributes() .Select(y => y.Name.Namespace.ToString() + ":" + y.Name.LocalName + ":" + y.Value)), } ); foreach (var elementGroup in combineGroups) { if (options.HasFlag(CsProjArrange.ArrangeOptions.CombineRootElements)) { CombineIdenticalRootElements(section, elementGroup); } ArrangeAllElementsInGroup(elementGroup); } }
private void SortRootElements(XNodeSection section) { // Sort the elements in root. if (_options.HasFlag(CsProjArrange.ArrangeOptions.KeepCommentWithNext)) { section.Nodes = UnfoldComments( FoldComments(section.Nodes) .OrderBy(x => x.Element, _nodeNameComparer) .ThenBy(x => x.Element.NodeType == XmlNodeType.Element ? x.Element.Attributes() : null, _attributeKeyComparer) ) .ToList(); } else { section.Nodes = section.Nodes .OrderBy(x => x, _nodeNameComparer) .ThenBy(x => x.NodeType == XmlNodeType.Element ? ((XElement)x).Attributes() : null, _attributeKeyComparer) .ToList(); } }