Solution.Parser 3.0.0

This package has a SemVer 2.0.0 package version: 3.0.0+29.
dotnet add package Solution.Parser --version 3.0.0                
NuGet\Install-Package Solution.Parser -Version 3.0.0                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Solution.Parser" Version="3.0.0" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Solution.Parser --version 3.0.0                
#r "nuget: Solution.Parser, 3.0.0"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install Solution.Parser as a Cake Addin
#addin nuget:?package=Solution.Parser&version=3.0.0

// Install Solution.Parser as a Cake Tool
#tool nuget:?package=Solution.Parser&version=3.0.0                

Solution Parser

Sample

 [TestClass]
 public abstract class MsTestBase
 {
     protected static IImmutableList<CSharpSyntaxTree> TestCode { get; private set; } = ImmutableList<CSharpSyntaxTree>.Empty;

     protected static IImmutableList<CSharpSyntaxTree> AllSyntaxTrees { get; private set; } = ImmutableList<CSharpSyntaxTree>.Empty;

     protected static IImmutableList<CSharpSyntaxTree> ProductiveCode { get; private set; } = ImmutableList<CSharpSyntaxTree>.Empty;

     protected static IImmutableList<CSharpSyntaxTree> ProductiveCodeToAnaylze { get; private set; } = ImmutableList<CSharpSyntaxTree>.Empty;

     protected static SolutionFile Solution { get; private set; } = null!;
      
     [AssemblyInitialize]
     public static void Init(TestContext _)
     {
         var sSolutionFileInfo = new SolutionFileName("MySolution.sln").FindSolutionFileReverseFrom(new DirectoryInfo(AppDomain.CurrentDomain.BaseDirectory));
         Throw.IfNull(sSolutionFileInfo);

         Solution = sSolutionFileInfo.Parse();

         ProductiveCode = Solution.ProductiveProjects.SelectMany(p => p.CSharpFileInfos)                                 
												     .Select(c => c.Parse())
												     .ToImmutableList();

         TestCode = Solution.UnitTestProjects.SelectMany(p => p.CSharpFileInfos)
											 .Select(c => c.Parse())
											 .ToImmutableList();

         AllSyntaxTrees = ProductiveCode.Concat(TestCode).ToImmutableList();        
     }
 }

CodeRule sample

[TestCategory("Coding-Rules")]
[TestCategory("Coding-Rules Records")]
[TestClass]
public class Records : MsTestBase // <-- MsTestBase is a base class that provides the ProductiveCode property
{
    [TestMethod]
    public void Record_Properties_Have_To_Be_Be_Immutable()
    {
        var mutableProperties = (from syntaxTree in ProductiveCode
                                 from @record in syntaxTree.Records
                                 from property in @record.Properties
                                 where property.IsReadOnly.IsFalse()
                                 select new
                                 {
                                     Error = $@"

Please do not use mutable properties
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
FullName:  {@record.FullQualifiedName}
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Property:  {property.Type} {property.Name}
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Should be: {property.Type} {{get; init;}}
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
"
                                    }).ToImmutableList();

        Assert.IsTrue(mutableProperties.IsEmpty(),
            $"Properties must be immutable. Findings: '{mutableProperties.Count}':{Environment.NewLine}{mutableProperties.Select(error => error.Error).Flatten(Environment.NewLine)}{Environment.NewLine}");
        }
Product Compatible and additional computed target framework versions.
.NET net9.0 is compatible. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
3.0.0 27 11/20/2024
2.0.18 28 11/20/2024
2.0.17 1,104 10/17/2024
2.0.16 3,923 9/23/2024
2.0.15 525 9/6/2024
2.0.13 9,325 6/12/2024
2.0.12 99 5/26/2024
2.0.11 1,054 5/12/2024
2.0.10 49 5/12/2024
2.0.9 53 5/10/2024
2.0.8 58 5/9/2024
2.0.7 55 5/9/2024
2.0.6 54 5/9/2024
2.0.5 1,637 4/20/2024
2.0.4 1,370 3/5/2024
2.0.3 2,898 1/22/2024
2.0.2 62 1/22/2024
2.0.1 421 1/16/2024
2.0.0 949 11/28/2023
0.2.0 453 11/28/2023
0.2.0-alpha.45 402 10/14/2023
0.2.0-alpha.44 116 9/12/2023
0.2.0-alpha.43 1,675 8/28/2023
0.2.0-alpha.42 95 8/27/2023
0.2.0-alpha.41 94 8/27/2023
0.2.0-alpha.38 1,394 7/25/2023
0.2.0-alpha.37 439 6/30/2023
0.2.0-alpha.34 4,869 3/16/2023
0.2.0-alpha.31 744 2/5/2023
0.2.0-alpha.30 2,377 1/2/2023
0.2.0-alpha.29 119 1/1/2023
0.2.0-alpha.27 109 1/1/2023
0.2.0-alpha.25 119 1/1/2023
0.1.0-alpha.24 112 12/27/2022
0.1.0-alpha.23 389 12/12/2022
0.1.0-alpha.22 107 12/12/2022
0.1.0-alpha.21 5,030 9/15/2022
0.1.0-alpha.19 203 9/14/2022
0.1.0-alpha.16 2,489 6/7/2022
0.1.0-alpha.15 130 6/7/2022
0.1.0-alpha.14 131 6/7/2022
0.1.0-alpha.13 341 4/25/2022
0.1.0-alpha.12 120 4/22/2022
0.1.0-alpha.11 150 4/16/2022

Upgrade to .Net 9