Esempio n. 1
0
        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);
        }