public static bool SortNamespaceReferences()

in code/src/CoreTemplateStudio/CoreTemplateStudio.Core/PostActions/Catalog/SortNamespaces/ListStringExtensions.cs [26:76]


        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;
        }