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); }
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); } }
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)); } }
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)); } }
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)); }
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)); }
private MemberDeclarationComparer(MemberDeclarationSortMode sortMode = MemberDeclarationSortMode.ByKind) { SortMode = sortMode; }