Static Code Analysis در .NET 🔍⚙️
ءNET. دارای Roslyn analyzerهای داخلی است که کد #C شما را برای مشکلات مربوط به سبک کدنویسی و کیفیت بررسی میکنند. اگر پروژه شما NET 5. یا بالاتر را هدف قرار دهد، code analysis بهصورت پیشفرض فعال است.
بهترین روشی که من برای پیکربندی static code analysis پیدا کردهام، استفاده از Directory.Build.props است. این یک فایل XML است که در آن میتوانید ویژگیهای مشترک پروژهها را پیکربندی کنید. میتوانید فایل Directory.Build.props را در پوشه ریشه قرار دهید تا برای تمام پروژهها اعمال شود. 📁✨
میتوانید TargetFramework، ImplicitUsings، Nullable (nullable reference types)، و غیره را پیکربندی کنید. اما آنچه برای ما مهم است، پیکربندی static code analysis است.
در ادامه برخی ویژگیهایی که میتوانیم پیکربندی کنیم آورده شده است:
• TreatWarningsAsErrors –
همه warningها را به error تبدیل میکند.
• CodeAnalysisTreatWarningsAsErrors–
هشدارهای کیفیت کد (CAxxxx) را به error تبدیل میکند.
• EnforceCodeStyleInBuild –
قوانین مربوط به تحلیل سبک کد ("IDExxxx") را فعال میکند.
• AnalysisLevel –
مشخص میکند کدام analyzerها فعال شوند. مقدار پیشفرض latest است.
• AnalysisMode –
پیکربندی تحلیل کد پیشفرض را تنظیم میکند.
همچنین میتوانیم بستههای NuGet اضافی را در پروژهها نصب کنیم. SonarAnalyzer.CSharp مجموعهای از analyzerهای اضافی دارد که به ما کمک میکند کدی تمیز، ایمن و قابلاعتماد بنویسیم. این کتابخانه توسط همان شرکتی توسعه یافته که SonarQube را ساخته است. 🧪🔒
<Project>
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<!-- Configure code analysis. -->
<AnalysisLevel>latest</AnalysisLevel>
<AnalysisMode>All</AnalysisMode>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
<CodeAnalysisTreatWarningsAsErrors>true</CodeAnalysisTreatWarningsAsErrors>
<EnforceCodeStyleInBuild>true</EnforceCodeStyleInBuild>
</PropertyGroup>
<ItemGroup Condition="'$(MSBuildProjectExtension)' != '.dcproj'">
<PackageReference Include="SonarAnalyzer.CSharp" Version="*">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>
runtime; build; native; contentfiles; analyzers; buildtransitive
</IncludeAssets>
</PackageReference>
</ItemGroup>
</Project>
ءAnalyzerهای داخلی NET. و analyzerهای موجود در SonarAnalyzer.CSharp میتوانند بسیار مفید باشند. اما گاهی اوقات ممکن است با تعداد زیادی هشدار در هنگام build باعث ایجاد سروصدا شوند. ⚠️📢
وقتی با قوانین تحلیل کدی مواجه میشوید که از نظر شما مفید نیستند، میتوانید آنها را غیرفعال کنید. میتوانید قوانین تحلیل کد را به صورت جداگانه در فایل editorconfig. پیکربندی کنید.
# S125: Sections of code should not be commented out
dotnet_diagnostic.S125.severity = none
# S1075: URIs should not be hardcoded
dotnet_diagnostic.S1075.severity = none
# S2094: Classes should not be empty
dotnet_diagnostic.S2094.severity = none
# S3267: Loops should be simplified with "LINQ" expressions
dotnet_diagnostic.S3267.severity = none