// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. using System.Collections.Generic; using Microsoft.CodeAnalysis.CSharp.Syntax; using Microsoft.CodeAnalysis.CSharp.Utilities; using Roslyn.Utilities; namespace Microsoft.CodeAnalysis.CSharp.Extensions; internal static class UsingDirectiveSyntaxExtensions { public static void SortUsingDirectives( this List<UsingDirectiveSyntax> usingDirectives, SyntaxList<UsingDirectiveSyntax> existingDirectives, bool placeSystemNamespaceFirst) { var systemFirstInstance = UsingsAndExternAliasesDirectiveComparer.SystemFirstInstance; var normalInstance = UsingsAndExternAliasesDirectiveComparer.NormalInstance; var specialCaseSystem = placeSystemNamespaceFirst; var comparers = specialCaseSystem ? (systemFirstInstance, normalInstance) : (normalInstance, systemFirstInstance); // First, see if the usings were sorted according to the user's preference. If so, // keep the same sorting after we add the using. However, if the usings weren't sorted // according to their preference, then see if they're sorted in the other way. If so // preserve that sorting as well. That way if the user is working with a file that // was written on a machine with a different default, the usings will stay in a // reasonable order. if (existingDirectives.IsSorted(comparers.Item1)) { usingDirectives.Sort(comparers.Item1); } else if (existingDirectives.IsSorted(comparers.Item2)) { usingDirectives.Sort(comparers.Item2); } } } |