Skip to content

Commit f0af0aa

Browse files
authored
Merge pull request bdovaz#225 from bdovaz/feature/optimize-analyzers-usage
Optimize analyzers usage
2 parents a9e5db0 + ddcb23c commit f0af0aa

9 files changed

Lines changed: 129 additions & 73 deletions

File tree

.editorconfig

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,7 @@
22
root = true
33

44
[*.{cs,json,txt,yml}]
5-
end_of_line = lf
5+
end_of_line = lf
6+
7+
[*.{csproj}]
8+
indent_size = 2
Lines changed: 27 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,34 @@
1-
<Project Sdk="Microsoft.NET.Sdk.Web">
1+
<Project Sdk="Microsoft.NET.Sdk.Web">
22

3-
<PropertyGroup>
4-
<TargetFramework>net7.0</TargetFramework>
5-
<Nullable>enable</Nullable>
6-
<ApplicationInsightsResourceId>/subscriptions/b6745039-70e7-4641-994b-5457cb220e2a/resourcegroups/Default-ApplicationInsights-EastUS/providers/microsoft.insights/components/unitynuget-registry</ApplicationInsightsResourceId>
7-
<ApplicationInsightsAnnotationResourceId>/subscriptions/b6745039-70e7-4641-994b-5457cb220e2a/resourcegroups/Default-ApplicationInsights-EastUS/providers/microsoft.insights/components/unitynuget-registry</ApplicationInsightsAnnotationResourceId>
8-
<UserSecretsId>1be0a769-8d75-4a27-99e0-128afcc0ffee</UserSecretsId>
9-
</PropertyGroup>
3+
<PropertyGroup>
4+
<TargetFramework>net7.0</TargetFramework>
5+
<Nullable>enable</Nullable>
6+
<ApplicationInsightsResourceId>/subscriptions/b6745039-70e7-4641-994b-5457cb220e2a/resourcegroups/Default-ApplicationInsights-EastUS/providers/microsoft.insights/components/unitynuget-registry</ApplicationInsightsResourceId>
7+
<ApplicationInsightsAnnotationResourceId>/subscriptions/b6745039-70e7-4641-994b-5457cb220e2a/resourcegroups/Default-ApplicationInsights-EastUS/providers/microsoft.insights/components/unitynuget-registry</ApplicationInsightsAnnotationResourceId>
8+
<UserSecretsId>1be0a769-8d75-4a27-99e0-128afcc0ffee</UserSecretsId>
9+
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
10+
</PropertyGroup>
1011

11-
<PropertyGroup>
12-
<DockerfileContext>.</DockerfileContext>
13-
<DockerfileFile>..\..\Dockerfile</DockerfileFile>
14-
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
15-
</PropertyGroup>
12+
<PropertyGroup>
13+
<DockerfileContext>.</DockerfileContext>
14+
<DockerfileFile>..\..\Dockerfile</DockerfileFile>
15+
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
16+
</PropertyGroup>
1617

17-
<ItemGroup>
18-
<PackageReference Include="Microsoft.ApplicationInsights.AspNetCore" Version="2.21.0" />
19-
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="7.0.9" />
20-
<PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="7.0.0" />
21-
<PackageReference Include="Microsoft.Extensions.Options.DataAnnotations" Version="7.0.0" />
22-
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.18.1" />
23-
</ItemGroup>
18+
<ItemGroup>
19+
<PackageReference Include="Microsoft.ApplicationInsights.AspNetCore" Version="2.21.0" />
20+
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="7.0.9" />
21+
<PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="7.0.0" />
22+
<PackageReference Include="Microsoft.Extensions.Options.DataAnnotations" Version="7.0.0" />
23+
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.18.1" />
24+
</ItemGroup>
2425

25-
<ItemGroup>
26-
<ProjectReference Include="..\UnityNuGet\UnityNuGet.csproj" />
27-
</ItemGroup>
26+
<ItemGroup>
27+
<ProjectReference Include="..\UnityNuGet\UnityNuGet.csproj" />
28+
</ItemGroup>
2829

29-
<ItemGroup>
30-
<WCFMetadata Include="Connected Services" />
31-
</ItemGroup>
30+
<ItemGroup>
31+
<WCFMetadata Include="Connected Services" />
32+
</ItemGroup>
3233

