Skip to content

Commit 4c453fb

Browse files
committed
Add StyleCop to UnityPackage
1 parent 0ebb4ee commit 4c453fb

File tree

6 files changed

+371
-5
lines changed

6 files changed

+371
-5
lines changed

CodeAnalysis.ruleset

Lines changed: 238 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,238 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<RuleSet Name="Code Analysis Ruleset for Solution" ToolsVersion="14.0">
3+
<Rules AnalyzerId="Microsoft.Analyzers.ManagedCodeAnalysis" RuleNamespace="Microsoft.Rules.Managed">
4+
<Rule Id="CA1001" Action="Warning" />
5+
<Rule Id="CA1009" Action="Warning" />
6+
<Rule Id="CA1016" Action="Warning" />
7+
<Rule Id="CA1033" Action="Warning" />
8+
<Rule Id="CA1049" Action="Warning" />
9+
<Rule Id="CA1060" Action="Warning" />
10+
<Rule Id="CA1061" Action="Warning" />
11+
<Rule Id="CA1063" Action="Warning" />
12+
<Rule Id="CA1065" Action="Warning" />
13+
<Rule Id="CA1301" Action="Warning" />
14+
<Rule Id="CA1400" Action="Warning" />
15+
<Rule Id="CA1401" Action="Warning" />
16+
<Rule Id="CA1403" Action="Warning" />
17+
<Rule Id="CA1404" Action="Warning" />
18+
<Rule Id="CA1405" Action="Warning" />
19+
<Rule Id="CA1410" Action="Warning" />
20+
<Rule Id="CA1415" Action="Warning" />
21+
<Rule Id="CA1821" Action="Warning" />
22+
<Rule Id="CA1900" Action="Warning" />
23+
<Rule Id="CA1901" Action="Warning" />
24+
<Rule Id="CA2002" Action="Warning" />
25+
<Rule Id="CA2100" Action="Warning" />
26+
<Rule Id="CA2101" Action="Warning" />
27+
<Rule Id="CA2108" Action="Warning" />
28+
<Rule Id="CA2111" Action="Warning" />
29+
<Rule Id="CA2112" Action="Warning" />
30+
<Rule Id="CA2114" Action="Warning" />
31+
<Rule Id="CA2116" Action="Warning" />
32+
<Rule Id="CA2117" Action="Warning" />
33+
<Rule Id="CA2122" Action="Warning" />
34+
<Rule Id="CA2123" Action="Warning" />
35+
<Rule Id="CA2124" Action="Warning" />
36+
<Rule Id="CA2126" Action="Warning" />
37+
<Rule Id="CA2131" Action="Warning" />
38+
<Rule Id="CA2132" Action="Warning" />
39+
<Rule Id="CA2133" Action="Warning" />
40+
<Rule Id="CA2134" Action="Warning" />
41+
<Rule Id="CA2137" Action="Warning" />
42+
<Rule Id="CA2138" Action="Warning" />
43+
<Rule Id="CA2140" Action="Warning" />
44+
<Rule Id="CA2141" Action="Warning" />
45+
<Rule Id="CA2146" Action="Warning" />
46+
<Rule Id="CA2147" Action="Warning" />
47+
<Rule Id="CA2149" Action="Warning" />
48+
<Rule Id="CA2200" Action="Warning" />
49+
<Rule Id="CA2202" Action="Warning" />
50+
<Rule Id="CA2207" Action="Warning" />
51+
<Rule Id="CA2212" Action="Warning" />
52+
<Rule Id="CA2213" Action="Warning" />
53+
<Rule Id="CA2214" Action="Warning" />
54+
<Rule Id="CA2216" Action="Warning" />
55+
<Rule Id="CA2220" Action="Warning" />
56+
<Rule Id="CA2229" Action="Warning" />
57+
<Rule Id="CA2231" Action="Warning" />
58+
<Rule Id="CA2232" Action="Warning" />
59+
<Rule Id="CA2235" Action="Warning" />
60+
<Rule Id="CA2236" Action="Warning" />
61+
<Rule Id="CA2237" Action="Warning" />
62+
<Rule Id="CA2238" Action="Warning" />
63+
<Rule Id="CA2240" Action="Warning" />
64+
<Rule Id="CA2241" Action="Warning" />
65+
<Rule Id="CA2242" Action="Warning" />
66+
</Rules>
67+
<Rules AnalyzerId="StyleCop.Analyzers" RuleNamespace="StyleCop.Analyzers">
68+
<Rule Id="SA0000" Action="Hidden" />
69+
<Rule Id="SA1000" Action="Error" />
70+
<Rule Id="SA1001" Action="Error" />
71+
<Rule Id="SA1002" Action="Error" />
72+
<Rule Id="SA1003" Action="Error" />
73+
<Rule Id="SA1004" Action="Error" />
74+
<Rule Id="SA1005" Action="None" />
75+
<Rule Id="SA1006" Action="Error" />
76+
<Rule Id="SA1007" Action="Error" />
77+
<Rule Id="SA1008" Action="Error" />
78+
<Rule Id="SA1009" Action="Error" />
79+
<Rule Id="SA1010" Action="Error" />
80+
<Rule Id="SA1011" Action="Error" />
81+
<Rule Id="SA1012" Action="Error" />
82+
<Rule Id="SA1013" Action="Error" />
83+
<Rule Id="SA1014" Action="Error" />
84+
<Rule Id="SA1015" Action="Error" />
85+
<Rule Id="SA1016" Action="Error" />
86+
<Rule Id="SA1017" Action="Error" />
87+
<Rule Id="SA1018" Action="Error" />
88+
<Rule Id="SA1019" Action="Error" />
89+
<Rule Id="SA1020" Action="Error" />
90+
<Rule Id="SA1021" Action="Error" />
91+
<Rule Id="SA1022" Action="Error" />
92+
<Rule Id="SA1023" Action="Error" />
93+
<Rule Id="SA1024" Action="Error" />
94+
<Rule Id="SA1025" Action="Error" />
95+
<Rule Id="SA1026" Action="Error" />
96+
<Rule Id="SA1027" Action="Error" />
97+
<Rule Id="SA1028" Action="Error" />
98+
<Rule Id="SA1100" Action="Error" />
99+
<Rule Id="SA1101" Action="None" />
100+
<Rule Id="SA1102" Action="Error" />
101+
<Rule Id="SA1103" Action="Error" />
102+
<Rule Id="SA1104" Action="Error" />
103+
<Rule Id="SA1105" Action="Error" />
104+
<Rule Id="SA1106" Action="Error" />
105+
<Rule Id="SA1107" Action="Error" />
106+
<Rule Id="SA1108" Action="Error" />
107+
<Rule Id="SA1110" Action="Error" />
108+
<Rule Id="SA1111" Action="Error" />
109+
<Rule Id="SA1112" Action="Error" />
110+
<Rule Id="SA1113" Action="Error" />
111+
<Rule Id="SA1114" Action="Error" />
112+
<Rule Id="SA1115" Action="Error" />
113+
<Rule Id="SA1116" Action="None" />
114+
<Rule Id="SA1117" Action="None" />
115+
<Rule Id="SA1118" Action="None" />
116+
<Rule Id="SA1119" Action="None" />
117+
<Rule Id="SA1120" Action="Error" />
118+
<Rule Id="SA1121" Action="Error" />
119+
<Rule Id="SA1122" Action="None" />
120+
<Rule Id="SA1123" Action="None" />
121+
<Rule Id="SA1124" Action="None" />
122+
<Rule Id="SA1125" Action="Error" />
123+
<Rule Id="SA1127" Action="Error" />
124+
<Rule Id="SA1128" Action="Error" />
125+
<Rule Id="SA1129" Action="Error" />
126+
<Rule Id="SA1130" Action="Error" />
127+
<Rule Id="SA1131" Action="Error" />
128+
<Rule Id="SA1132" Action="Error" />
129+
<Rule Id="SA1133" Action="None" />
130+
<Rule Id="SA1134" Action="None" />
131+
<Rule Id="SA1200" Action="None" />
132+
<Rule Id="SA1201" Action="None" />
133+
<Rule Id="SA1202" Action="None" />
134+
<Rule Id="SA1203" Action="None" />
135+
<Rule Id="SA1204" Action="None" />
136+
<Rule Id="SA1205" Action="None" />
137+
<Rule Id="SA1206" Action="None" />
138+
<Rule Id="SA1207" Action="None" />
139+
<Rule Id="SA1208" Action="Error" />
140+
<Rule Id="SA1209" Action="None" />
141+
<Rule Id="SA1210" Action="None" />
142+
<Rule Id="SA1211" Action="None" />
143+
<Rule Id="SA1212" Action="None" />
144+
<Rule Id="SA1213" Action="None" />
145+
<Rule Id="SA1214" Action="None" />
146+
<Rule Id="SA1216" Action="None" />
147+
<Rule Id="SA1217" Action="None" />
148+
<Rule Id="SA1300" Action="Error" />
149+
<Rule Id="SA1302" Action="Error" />
150+
<Rule Id="SA1303" Action="Error" />
151+
<Rule Id="SA1304" Action="Error" />
152+
<Rule Id="SA1305" Action="None" />
153+
<Rule Id="SA1306" Action="Error" />
154+
<Rule Id="SA1307" Action="Error" />
155+
<Rule Id="SA1308" Action="None" />
156+
<Rule Id="SA1309" Action="None" />
157+
<Rule Id="SA1310" Action="None" />
158+
<Rule Id="SA1311" Action="None" />
159+
<Rule Id="SA1312" Action="Error" />
160+
<Rule Id="SA1313" Action="Error" />
161+
<Rule Id="SA1400" Action="Error" />
162+
<Rule Id="SA1401" Action="None" />
163+
<Rule Id="SA1402" Action="None" />
164+
<Rule Id="SA1403" Action="Error" />
165+
<Rule Id="SA1404" Action="Error" />
166+
<Rule Id="SA1405" Action="Error" />
167+
<Rule Id="SA1406" Action="Error" />
168+
<Rule Id="SA1407" Action="Error" />
169+
<Rule Id="SA1408" Action="Error" />
170+
<Rule Id="SA1410" Action="Error" />
171+
<Rule Id="SA1411" Action="Error" />
172+
<Rule Id="SA1500" Action="Error" />
173+
<Rule Id="SA1501" Action="None" />
174+
<Rule Id="SA1502" Action="None" />
175+
<Rule Id="SA1503" Action="None" />
176+
<Rule Id="SA1504" Action="Error" />
177+
<Rule Id="SA1505" Action="Error" />
178+
<Rule Id="SA1506" Action="Error" />
179+
<Rule Id="SA1507" Action="Error" />
180+
<Rule Id="SA1508" Action="Error" />
181+
<Rule Id="SA1509" Action="Error" />
182+
<Rule Id="SA1510" Action="Error" />
183+
<Rule Id="SA1511" Action="Error" />
184+
<Rule Id="SA1512" Action="None" />
185+
<Rule Id="SA1513" Action="None" />
186+
<Rule Id="SA1514" Action="None" />
187+
<Rule Id="SA1515" Action="None" />
188+
<Rule Id="SA1516" Action="None" />
189+
<Rule Id="SA1517" Action="Error" />
190+
<Rule Id="SA1518" Action="Error" />
191+
<Rule Id="SA1519" Action="Error" />
192+
<Rule Id="SA1520" Action="Error" />
193+
<Rule Id="SA1600" Action="None" />
194+
<Rule Id="SA1601" Action="None" />
195+
<Rule Id="SA1602" Action="None" />
196+
<Rule Id="SA1603" Action="Error" />
197+
<Rule Id="SA1604" Action="None" />
198+
<Rule Id="SA1605" Action="None" />
199+
<Rule Id="SA1606" Action="None" />
200+
<Rule Id="SA1607" Action="None" />
201+
<Rule Id="SA1608" Action="None" />
202+
<Rule Id="SA1610" Action="None" />
203+
<Rule Id="SA1611" Action="None" />
204+
<Rule Id="SA1612" Action="None" />
205+
<Rule Id="SA1613" Action="None" />
206+
<Rule Id="SA1614" Action="None" />
207+
<Rule Id="SA1615" Action="None" />
208+
<Rule Id="SA1616" Action="None" />
209+
<Rule Id="SA1617" Action="None" />
210+
<Rule Id="SA1618" Action="None" />
211+
<Rule Id="SA1619" Action="None" />
212+
<Rule Id="SA1620" Action="None" />
213+
<Rule Id="SA1621" Action="None" />
214+
<Rule Id="SA1622" Action="None" />
215+
<Rule Id="SA1623" Action="None" />
216+
<Rule Id="SA1624" Action="None" />
217+
<Rule Id="SA1625" Action="None" />
218+
<Rule Id="SA1626" Action="None" />
219+
<Rule Id="SA1627" Action="None" />
220+
<Rule Id="SA1633" Action="None" />
221+
<Rule Id="SA1634" Action="None" />
222+
<Rule Id="SA1635" Action="None" />
223+
<Rule Id="SA1636" Action="None" />
224+
<Rule Id="SA1637" Action="None" />
225+
<Rule Id="SA1638" Action="None" />
226+
<Rule Id="SA1640" Action="None" />
227+
<Rule Id="SA1641" Action="None" />
228+
<Rule Id="SA1642" Action="None" />
229+
<Rule Id="SA1643" Action="None" />
230+
<Rule Id="SA1648" Action="None" />
231+
<Rule Id="SA1649" Action="None" />
232+
<Rule Id="SA1651" Action="None" />
233+
<Rule Id="SA1652" Action="None" />
234+
<Rule Id="SX1101" Action="Error" />
235+
<Rule Id="SX1309" Action="Error" />
236+
<Rule Id="SX1309S" Action="None" />
237+
</Rules>
238+
</RuleSet>
Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
#if UNITY_EDITOR_WIN
2+
3+
using System;
4+
using System.IO;
5+
using System.Linq;
6+
using System.Text;
7+
using System.Xml.Linq;
8+
using SyntaxTree.VisualStudio.Unity.Bridge;
9+
using UnityEditor;
10+
11+
[InitializeOnLoad]
12+
public class CodeAnalysisVsHook
13+
{
14+
private class Utf8StringWriter : StringWriter
15+
{
16+
public override Encoding Encoding
17+
{
18+
get { return Encoding.UTF8; }
19+
}
20+
}
21+
22+
// NOTE: Good to have
23+
// - automatic nuget package download
24+
// - stylecop file or directory exclude list
25+
26+
static CodeAnalysisVsHook()
27+
{
28+
ProjectFilesGenerator.ProjectFileGeneration += (name, content) =>
29+
{
30+
var rulesetPath = GetRulesetFile();
31+
if (string.IsNullOrEmpty(rulesetPath))
32+
return content;
33+
34+
var getStyleCopAnalyzersPath = GetStyleCopAnalyzersPath();
35+
if (string.IsNullOrEmpty(getStyleCopAnalyzersPath))
36+
return content;
37+
38+
// Insert a ruleset file and StyleCop.Analyzers into a project file
39+
40+
var document = XDocument.Parse(content);
41+
42+
var ns = document.Root.Name.Namespace;
43+
44+
var propertyGroup = document.Root.Descendants(ns + "PropertyGroup").FirstOrDefault();
45+
if (propertyGroup != null)
46+
{
47+
propertyGroup.Add(new XElement(ns + "CodeAnalysisRuleSet", rulesetPath));
48+
}
49+
50+
var itemGroup = document.Root.Descendants(ns + "ItemGroup").LastOrDefault();
51+
if (itemGroup != null)
52+
{
53+
var newItemGroup = new XElement(ns + "ItemGroup");
54+
foreach (var file in Directory.GetFiles(getStyleCopAnalyzersPath + @"\analyzers\dotnet\cs", "*.dll"))
55+
{
56+
newItemGroup.Add(new XElement(ns + "Analyzer", new XAttribute("Include", file)));
57+
}
58+
itemGroup.AddAfterSelf(newItemGroup);
59+
}
60+
61+
var str = new Utf8StringWriter();
62+
document.Save(str);
63+
return str.ToString();
64+
};
65+
}
66+
67+
private static string GetRulesetFile()
68+
{
69+
// Find *.ruleset in traversing parent directories.
70+
71+
var dir = Directory.GetCurrentDirectory();
72+
try
73+
{
74+
while (true)
75+
{
76+
var files = Directory.GetFiles(dir, "*.ruleset");
77+
if (files.Length > 0)
78+
return files[0];
79+
80+
dir = Path.GetDirectoryName(dir);
81+
}
82+
}
83+
catch (Exception)
84+
{
85+
return null;
86+
}
87+
}
88+
89+
private static string GetStyleCopAnalyzersPath()
90+
{
91+
// Find /packages/StyleCop.Analyzers* in traversing parent directories.
92+
93+
var dir = Directory.GetCurrentDirectory();
94+
try
95+
{
96+
while (true)
97+
{
98+
var packagesPath = Path.Combine(dir, "packages");
99+
if (Directory.Exists(packagesPath))
100+
{
101+
var dirs = Directory.GetDirectories(packagesPath, "StyleCop.Analyzers*");
102+
if (dirs.Length > 0)
103+
return dirs[0];
104+
}
105+
106+
dir = Path.GetDirectoryName(dir);
107+
}
108+
}
109+
catch (Exception)
110+
{
111+
return null;
112+
}
113+
}
114+
}
115+
116+
#endif

src/UnityPackage/Assets/Editor/CodeAnalysisVsHook.cs.meta

Lines changed: 12 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/UnityPackage/Assets/Middlewares/UiManager/UiDialogHandle.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
using System;
2-
using UnityEngine;
32
using System.Collections;
3+
using UnityEngine;
44

55
public class UiDialogHandle
66
{

src/UnityPackage/Assets/Middlewares/UiManager/UiManager.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
using System;
22
using System.Linq;
3+
using System.Collections.Generic;
34
using Common.Logging;
45
using UnityEngine;
56
using UnityEngine.UI;
6-
using System.Collections.Generic;
77
using DG.Tweening;
88

99
public class UiManager
@@ -275,7 +275,7 @@ internal bool HideModal(UiDialog dialog, object returnValue)
275275
entity.Handle.Dialog.gameObject.SetActive(false);
276276
}
277277
});
278-
278+
279279
// remove curtain
280280

281281
if (entity.Curtain != null)

0 commit comments

Comments
 (0)