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.
37 lines
1.6 KiB
C#
37 lines
1.6 KiB
C#
using Microsoft.CodeAnalysis.CodeRefactorings;
|
|
using Microsoft.CodeAnalysis.Testing;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace Misaki.HighPerformance.Analyzer.Test
|
|
{
|
|
public static partial class CSharpCodeRefactoringVerifier<TCodeRefactoring>
|
|
where TCodeRefactoring : CodeRefactoringProvider, new()
|
|
{
|
|
/// <inheritdoc cref="CodeRefactoringVerifier{TCodeRefactoring, TTest, TVerifier}.VerifyRefactoringAsync(string, string)"/>
|
|
public static async Task VerifyRefactoringAsync(string source, string fixedSource)
|
|
{
|
|
await VerifyRefactoringAsync(source, DiagnosticResult.EmptyDiagnosticResults, fixedSource);
|
|
}
|
|
|
|
/// <inheritdoc cref="CodeRefactoringVerifier{TCodeRefactoring, TTest, TVerifier}.VerifyRefactoringAsync(string, DiagnosticResult, string)"/>
|
|
public static async Task VerifyRefactoringAsync(string source, DiagnosticResult expected, string fixedSource)
|
|
{
|
|
await VerifyRefactoringAsync(source, new[] { expected }, fixedSource);
|
|
}
|
|
|
|
/// <inheritdoc cref="CodeRefactoringVerifier{TCodeRefactoring, TTest, TVerifier}.VerifyRefactoringAsync(string, DiagnosticResult[], string)"/>
|
|
public static async Task VerifyRefactoringAsync(string source, DiagnosticResult[] expected, string fixedSource)
|
|
{
|
|
var test = new Test
|
|
{
|
|
TestCode = source,
|
|
FixedCode = fixedSource,
|
|
};
|
|
|
|
test.ExpectedDiagnostics.AddRange(expected);
|
|
await test.RunAsync(CancellationToken.None);
|
|
}
|
|
}
|
|
}
|