3334
</Project>

src/UnityNuGet.Tests/.editorconfig

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
[*.cs]
2+
3+
# SYSLIB1045: Convert to 'GeneratedRegexAttribute'.
4+
dotnet_diagnostic.SYSLIB1045.severity = none
Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,20 @@
1-
<Project Sdk="Microsoft.NET.Sdk">
1+
<Project Sdk="Microsoft.NET.Sdk">
22

3-
<PropertyGroup>
4-
<TargetFramework>net7.0</TargetFramework>
5-
<IsPackable>false</IsPackable>
6-
<IsPublishable>false</IsPublishable>
7-
</PropertyGroup>
3+
<PropertyGroup>
4+
<TargetFramework>net7.0</TargetFramework>
5+
<IsPackable>false</IsPackable>
6+
<IsPublishable>false</IsPublishable>
7+
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
8+
</PropertyGroup>
89

9-
<ItemGroup>
10-
<PackageReference Include="nunit" Version="3.13.3" />
11-
<PackageReference Include="NUnit3TestAdapter" Version="4.5.0" />
12-
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.6.3" />
13-
</ItemGroup>
10+
<ItemGroup>
11+
<PackageReference Include="nunit" Version="3.13.3" />
12+
<PackageReference Include="NUnit3TestAdapter" Version="4.5.0" />
13+
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.6.3" />
14+
</ItemGroup>
1415

15-
<ItemGroup>
16-
<ProjectReference Include="..\UnityNuGet\UnityNuGet.csproj" />
17-
</ItemGroup>
16+
<ItemGroup>
17+
<ProjectReference Include="..\UnityNuGet\UnityNuGet.csproj" />
18+
</ItemGroup>
1819

1920
</Project>

src/UnityNuGet/RegistryCache.cs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -633,6 +633,7 @@ RegistryEntry packageEntry
633633
string? meta;
634634

635635
string fileExtension = Path.GetExtension(fileInUnityPackage);
636+
636637
if (fileExtension == ".dll")
637638
{
638639
meta = UnityMeta.GetMetaForDll(
@@ -664,6 +665,20 @@ RegistryEntry packageEntry
664665
// write meta file
665666
await WriteTextFileToTar(tarArchive, $"{fileInUnityPackage}.meta", meta);
666667
}
668+
669+
// Write analyzer asmdef
670+
// Check Analyzer Scope section: https://docs.unity3d.com/Manual/roslyn-analyzers.html
671+
var analyzerAsmdef = CreateAnalyzerAmsdef(identity);
672+
var analyzerAsmdefAsJson = analyzerAsmdef.ToJson();
673+
string analyzerAsmdefFileName = $"{identity.Id}.asmdef";
674+
await WriteTextFileToTar(tarArchive, analyzerAsmdefFileName, analyzerAsmdefAsJson);
675+
await WriteTextFileToTar(tarArchive, $"{analyzerAsmdefFileName}.meta", UnityMeta.GetMetaForExtension(GetStableGuid(identity, analyzerAsmdefFileName), ".asmdef")!);
676+
677+
// Write empty script (Necessary to compile the asmdef file)
678+
var emptyScriptContent = UnityScript.GetEmptyScript();
679+
const string emptyScriptFileName = "EmptyScript.cs";
680+
await WriteTextFileToTar(tarArchive, emptyScriptFileName, emptyScriptContent);
681+
await WriteTextFileToTar(tarArchive, $"{emptyScriptFileName}.meta", UnityMeta.GetMetaForExtension(GetStableGuid(identity, emptyScriptFileName), ".cs")!);
667682
}
668683

669684
// Get all known platform definitions
@@ -1067,6 +1082,15 @@ private static UnityPackage CreateUnityPackage(NpmPackageInfo npmPackageInfo, Np
10671082
return unityPackage;
10681083
}
10691084

