public static bool SortNamespaceReferences(this List <string> classContent, NamespaceComparer comparer) { if (classContent == null || !classContent.Any()) { return(false); } var startUsingIndex = classContent.IndexOf(l => l.TrimStart().StartsWith(comparer.Keyword, StringComparison.InvariantCultureIgnoreCase) || string.IsNullOrWhiteSpace(l)); var endUsingIndex = classContent.LastIndexOfWhile(startUsingIndex, l => l.TrimStart().StartsWith(comparer.Keyword, StringComparison.InvariantCultureIgnoreCase) || string.IsNullOrWhiteSpace(l)); if (startUsingIndex == -1 || endUsingIndex == -1) { return(false); } var usingsLinesCount = endUsingIndex - startUsingIndex; var usings = classContent .Skip(startUsingIndex) .Take(usingsLinesCount) .Where(u => !string.IsNullOrWhiteSpace(u)) #pragma warning disable SA1008 // Opening parenthesis must be spaced correctly - StyleCop can't handle Tuples .Select(u => (comparer.ExtractNs(u), u)) #pragma warning restore SA1008 // Opening parenthesis must be spaced correctly .GroupBy(s => ExtractRootNs(s.Item1), s => s.Item2) .ToList(); classContent.RemoveRange(startUsingIndex, usingsLinesCount); var orderedUsings = new List <string>(); if (startUsingIndex > 0) { orderedUsings.Add(string.Empty); } var orderedKeys = GetOrderedNs(usings.Select(u => u.Key)).ToList(); foreach (var key in orderedKeys) { var usingsGroup = usings .FirstOrDefault(u => u.Key.Equals(key)) .Distinct() .ToList(); usingsGroup.Sort(comparer); orderedUsings.AddRange(usingsGroup); orderedUsings.Add(string.Empty); } classContent.InsertRange(startUsingIndex, orderedUsings); return(true); }
public static bool SortNamespaceReferences(this List <string> classContent, NamespaceComparer comparer) { if (classContent == null || !classContent.Any()) { return(false); } var startUsingIndex = classContent.IndexOf(l => l.TrimStart().StartsWith(comparer.Keyword, StringComparison.OrdinalIgnoreCase) || string.IsNullOrWhiteSpace(l)); var endUsingIndex = classContent.LastIndexOfWhile(startUsingIndex, l => l.TrimStart().StartsWith(comparer.Keyword, StringComparison.OrdinalIgnoreCase) || string.IsNullOrWhiteSpace(l)); if (startUsingIndex == -1 || endUsingIndex == -1) { return(false); } var usingsLinesCount = endUsingIndex - startUsingIndex; var usings = classContent .Skip(startUsingIndex) .Take(usingsLinesCount) .Where(u => !string.IsNullOrWhiteSpace(u)) .Select(u => new { ns = comparer.ExtractNs(u), usingStatement = u }) .GroupBy(s => ExtractRootNs(s.ns), s => s.usingStatement) .ToList(); classContent.RemoveRange(startUsingIndex, usingsLinesCount); var orderedUsings = new List <string>(); if (startUsingIndex > 0) { orderedUsings.Add(string.Empty); } var orderedKeys = GetOrderedNs(usings.Select(u => u.Key)).ToList(); foreach (var key in orderedKeys) { var usingsGroup = usings .FirstOrDefault(u => u.Key.Equals(key, StringComparison.Ordinal)) .Distinct() .ToList(); usingsGroup.Sort(comparer); orderedUsings.AddRange(usingsGroup); orderedUsings.Add(string.Empty); } classContent.InsertRange(startUsingIndex, orderedUsings); return(true); }