Alphabetizing using statements

This commit is contained in:
Louis DeJardin 2015-09-02 20:31:11 -07:00
parent b25d2d9772
commit 3bbb77f9d0
2 changed files with 36 additions and 1 deletions

View File

@ -2,8 +2,8 @@
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
using Microsoft.AspNet.Server.Kestrel.Networking;
using System.Diagnostics;
using Microsoft.AspNet.Server.Kestrel.Networking;
namespace Microsoft.AspNet.Server.Kestrel.Http
{

View File

@ -49,6 +49,41 @@ namespace Microsoft.StandardsPolice
location: typeDeclaration.GetLocation()));
}
}
var usingDirectives = root.DescendantNodes(descendIntoChildren: node => !(node is TypeDeclarationSyntax))
.OfType<UsingDirectiveSyntax>()
.ToArray();
var priorUsingDirective = default(UsingDirectiveSyntax);
foreach (var usingDirective in usingDirectives)
{
var acceptableOrder = false;
if (!acceptableOrder && priorUsingDirective == null)
{
acceptableOrder = true;
}
if (!acceptableOrder && string.Compare(priorUsingDirective.Name.ToString(), usingDirective.Name.ToString(), StringComparison.OrdinalIgnoreCase) < 0)
{
acceptableOrder = true;
}
if (!acceptableOrder &&
priorUsingDirective.Name.ToString().StartsWith("System.") &&
!usingDirective.Name.ToString().StartsWith("System."))
{
acceptableOrder = true;
}
if (!acceptableOrder)
{
diagnostics.Add(Diagnostic.Create(
"SP1004", "StandardsPolice", "namespaces not alphabetized",
DiagnosticSeverity.Warning,
DiagnosticSeverity.Warning,
false,
3,
location: usingDirective.GetLocation()));
}
priorUsingDirective = usingDirective;
}
}
private static void ScanNamespace(IList<Diagnostic> diagnostics, INamespaceSymbol namespaceSymbol)