From f5418d33815678c96bb7c5fd6c9807906524c136 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A9rald=20Barr=C3=A9?= Date: Sun, 19 Feb 2023 20:21:05 -0500 Subject: [PATCH] Fixer for MA0008 adds using directive automatically (#450) --- .../Rules/UseStructLayoutAttributeFixer.cs | 5 +++-- .../Rules/UseStructLayoutAttributeAnalyzerTests.cs | 8 ++++++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/Meziantou.Analyzer/Rules/UseStructLayoutAttributeFixer.cs b/src/Meziantou.Analyzer/Rules/UseStructLayoutAttributeFixer.cs index bbb9d7c85..93e260c99 100644 --- a/src/Meziantou.Analyzer/Rules/UseStructLayoutAttributeFixer.cs +++ b/src/Meziantou.Analyzer/Rules/UseStructLayoutAttributeFixer.cs @@ -8,6 +8,7 @@ using Microsoft.CodeAnalysis.CodeFixes; using Microsoft.CodeAnalysis.CSharp.Syntax; using Microsoft.CodeAnalysis.Editing; +using Microsoft.CodeAnalysis.Simplification; namespace Meziantou.Analyzer.Rules; @@ -55,12 +56,12 @@ private static async Task Refactor(Document document, SyntaxNode nodeT return document; var attribute = editor.Generator.Attribute( - generator.TypeExpression(structLayoutAttribute, addImport: true), + generator.TypeExpression(structLayoutAttribute).WithAdditionalAnnotations(Simplifier.AddImportsAnnotation), new[] { generator.AttributeArgument( generator.MemberAccessExpression( - generator.TypeExpression(layoutKindEnum, addImport: true), + generator.TypeExpression(layoutKindEnum).WithAdditionalAnnotations(Simplifier.AddImportsAnnotation), layoutKind.ToString())), }); diff --git a/tests/Meziantou.Analyzer.Test/Rules/UseStructLayoutAttributeAnalyzerTests.cs b/tests/Meziantou.Analyzer.Test/Rules/UseStructLayoutAttributeAnalyzerTests.cs index 6c780da0e..4b0176384 100644 --- a/tests/Meziantou.Analyzer.Test/Rules/UseStructLayoutAttributeAnalyzerTests.cs +++ b/tests/Meziantou.Analyzer.Test/Rules/UseStructLayoutAttributeAnalyzerTests.cs @@ -37,7 +37,9 @@ public async Task MissingAttribute_ShouldReportDiagnostic() int a; int b; }"; - const string CodeFix = @"[System.Runtime.InteropServices.StructLayout(System.Runtime.InteropServices.LayoutKind.Auto)] + const string CodeFix = @"using System.Runtime.InteropServices; + +[StructLayout(LayoutKind.Auto)] struct TypeName { int a; @@ -132,7 +134,9 @@ public async Task RecordStruct() { const string SourceCode = @"record struct [||]TypeName(int A, int B);"; - const string CodeFix = @"[System.Runtime.InteropServices.StructLayout(System.Runtime.InteropServices.LayoutKind.Auto)] + const string CodeFix = @"using System.Runtime.InteropServices; + +[StructLayout(LayoutKind.Auto)] record struct TypeName(int A, int B);"; await CreateProjectBuilder()