Skip to content

Commit 8fd2379

Browse files
authored
Enable Roslyn analysis - SourceGenerator (#4661)
* SourceGenerator - enable analysis * InvariantCulture fixes * redundant using * Fix CA2013 it reverts #2657 (comment) * Collection initializer * PR feedback - handle SA1118
1 parent 4387dc4 commit 8fd2379

File tree

4 files changed

+22
-28
lines changed

4 files changed

+22
-28
lines changed

src/SourceGenerators/EquatableArray.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ public EquatableArray(T[] array)
2020

2121
public bool Equals(EquatableArray<T> array)
2222
{
23-
return object.ReferenceEquals(_array, array) || _array.AsSpan().SequenceEqual(array.AsSpan());
23+
return _array.AsSpan().SequenceEqual(array.AsSpan());
2424
}
2525

2626
public override int GetHashCode()

src/SourceGenerators/InstrumentationDefinitionsGenerator.cs

Lines changed: 20 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
// SPDX-License-Identifier: Apache-2.0
33

44
using System.Collections.Immutable;
5+
using System.Globalization;
56
using System.Text;
67
using Microsoft.CodeAnalysis;
78
using Microsoft.CodeAnalysis.CSharp.Syntax;
@@ -57,30 +58,30 @@ private static TargetToGenerate CreateTargetToGenerate(AttributeData attribute)
5758

5859
var targetSignatureTypesBuilder = new StringBuilder();
5960

60-
targetSignatureTypesBuilder.AppendFormat("\"{0}\"", returnTypeName);
61+
targetSignatureTypesBuilder.AppendFormat(CultureInfo.InvariantCulture, "\"{0}\"", returnTypeName);
6162

6263
foreach (var parameterTypeName in parameterTypeNames)
6364
{
64-
targetSignatureTypesBuilder.AppendFormat(", \"{0}\"", parameterTypeName.Value);
65+
targetSignatureTypesBuilder.AppendFormat(CultureInfo.InvariantCulture, ", \"{0}\"", parameterTypeName.Value);
6566
}
6667

67-
var signalType = int.Parse(attribute.ConstructorArguments[8].Value!.ToString());
68-
var integrationKind = int.Parse(attribute.ConstructorArguments[9].Value!.ToString());
68+
var signalType = int.Parse(attribute.ConstructorArguments[8].Value!.ToString(), CultureInfo.InvariantCulture);
69+
var integrationKind = int.Parse(attribute.ConstructorArguments[9].Value!.ToString(), CultureInfo.InvariantCulture);
6970
var integrationName = attribute.ConstructorArguments[7].Value!.ToString();
7071
var targetAssembly = attribute.ConstructorArguments[0].Value!.ToString();
7172
var targetType = attribute.ConstructorArguments[1].Value!.ToString();
7273
var targetMethod = attribute.ConstructorArguments[2].Value!.ToString();
7374

7475
var minVersion = attribute.ConstructorArguments[5].Value?.ToString().Split('.')!;
7576

76-
var targetMinimumMajor = int.Parse(minVersion[0]);
77-
var targetMinimumMinor = minVersion.Length > 1 && minVersion[1] != "*" ? int.Parse(minVersion[1]) : ushort.MinValue;
78-
var targetMinimumPatch = minVersion.Length > 2 && minVersion[2] != "*" ? int.Parse(minVersion[2]) : ushort.MinValue;
77+
var targetMinimumMajor = int.Parse(minVersion[0], CultureInfo.InvariantCulture);
78+
var targetMinimumMinor = minVersion.Length > 1 && minVersion[1] != "*" ? int.Parse(minVersion[1], CultureInfo.InvariantCulture) : ushort.MinValue;
79+
var targetMinimumPatch = minVersion.Length > 2 && minVersion[2] != "*" ? int.Parse(minVersion[2], CultureInfo.InvariantCulture) : ushort.MinValue;
7980

8081
var maxVersion = attribute.ConstructorArguments[6].Value?.ToString().Split('.')!;
81-
var targetMaximumMajor = int.Parse(maxVersion[0]);
82-
var targetMaximumMinor = maxVersion.Length > 1 && maxVersion[1] != "*" ? int.Parse(maxVersion[1]) : ushort.MaxValue;
83-
var targetMaximumPatch = maxVersion.Length > 2 && maxVersion[2] != "*" ? int.Parse(maxVersion[2]) : ushort.MaxValue;
82+
var targetMaximumMajor = int.Parse(maxVersion[0], CultureInfo.InvariantCulture);
83+
var targetMaximumMinor = maxVersion.Length > 1 && maxVersion[1] != "*" ? int.Parse(maxVersion[1], CultureInfo.InvariantCulture) : ushort.MaxValue;
84+
var targetMaximumPatch = maxVersion.Length > 2 && maxVersion[2] != "*" ? int.Parse(maxVersion[2], CultureInfo.InvariantCulture) : ushort.MaxValue;
8485

8586
return new TargetToGenerate(signalType, integrationName, targetAssembly, targetType, targetMethod, targetMinimumMajor, targetMinimumMinor, targetMinimumPatch, targetMaximumMajor, targetMaximumMinor, targetMaximumPatch, targetSignatureTypesBuilder.ToString(), integrationKind);
8687
}
@@ -122,10 +123,7 @@ private static string GenerateInstrumentationDefinitionsPartialClass(
122123
{
123124
byName.Add(
124125
targetToGenerate.IntegrationName,
125-
new List<(string IntegrationType, TargetToGenerate Target)>
126-
{
127-
(integrationToGenerate.Value.IntegrationType, targetToGenerate)
128-
});
126+
[(integrationToGenerate.Value.IntegrationType, targetToGenerate)]);
129127
}
130128

