Some checks failed
Publish NuGet Packages / publish (pull_request) Has been cancelled
Introduce a Roslyn analyzer to enforce unique ownership semantics for structs marked with the `[NonCopyable]` attribute. Added a corresponding code fix to resolve violations by suggesting the use of `Share()` or other ownership transfer methods. Key changes: - Added `StructCopyCodeAnalyzer` to detect invalid struct copies. - Implemented `StructCopyCodeFixProvider` to provide code fixes. - Created `Misaki.HighPerformance.Analyzer` and `CodeFixes` projects. - Added unit tests for the analyzer and code fixes. - Introduced `UniquePtr<T>` and `SharedPtr<T>` for pointer ownership. - Added a Visual Studio extension project and packaging support. - Updated `UnsafeUtility` to use `nint`/`nuint` for indices.
34 lines
1.6 KiB
C#
34 lines
1.6 KiB
C#
using Microsoft.CodeAnalysis;
|
|
using Microsoft.CodeAnalysis.CSharp;
|
|
using System;
|
|
using System.Collections.Immutable;
|
|
|
|
namespace Misaki.HighPerformance.Analyzer.Test
|
|
{
|
|
internal static class CSharpVerifierHelper
|
|
{
|
|
/// <summary>
|
|
/// By default, the compiler reports diagnostics for nullable reference types at
|
|
/// <see cref="DiagnosticSeverity.Warning"/>, and the analyzer test framework defaults to only validating
|
|
/// diagnostics at <see cref="DiagnosticSeverity.Error"/>. This map contains all compiler diagnostic IDs
|
|
/// related to nullability mapped to <see cref="ReportDiagnostic.Error"/>, which is then used to enable all
|
|
/// of these warnings for default validation during analyzer and code fix tests.
|
|
/// </summary>
|
|
internal static ImmutableDictionary<string, ReportDiagnostic> NullableWarnings { get; } = GetNullableWarningsFromCompiler();
|
|
|
|
private static ImmutableDictionary<string, ReportDiagnostic> GetNullableWarningsFromCompiler()
|
|
{
|
|
string[] args = { "/warnaserror:nullable" };
|
|
var commandLineArguments = CSharpCommandLineParser.Default.Parse(args, baseDirectory: Environment.CurrentDirectory, sdkDirectory: Environment.CurrentDirectory);
|
|
var nullableWarnings = commandLineArguments.CompilationOptions.SpecificDiagnosticOptions;
|
|
|
|
// Workaround for https://github.com/dotnet/roslyn/issues/41610
|
|
nullableWarnings = nullableWarnings
|
|
.SetItem("CS8632", ReportDiagnostic.Error)
|
|
.SetItem("CS8669", ReportDiagnostic.Error);
|
|
|
|
return nullableWarnings;
|
|
}
|
|
}
|
|
}
|