Example #1
0
        public bool IsSorted(IEnumerable <MemberDeclarationSyntax> members, MemberDeclarationSortMode sortMode = MemberDeclarationSortMode.ByKind)
        {
            if (members == null)
            {
                throw new ArgumentNullException(nameof(members));
            }

            using (IEnumerator <MemberDeclarationSyntax> en = members.GetEnumerator())
            {
                if (en.MoveNext())
                {
                    MemberDeclarationSyntax member1 = en.Current;

                    while (en.MoveNext())
                    {
                        MemberDeclarationSyntax member2 = en.Current;

                        if (Compare(member1, member2, sortMode) > 0)
                        {
                            return(false);
                        }

                        member1 = member2;
                    }
                }
            }

            return(true);
        }
Example #2
0
        private int Compare(MemberDeclarationSyntax x, MemberDeclarationSyntax y, MemberDeclarationSortMode sortMode)
        {
            if (object.ReferenceEquals(x, y))
            {
                return(0);
            }

            if (x == null)
            {
                return(-1);
            }

            if (y == null)
            {
                return(1);
            }

            int result = GetOrderIndex(x).CompareTo(GetOrderIndex(y));

            if (sortMode == MemberDeclarationSortMode.ByKindThenByName &&
                result == 0)
            {
                return(string.Compare(GetName(x), GetName(y), StringComparison.CurrentCulture));
            }
            else
            {
                return(result);
            }
        }
Example #3
0
 private static void ComputeRefactoring(
     RefactoringContext context,
     MemberDeclarationSortMode sortMode,
     string title,
     MemberDeclarationSelection selectedMembers,
     ImmutableArray <MemberDeclarationSyntax> members)
 {
     if (!MemberDeclarationComparer.GetInstance(sortMode).IsSorted(members))
     {
         context.RegisterRefactoring(
             title,
             cancellationToken => RefactorAsync(context.Document, selectedMembers, sortMode, cancellationToken));
     }
 }
Example #4
0
        public static MemberDeclarationComparer GetInstance(MemberDeclarationSortMode sortMode)
        {
            switch (sortMode)
            {
            case MemberDeclarationSortMode.ByKind:
                return(ByKind);

            case MemberDeclarationSortMode.ByKindThenByName:
                return(ByKindThenByName);

            default:
                throw new NotSupportedException();
            }
        }
        public static MemberDeclarationComparer GetInstance(MemberDeclarationSortMode sortMode)
        {
            switch (sortMode)
            {
            case MemberDeclarationSortMode.ByKind:
                return(ByKind);

            case MemberDeclarationSortMode.ByKindThenByName:
                return(ByKindThenByName);

            default:
                throw new ArgumentException("", nameof(sortMode));
            }
        }
Example #6
0
        private static Task <Document> RefactorAsync(
            Document document,
            MemberDeclarationSelection selectedMembers,
            MemberDeclarationSortMode sortMode,
            CancellationToken cancellationToken)
        {
            MemberDeclarationComparer comparer = MemberDeclarationComparer.GetInstance(sortMode);

            MemberDeclarationSyntax containingMember = selectedMembers.ContainingMember;

            SyntaxList <MemberDeclarationSyntax> members = containingMember.GetMembers();

            SyntaxList <MemberDeclarationSyntax> newMembers = members
                                                              .Take(selectedMembers.StartIndex)
                                                              .Concat(selectedMembers.OrderBy(f => f, comparer))
                                                              .Concat(members.Skip(selectedMembers.EndIndex + 1))
                                                              .ToSyntaxList();

            MemberDeclarationSyntax newNode = containingMember.WithMembers(newMembers);

            return(document.ReplaceNodeAsync(containingMember, newNode, cancellationToken));
        }
Example #7
0
        private static async Task <Document> RefactorAsync(
            Document document,
            SelectedMemberDeclarationCollection selectedMembers,
            MemberDeclarationSortMode sortMode,
            CancellationToken cancellationToken)
        {
            var comparer = new MemberDeclarationComparer(sortMode);

            MemberDeclarationSyntax containingMember = selectedMembers.ContainingMember;

            SyntaxList <MemberDeclarationSyntax> members = containingMember.GetMembers();

            SyntaxList <MemberDeclarationSyntax> newMembers = members
                                                              .Take(selectedMembers.FirstIndex)
                                                              .Concat(selectedMembers.OrderBy(f => f, comparer))
                                                              .Concat(members.Skip(selectedMembers.LastIndex + 1))
                                                              .ToSyntaxList();

            MemberDeclarationSyntax newNode = containingMember.SetMembers(newMembers);

            return(await document.ReplaceNodeAsync(containingMember, newNode, cancellationToken).ConfigureAwait(false));
        }
Example #8
0
 private MemberDeclarationComparer(MemberDeclarationSortMode sortMode = MemberDeclarationSortMode.ByKind)
 {
     SortMode = sortMode;
 }