Skip to content

Commit 170eed7

Browse files
committed
Add the usingDirectivesPlacement configuration property
1 parent 23c6efe commit 170eed7

5 files changed

Lines changed: 57 additions & 1 deletion

File tree

StyleCop.Analyzers/StyleCop.Analyzers.Test/Settings/SettingsUnitTests.cs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ namespace StyleCop.Analyzers.Test.Settings
66
using System.Collections.Immutable;
77
using System.Threading;
88
using System.Threading.Tasks;
9+
using Analyzers.Settings.ObjectModel;
910
using Microsoft.CodeAnalysis;
1011
using Microsoft.CodeAnalysis.Diagnostics;
1112
using Microsoft.CodeAnalysis.Text;
@@ -28,9 +29,11 @@ public void VerifySettingsDefaults()
2829
Assert.True(styleCopSettings.NamingRules.AllowCommonHungarianPrefixes);
2930
Assert.Equal(0, styleCopSettings.NamingRules.AllowedHungarianPrefixes.Length);
3031

32+
Assert.NotNull(styleCopSettings.OrderingRules);
33+
Assert.Equal(UsingDirectivesPlacement.InsideNamespace, styleCopSettings.OrderingRules.UsingDirectivesPlacement);
34+
3135
Assert.NotNull(styleCopSettings.SpacingRules);
3236
Assert.NotNull(styleCopSettings.ReadabilityRules);
33-
Assert.NotNull(styleCopSettings.OrderingRules);
3437
Assert.NotNull(styleCopSettings.MaintainabilityRules);
3538
}
3639

@@ -51,6 +54,9 @@ public async Task VerifySettingsAreReadCorrectlyAsync()
5154
""namingRules"": {
5255
""allowCommonHungarianPrefixes"": false,
5356
""allowedHungarianPrefixes"": [""a"", ""ab""]
57+
},
58+
""orderingRules"": {
59+
""usingDirectivesPlacement"": ""outsideNamespace""
5460
}
5561
}
5662
}
@@ -63,6 +69,9 @@ public async Task VerifySettingsAreReadCorrectlyAsync()
6369
Assert.Equal("Custom copyright text.", styleCopSettings.DocumentationRules.CopyrightText);
6470
Assert.False(styleCopSettings.NamingRules.AllowCommonHungarianPrefixes);
6571
Assert.Equal(new[] { "a", "ab" }, styleCopSettings.NamingRules.AllowedHungarianPrefixes);
72+
73+
Assert.NotNull(styleCopSettings.OrderingRules);
74+
Assert.Equal(UsingDirectivesPlacement.OutsideNamespace, styleCopSettings.OrderingRules.UsingDirectivesPlacement);
6675
}
6776

6877
/// <summary>

StyleCop.Analyzers/StyleCop.Analyzers/Settings/ObjectModel/OrderingSettings.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,22 @@ namespace StyleCop.Analyzers.Settings.ObjectModel
88
[JsonObject(MemberSerialization.OptIn)]
99
internal class OrderingSettings
1010
{
11+
/// <summary>
12+
/// This is the backing field for the <see cref="UsingDirectivesPlacement"/> property.
13+
/// </summary>
14+
[JsonProperty("usingDirectivesPlacement", DefaultValueHandling = DefaultValueHandling.Include)]
15+
private UsingDirectivesPlacement usingDirectivesPlacement;
16+
1117
/// <summary>
1218
/// Initializes a new instance of the <see cref="OrderingSettings"/> class during JSON deserialization.
1319
/// </summary>
1420
[JsonConstructor]
1521
protected internal OrderingSettings()
1622
{
23+
this.usingDirectivesPlacement = UsingDirectivesPlacement.InsideNamespace;
1724
}
25+
26+
public UsingDirectivesPlacement UsingDirectivesPlacement =>
27+
this.usingDirectivesPlacement;
1828
}
1929
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
// Copyright (c) Tunnel Vision Laboratories, LLC. All Rights Reserved.
2+
// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information.
3+
4+
namespace StyleCop.Analyzers.Settings.ObjectModel
5+
{
6+
/// <summary>
7+
/// Specifies the desired placement of using directives.
8+
/// </summary>
9+
internal enum UsingDirectivesPlacement
10+
{
11+
/// <summary>
12+
/// Place using directives inside the namespace definition.
13+
/// </summary>
14+
InsideNamespace,
15+
16+
/// <summary>
17+
/// Place using directives outside the namespace definition.
18+
/// </summary>
19+
OutsideNamespace,
20+
21+
/// <summary>
22+
/// Allow using directives inside or outside the namespace definition.
23+
/// </summary>
24+
Preserve
25+
}
26+
}

StyleCop.Analyzers/StyleCop.Analyzers/Settings/stylecop.schema.json

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,16 @@
2929
"description": "Configuration for ordering rules (SA1200-)",
3030
"additionalProperties": false,
3131
"properties": {
32+
"usingDirectivesPlacement": {
33+
"type": "string",
34+
"description": "Specifies the desired placement of using directives.\r\ninsideNamespace: Place using directives inside the namespace definition\r\noutsideNamespace: Place using directives outside the namespace definition\r\npreserve: Allow using directives inside or outside the namespace definition",
35+
"enum": [
36+
"insideNamespace",
37+
"outsideNamespace",
38+
"preserve"
39+
],
40+
"default": "insideNamespace"
41+
}
3242
}
3343
},
3444
"namingRules": {

StyleCop.Analyzers/StyleCop.Analyzers/StyleCop.Analyzers.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -279,6 +279,7 @@
279279
<Compile Include="Settings\ObjectModel\SettingsFile.cs" />
280280
<Compile Include="Settings\ObjectModel\SpacingSettings.cs" />
281281
<Compile Include="Settings\ObjectModel\StyleCopSettings.cs" />
282+
<Compile Include="Settings\ObjectModel\UsingDirectivesPlacement.cs" />
282283
<Compile Include="Settings\SettingsHelper.cs" />
283284
<Compile Include="Settings\SettingsResources.Designer.cs">
284285
<AutoGen>True</AutoGen>

0 commit comments

Comments
 (0)