Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 11 additions & 11 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,8 @@ jobs:
check_documentation:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7
- uses: actions/setup-dotnet@9a946fdbd5fb07b82b2f5a4466058b876ab72bb2 # v5
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
- uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6
- run: dotnet run --project src/DocumentationGenerator/DocumentationGenerator.csproj
- run: git status
if: failure()
Expand All @@ -60,9 +60,9 @@ jobs:
env:
RepositoryBranch: ${{github.ref}}
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
- name: Setup .NET Core
uses: actions/setup-dotnet@9a946fdbd5fb07b82b2f5a4466058b876ab72bb2 # v5
uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6

- run: dotnet run --project src/ListDotNetTypes/ListDotNetTypes.csproj -- src/Meziantou.Analyzer/Resources/

Expand Down Expand Up @@ -101,9 +101,9 @@ jobs:
runs-on: ubuntu-latest
needs: [ create_nuget ]
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
- name: Setup .NET Core (global.json)
uses: actions/setup-dotnet@9a946fdbd5fb07b82b2f5a4466058b876ab72bb2 # v5
uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6
- uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8
with:
name: nuget
Expand Down Expand Up @@ -134,9 +134,9 @@ jobs:
roslyn-version: [ 'roslyn4.8', 'roslyn4.14', 'roslyn5.0', 'roslyn5.6', 'default' ]
fail-fast: false
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
- name: Setup .NET Core (global.json)
uses: actions/setup-dotnet@9a946fdbd5fb07b82b2f5a4466058b876ab72bb2 # v5
uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6
- run: dotnet test --configuration ${{ matrix.configuration }} --results-directory "${{ env.TestResultsDirectory }}" /p:RoslynVersion=${{ matrix.roslyn-version}}
name: Run tests
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
Expand All @@ -154,15 +154,15 @@ jobs:
contents: read
id-token: write
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
with:
fetch-depth: 2
- uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8
with:
name: nuget
path: ${{ env.NuGetDirectory }}
- name: Setup .NET Core
uses: actions/setup-dotnet@9a946fdbd5fb07b82b2f5a4466058b876ab72bb2 # v5
uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6
- name: NuGet login (OIDC → temp API key)
if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository
uses: NuGet/login@8d196754b4036150537f80ac539e15c2f1028841 # v1
Expand Down Expand Up @@ -197,7 +197,7 @@ jobs:
permissions:
contents: write
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
- run: 'gh release create "${{ needs.compute_package_version.outputs.package_version }}" --generate-notes --notes "NuGet package: <https://www.nuget.org/packages/Meziantou.Analyzer/${{ needs.compute_package_version.outputs.package_version }}>"'
env:
GH_TOKEN: ${{ github.token }}
4 changes: 2 additions & 2 deletions .github/workflows/copilot-setup-steps.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@ jobs:
contents: read

steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7
- uses: actions/setup-dotnet@9a946fdbd5fb07b82b2f5a4466058b876ab72bb2 # v5
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
- uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6
with:
global-json-file: './global.json'

