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