1085+
private static UnityAsmdef CreateAnalyzerAmsdef(PackageIdentity packageIdentity)
1086+
{
1087+
return new()
1088+
{
1089+
Name = $"{packageIdentity.Id}_Unity", // Add _Unity suffix because Unity has a validation so that assemblies names do not collide with asmdefs assembly names
1090+
IncludePlatforms = new string[] { "Editor" }
1091+
};
1092+
}
1093+
10701094
private static Guid StringToGuid(string text)
10711095
{
10721096
var guid = new byte[16];

src/UnityNuGet/UnityAsmdef.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
using Newtonsoft.Json;
2+
3+
namespace UnityNuGet
4+
{
5+
public class UnityAsmdef : JsonObjectBase
6+
{
7+
[JsonProperty("name")]
8+
public string? Name { get; set; }
9+
10+
// The values come from: https://docs.unity3d.com/ScriptReference/BuildTarget.html
11+
[JsonProperty("includePlatforms")]
12+
public string[]? IncludePlatforms { get; set; }
13+
}
14+
}

src/UnityNuGet/UnityMeta.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,12 @@ internal static class UnityMeta
1616
{
1717
case ".pdb":
1818
break;
19-
19+
case ".asmdef":
20+
case ".cs":
2021
case ".json":
21-
case ".xml":
22-
case ".txt":
2322
case ".md":
23+
case ".txt":
24+
case ".xml":
2425
return GetMetaForText(guid);
2526
}
2627

src/UnityNuGet/UnityNuGet.csproj

Lines changed: 30 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,36 @@
1-
<Project Sdk="Microsoft.NET.Sdk">
1+
<Project Sdk="Microsoft.NET.Sdk">
22

3-
<PropertyGroup>
4-
<TargetFramework>net7.0</TargetFramework>
5-
<Nullable>enable</Nullable>
6-
<Version>0.14.0</Version>
7-
<LangVersion>9.0</LangVersion>
8-
</PropertyGroup>
3+
<PropertyGroup>
4+
<TargetFramework>net7.0</TargetFramework>
5+
<Nullable>enable</Nullable>
6+
<Version>0.14.0</Version>
7+
<LangVersion>9.0</LangVersion>
8+
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
9+
</PropertyGroup>
910

10-
<ItemGroup>
11-
<None Remove="registry.json" />
12-
</ItemGroup>
11+
<ItemGroup>
12+
<None Remove="registry.json" />
13+
</ItemGroup>
1314

14-
<ItemGroup>
15-
<Content Include="..\..\registry.json" Link="registry.json">
16-
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
17-
</Content>
18-
</ItemGroup>
19-
20-
<ItemGroup>
21-
<FrameworkReference Include="Microsoft.AspNetCore.App" />
22-
</ItemGroup>
15+
<ItemGroup>
16+
<Content Include="..\..\registry.json" Link="registry.json">
17+
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
18+
</Content>
19+
</ItemGroup>
2320

24-
<ItemGroup>
25-
<PackageReference Include="Microsoft.Extensions.Options" Version="7.0.1" />
26-
<PackageReference Include="NuGet.PackageManagement" Version="6.6.1" />
27-
<PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="7.0.0" />
28-
<PackageReference Include="NUglify" Version="1.20.7" />
29-
<PackageReference Include="Scriban" Version="5.7.0" />
30-
<PackageReference Include="SharpZipLib" Version="1.4.2" />
31-
<PackageReference Include="System.ComponentModel.Annotations" Version="5.0.0" />
32-
<PackageReference Include="System.Linq.Async" Version="6.0.1" />
33-
</ItemGroup>
21+
<ItemGroup>
22+
<FrameworkReference Include="Microsoft.AspNetCore.App" />
23+
</ItemGroup>
24+
25+
<ItemGroup>
26+
<PackageReference Include="Microsoft.Extensions.Options" Version="7.0.1" />
27+
<PackageReference Include="NuGet.PackageManagement" Version="6.6.1" />
28+
<PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="7.0.0" />
29+
<PackageReference Include="NUglify" Version="1.20.7" />
30+
<PackageReference Include="Scriban" Version="5.7.0" />
31+
<PackageReference Include="SharpZipLib" Version="1.4.2" />
32+
<PackageReference Include="System.ComponentModel.Annotations" Version="5.0.0" />
33+
<PackageReference Include="System.Linq.Async" Version="6.0.1" />
34+
</ItemGroup>
3435

3536
</Project>

src/UnityNuGet/UnityScript.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
namespace UnityNuGet
2+
{
3+
internal static class UnityScript
4+
{
5+
public static string GetEmptyScript() => string.Empty;
6+
}
7+
}

0 commit comments

Comments
 (0)