Expand Down
8 changes: 4 additions & 4 deletions global.json
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
{
"sdk": {
"version": "10.0.301",
"version": "10.0.302",
"rollForward": "latestPatch"
},
"msbuild-sdks": {
"Meziantou.NET.Sdk": "1.0.127",
"Meziantou.NET.Sdk.Test": "1.0.127",
"Meziantou.NET.Sdk.Web": "1.0.127"
"Meziantou.NET.Sdk": "1.0.129",
"Meziantou.NET.Sdk.Test": "1.0.129",
"Meziantou.NET.Sdk.Web": "1.0.129"
}
}
8 changes: 4 additions & 4 deletions src/DocumentationGenerator/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -263,7 +263,7 @@ static string GenerateRulesTable(List<DiagnosticAnalyzer> diagnosticAnalyzers, L
sb.Append("|Id|Category|Description|Severity|Is enabled|Code fix|Configurable|\n");
sb.Append("|--|--------|-----------|:------:|:--------:|:------:|:----------:|\n");

foreach (var diagnostic in diagnosticAnalyzers.SelectMany(diagnosticAnalyzer => diagnosticAnalyzer.SupportedDiagnostics).DistinctBy(diag => diag.Id).OrderBy(diag => diag.Id, StringComparer.Ordinal))
foreach (var diagnostic in diagnosticAnalyzers.SelectMany(diagnosticAnalyzer => diagnosticAnalyzer.SupportedDiagnostics).DistinctBy(diag => diag.Id, StringComparer.Ordinal).OrderBy(diag => diag.Id, StringComparer.Ordinal))
{
if (!diagnostic.HelpLinkUri.Contains(diagnostic.Id, StringComparison.Ordinal))
{
Expand Down Expand Up @@ -329,7 +329,7 @@ static string GenerateSuppressorsTable(List<DiagnosticSuppressor> diagnosticSupp
sb.Append("|Id|Suppressed rule|Justification|\n");
sb.Append("|--|---------------|-------------|\n");

foreach (var suppression in diagnosticSuppressors.SelectMany(diagnosticAnalyzer => diagnosticAnalyzer.SupportedSuppressions).DistinctBy(diag => diag.Id).OrderBy(diag => diag.Id, StringComparer.Ordinal))
foreach (var suppression in diagnosticSuppressors.SelectMany(diagnosticAnalyzer => diagnosticAnalyzer.SupportedSuppressions).DistinctBy(diag => diag.Id, StringComparer.Ordinal).OrderBy(diag => diag.Id, StringComparer.Ordinal))
{
sb.Append("|`")
.Append(suppression.Id)
Expand Down Expand Up @@ -394,7 +394,7 @@ static void GenerateEditorConfig(StringBuilder sb, List<DiagnosticAnalyzer> anal
}

var first = true;
foreach (var diagnostic in analyzers.SelectMany(diagnosticAnalyzer => diagnosticAnalyzer.SupportedDiagnostics).DistinctBy(diag => diag.Id).OrderBy(diag => diag.Id, StringComparer.Ordinal))
foreach (var diagnostic in analyzers.SelectMany(diagnosticAnalyzer => diagnosticAnalyzer.SupportedDiagnostics).DistinctBy(diag => diag.Id, StringComparer.Ordinal).OrderBy(diag => diag.Id, StringComparer.Ordinal))
{
if (!first)
{
Expand Down Expand Up @@ -488,7 +488,7 @@ static IReadOnlyDictionary<string, IReadOnlyList<string>> GetRuleConfigurationKe

if (!result.TryGetValue(ruleId, out var keys))
{
keys = [];
keys = [with(StringComparer.Ordinal)];
result.Add(ruleId, keys);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ private static void AnalyzeBinaryOperation(OperationAnalysisContext context)
binaryOperation.OperatorKind == BinaryOperatorKind.NotEquals :
binaryOperation.OperatorKind == BinaryOperatorKind.Equals;

var properties = ImmutableDictionary.Create<string, string?>()
var properties = ImmutableDictionary.Create<string, string?>(StringComparer.Ordinal)
.Add("NodeToKeepSpanStart", nodeToKeep.Syntax.Span.Start.ToString(CultureInfo.InvariantCulture))
.Add("NodeToKeepSpanLength", nodeToKeep.Syntax.Span.Length.ToString(CultureInfo.InvariantCulture))
.Add("LogicalNotOperatorNeeded", logicalNotOperatorNeeded.ToString());
Expand Down
8 changes: 4 additions & 4 deletions src/Meziantou.Analyzer/Rules/OptimizeLinqUsageAnalyzer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -191,14 +191,14 @@ public void AnalyzeInvocation(OperationAnalysisContext context)

private static ImmutableDictionary<string, string?> CreateProperties(OptimizeLinqUsageData data)
{
var builder = ImmutableDictionary.CreateBuilder<string, string?>();
var builder = ImmutableDictionary.CreateBuilder<string, string?>(StringComparer.Ordinal);
builder.Add("Data", data.ToString());
return builder.ToImmutable();
}

private static ImmutableDictionary<string, string?> CreateLinqChainProperties(OptimizeLinqUsageData data, IInvocationOperation firstOperation, IInvocationOperation lastOperation, string methodName)
{
var builder = ImmutableDictionary.CreateBuilder<string, string?>();
var builder = ImmutableDictionary.CreateBuilder<string, string?>(StringComparer.Ordinal);
builder.Add("Data", data.ToString());
builder.Add("FirstOperationStart", firstOperation.Syntax.Span.Start.ToString(CultureInfo.InvariantCulture));
builder.Add("FirstOperationLength", firstOperation.Syntax.Span.Length.ToString(CultureInfo.InvariantCulture));
Expand All @@ -210,7 +210,7 @@ public void AnalyzeInvocation(OperationAnalysisContext context)

private static ImmutableDictionary<string, string?> CreateSingleOperationProperties(OptimizeLinqUsageData data, IInvocationOperation operation)
{
var builder = ImmutableDictionary.CreateBuilder<string, string?>();
var builder = ImmutableDictionary.CreateBuilder<string, string?>(StringComparer.Ordinal);
builder.Add("Data", data.ToString());
builder.Add("FirstOperationStart", operation.Syntax.Span.Start.ToString(CultureInfo.InvariantCulture));
builder.Add("FirstOperationLength", operation.Syntax.Span.Length.ToString(CultureInfo.InvariantCulture));
Expand All @@ -219,7 +219,7 @@ public void AnalyzeInvocation(OperationAnalysisContext context)

private static ImmutableDictionary<string, string?> CreateDuplicateOrderByProperties(OptimizeLinqUsageData data, IInvocationOperation firstOperation, IInvocationOperation lastOperation, string expectedMethodName, string methodName)
{
var builder = ImmutableDictionary.CreateBuilder<string, string?>();
var builder = ImmutableDictionary.CreateBuilder<string, string?>(StringComparer.Ordinal);
builder.Add("Data", data.ToString());
builder.Add("FirstOperationStart", firstOperation.Syntax.Span.Start.ToString(CultureInfo.InvariantCulture));
builder.Add("FirstOperationLength", firstOperation.Syntax.Span.Length.ToString(CultureInfo.InvariantCulture));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ public void Analyze(OperationAnalysisContext context)

private static ImmutableDictionary<string, string?> CreateProperties(OptimizeStringBuilderUsageData data)
{
return ImmutableDictionary.Create<string, string?>().Add("Data", data.ToString());
return ImmutableDictionary.Create<string, string?>(StringComparer.Ordinal).Add("Data", data.ToString());
}

private void AnalyzeAppendFormat(OperationAnalysisContext context, IInvocationOperation operation)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -233,7 +233,7 @@ public void AnalyzeLoop(OperationAnalysisContext context)

private static ImmutableDictionary<string, string?> CreateProperties(string[] cancellationTokens, AdditionalParameterInfo parameterInfo)
{
return ImmutableDictionary.Create<string, string?>()
return ImmutableDictionary.Create<string, string?>(StringComparer.Ordinal)
.Add("ParameterIndex", parameterInfo.ParameterIndex.ToString(CultureInfo.InvariantCulture))
.Add("ParameterName", parameterInfo.Name)
.Add("ParameterIsEnumeratorCancellation", parameterInfo.HasEnumeratorCancellationAttribute.ToString())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@ public void AnalyzeInvocation(OperationAnalysisContext context)

private static ImmutableDictionary<string, string?> CreateProperties(string[] cancellationTokens, AdditionalParameterInfo parameterInfo)
{
return ImmutableDictionary.Create<string, string?>()
return ImmutableDictionary.Create<string, string?>(StringComparer.Ordinal)
.Add("ParameterIndex", parameterInfo.ParameterIndex.ToString(CultureInfo.InvariantCulture))
.Add("ParameterName", parameterInfo.Name)
.Add("Paths", string.Join(',', cancellationTokens));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ internal void AnalyzeMethodDeclaration(SyntaxNodeAnalysisContext context)

if (lastThrowIndex is not null && firstYieldIndex is not null && lastThrowIndex < firstYieldIndex)
{
var properties = ImmutableDictionary.Create<string, string?>()
var properties = ImmutableDictionary.Create<string, string?>(StringComparer.Ordinal)
.Add("Index", lastThrowIndex.Value.ToString(CultureInfo.InvariantCulture));

context.ReportDiagnostic(Rule, properties, methodSymbol);
Expand Down
4 changes: 2 additions & 2 deletions tests/Meziantou.Analyzer.Test/Helpers/ProjectBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -372,14 +372,14 @@ public ProjectBuilder WithAnalyzerConfiguration(Dictionary<string, string> confi

public ProjectBuilder AddAnalyzerConfiguration(string key, string value)
{
AnalyzerConfiguration ??= [];
AnalyzerConfiguration ??= [with(StringComparer.Ordinal)];
AnalyzerConfiguration[key] = value;
return this;
}

public ProjectBuilder AddAdditionalFile(string path, string content)
{
AdditionalFiles ??= [];
AdditionalFiles ??= [with(StringComparer.Ordinal)];
AdditionalFiles[path] = content;
return this;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ namespace Meziantou.Analyzer.Test.Helpers;

internal sealed class TestAnalyzerConfigOptionsProvider(Dictionary<string, string>? values) : AnalyzerConfigOptionsProvider
{
private readonly Dictionary<string, string> _values = values ?? [];
private readonly Dictionary<string, string> _values = values ?? [with(StringComparer.Ordinal)];

public override AnalyzerConfigOptions GlobalOptions => new TestAnalyzerConfigOptions(_values);
public override AnalyzerConfigOptions GetOptions(SyntaxTree tree) => new TestAnalyzerConfigOptions(_values);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<Project Sdk="Meziantou.NET.Sdk.Test">

<ItemGroup>
<PackageReference Include="Microsoft.Bcl.AsyncInterfaces" Version="10.0.9" />
<PackageReference Include="Microsoft.Bcl.AsyncInterfaces" Version="10.0.10" />
<PackageReference Include="Microsoft.CodeAnalysis.CSharp.Analyzer.Testing" Version="1.1.4" />
<PackageReference Include="Microsoft.CodeAnalysis.CSharp.CodeFix.Testing" Version="1.1.4" />
<PackageReference Include="Microsoft.CodeAnalysis.CSharp.CodeRefactoring.Testing" Version="1.1.4" />
Expand Down