131129
instrumentationCount++;
@@ -134,9 +132,7 @@ private static string GenerateInstrumentationDefinitionsPartialClass(
134132

135133
var generatedMethodName = integrationKind == IntegrationKindDirect ? "GetDefinitionsArray" : "GetDerivedDefinitionsArray";
136134

137-
var sb = new StringBuilder()
138-
.AppendFormat(
139-
@"//------------------------------------------------------------------------------
135+
const string headerTemplate = @"//------------------------------------------------------------------------------
140136
// <auto-generated>
141137
// This code was generated by the InstrumentationDefinitionsGenerator tool. To safely
142138
// modify this file, edit InstrumentMethodAttribute on the classes and
@@ -155,9 +151,9 @@ internal static partial class InstrumentationDefinitions
155151
{{
156152
private static NativeCallTargetDefinition[] {0}()
157153
{{
158-
var nativeCallTargetDefinitions = new List<NativeCallTargetDefinition>({1});",
159-
generatedMethodName,
160-
instrumentationCount)
154+
var nativeCallTargetDefinitions = new List<NativeCallTargetDefinition>({1});";
155+
var sb = new StringBuilder()
156+
.AppendFormat(CultureInfo.InvariantCulture, headerTemplate, generatedMethodName, instrumentationCount)
161157
.AppendLine();
162158

163159
const string tracesHeader = @" // Traces
@@ -211,16 +207,15 @@ private static void GenerateIntegrations(Dictionary<string, List<(string Integra
211207

212208
sb.Append(" // ");
213209
sb.AppendLine(group.Key);
214-
sb.AppendFormat(
215-
@" if ({0}.{1}))
216-
{{",
217-
conditionPrefix,
218-
group.Key);
210+
const string ifTemplate = @" if ({0}.{1}))
211+
{{";
212+
sb.AppendFormat(CultureInfo.InvariantCulture, ifTemplate, conditionPrefix, group.Key);
219213
sb.AppendLine();
220214

221215
foreach (var integration in group.Value)
222216
{
223217
sb.AppendFormat(
218+
CultureInfo.InvariantCulture,
224219
" nativeCallTargetDefinitions.Add(new(\"{0}\", \"{1}\", \"{2}\", [{3}], {4}, {5}, {6}, {7}, {8}, {9}, AssemblyFullName, \"{10}\"));",
225220
integration.Target.Assembly,
226221
integration.Target.Type,

src/SourceGenerators/IntegrationToGenerate.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
// Copyright The OpenTelemetry Authors
22
// SPDX-License-Identifier: Apache-2.0
33

4-
using System.Collections.Immutable;
5-
64
namespace SourceGenerators;
75

86
internal readonly record struct IntegrationToGenerate(string IntegrationType, EquatableArray<TargetToGenerate> Targets)

src/SourceGenerators/SourceGenerators.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
<EnablePublicApi>false</EnablePublicApi>
66
<EnforceExtendedAnalyzerRules>true</EnforceExtendedAnalyzerRules>
77
<IsRoslynComponent>true</IsRoslynComponent>
8+
<AnalysisLevel>latest-All</AnalysisLevel>
89
</PropertyGroup>
910

1011
<ItemGroup>

0 commit comments

Comments
 (0)