- Notifications
You must be signed in to change notification settings - Fork0
Extract essential metrics fron a .NET solution
License
magic5644/codeLineCounter
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
TheCodeLineCounter
project is a tool that counts the number of lines of code per file, namespace, and project in a .NET solution. It also calculates the cyclomatic complexity of each file.
Since version1.0.2
it also check duplications in the code.Since version1.2.0
it also generate duplication report.
All the results are exported to CSV or JSON files. A Graph of dependency is also generated. (dot file Graphviz format)
- Counts the number of lines of code per file, namespace, and project.
- Calculates the cyclomatic complexity of each file.
- Calculates the number of code duplications in the code.
- Calculates and generate a graph of dependencies.
- Exports the results to a CSV or JSON file.
- .NET 9.0 SDK installed.
- The following NuGet packages (use dotnet restore):
Microsoft.CodeAnalysis.CSharp
coverlet.msbuild
CsvHelper
DotNetGraph
coverlet.collector
Microsoft.NET.Test.Sdk
xunit
xunit.runner.visualstudio
- Clone the repository:
git clone https://github.com/magic5644/CodeLineCounter.git
- Navigate to the project directory:
cd CodeLineCounter
- Install the necessary NuGet packages:
dotnet restore
- Build the project:
dotnet build
- Run the program by providing the directory path containing the solutions to analyze:
dotnet run --project CodeLineCounter/CodeLineCounter.csproj -d"path/to/directory/with/solutions -format json"
Or if you want verbose mode on :
dotnet run --project CodeLineCounter/CodeLineCounter.csproj -verbose -d"path/to/directory/with/solutions -format json"
- Select the solution to analyze by entering the corresponding number.
CodeLineCounter.exe [-verbose] [-d<directory_path>] [-output<output_path>] [-format<format>] [-help]
-`-d<directory_path>`: Directory path containing the solutions to analyze (required)-`-output<output_path>`: Destination directoryfor result files (optional, default: current directory)-`-format<format>`: Export formatfor results (optional) - Possible values:`csv`,`json` - Default:`csv`-`-verbose`: Enable detailed logging (optional)-`-help`: Displayhelp
The program generates a CSV file named<SolutionName>-CodeMetrics.csv
containing the following metrics:
Project
: Project name.ProjectPath
: Relative path of the project.Namespace
: Namespace name.FileName
: File name.FilePath
: Relative path of the file.LineCount
: Number of lines of code.CyclomaticComplexity
: Cyclomatic complexity of the file.CodeDuplications
: Number of code duplications in the file.
Project,ProjectPath,Namespace,FileName,FilePath,LineCount,CyclomaticComplexity,CodeDuplicationsCodeLineCounter,CodeLineCounter\CodeLineCounter.csproj,CodeLineCounter,Program.cs,CodeLineCounter\Program.cs,64,7,0CodeLineCounter,CodeLineCounter\CodeLineCounter.csproj,CodeLineCounter.Models,NamespaceMetrics.cs,CodeLineCounter\Models\NamespaceMetrics.cs,13,1,0CodeLineCounter,CodeLineCounter\CodeLineCounter.csproj,NamespaceMetrics,CodeAnalyzer.cs,CodeLineCounter\Services\CodeAnalyzer.cs,109,9,0CodeLineCounter,CodeLineCounter\CodeLineCounter.csproj,CodeLineCounter.Services,CodeDuplicationChecker.cs,CodeLineCounter\Services\CodeDuplicationChecker.cs,103,8,6CodeLineCounter,CodeLineCounter\CodeLineCounter.csproj,CodeLineCounter.Services,CyclomaticComplexityCalculator.cs,CodeLineCounter\Services\CyclomaticComplexityCalculator.cs,65,12,0CodeLineCounter,CodeLineCounter\CodeLineCounter.csproj,CodeLineCounter.Utils,CoreUtils.cs,CodeLineCounter\Utils\CoreUtils.cs,60,7,0CodeLineCounter,CodeLineCounter\CodeLineCounter.csproj,CodeLineCounter.Utils,CsvExporter.cs,CodeLineCounter\Utils\CsvExporter.cs,96,12,2CodeLineCounter,CodeLineCounter\CodeLineCounter.csproj,CodeLineCounter.Utils,FileUtils.cs,CodeLineCounter\Utils\FileUtils.cs,33,3,0CodeLineCounter,CodeLineCounter\CodeLineCounter.csproj,CodeLineCounter.Utils,HashUtils.cs,CodeLineCounter\Utils\HashUtils.cs,25,3,0CodeLineCounter,CodeLineCounter\CodeLineCounter.csproj,CodeLineCounter,Total,E:\_GITHUB\NBLignesCount\CodeLineCounter,64,0,0CodeLineCounter,CodeLineCounter\CodeLineCounter.csproj,CodeLineCounter.Models,Total,E:\_GITHUB\NBLignesCount\CodeLineCounter,13,0,0CodeLineCounter,CodeLineCounter\CodeLineCounter.csproj,CodeLineCounter.Services,Total,E:\_GITHUB\NBLignesCount\CodeLineCounter,65,0,0CodeLineCounter,CodeLineCounter\CodeLineCounter.csproj,NamespaceMetrics,Total,E:\_GITHUB\NBLignesCount\CodeLineCounter,109,0,0CodeLineCounter,CodeLineCounter\CodeLineCounter.csproj,CodeLineCounter.Utils,Total,E:\_GITHUB\NBLignesCount\CodeLineCounter,25,0,0CodeLineCounter,Total,,,,568,,CodeLineCounter.Tests,CodeLineCounter.Tests\CodeLineCounter.Tests.csproj,CodeLineCounter.Tests,CodeAnalyzerTests.cs,CodeLineCounter.Tests\CodeAnalyzerTests.cs,68,1,0CodeLineCounter.Tests,CodeLineCounter.Tests\CodeLineCounter.Tests.csproj,CodeLineCounter.Tests,CodeDuplicationCheckerTests.cs,CodeLineCounter.Tests\CodeDuplicationCheckerTests.cs,109,1,0CodeLineCounter.Tests,CodeLineCounter.Tests\CodeLineCounter.Tests.csproj,CodeLineCounter.Utils.Tests,CoreUtilsTest.cs,CodeLineCounter.Tests\CoreUtilsTest.cs,86,1,0CodeLineCounter.Tests,CodeLineCounter.Tests\CodeLineCounter.Tests.csproj,CodeLineCounter.Tests,CsvExporterTest.cs,CodeLineCounter.Tests\CsvExporterTest.cs,35,1,0CodeLineCounter.Tests,CodeLineCounter.Tests\CodeLineCounter.Tests.csproj,CodeLineCounter.Tests,CyclomaticComplexityCalculatorTests.cs,CodeLineCounter.Tests\CyclomaticComplexityCalculatorTests.cs,54,1,0CodeLineCounter.Tests,CodeLineCounter.Tests\CodeLineCounter.Tests.csproj,CodeLineCounter.Utils.Tests,FileUtilsTest.cs,CodeLineCounter.Tests\FileUtilsTest.cs,18,1,0CodeLineCounter.Tests,CodeLineCounter.Tests\CodeLineCounter.Tests.csproj,CodeLineCounter.Tests,Total,E:\_GITHUB\NBLignesCount\CodeLineCounter.Tests,54,0,0CodeLineCounter.Tests,CodeLineCounter.Tests\CodeLineCounter.Tests.csproj,CodeLineCounter.Utils.Tests,Total,E:\_GITHUB\NBLignesCount\CodeLineCounter.Tests,18,0,0CodeLineCounter.Tests,Total,,,,370,,Total,,,,,938,
The program generates a CSV file named<SolutionName>-CodeDuplication.csv
in the current directory containing the following metrics:
Code Hash
: Hash of the duplicate code.FilePath
: Full path of the file.MethodName
: Name of the method.StartLine
: Start line of the duplicate code.
Code Hash,FilePath,MethodName,StartLine,NbLines0133e750c0fec3d478670cb0441882855926c415a35aacf0360508fdeb73c34c,C:\temp\NamespaceMetrics.cs,CodeLineCounter\Models\class.cs,OpenCommunication,91,3
[ {"CodeHash":"0133e750c0fec3d478670cb0441882855926c415a35aacf0360508fdeb73c34c","FilePath":"C:\\temp\\NamespaceMetrics.cs","MethodName":"OpenCommunication","StartLine":91,"NbLines":3 }, {"CodeHash":"0133e750c0fec3d478670cb0441882855926c415a35aacf0360508fdeb73c78a","FilePath":"C:\\temp\\NamespaceMetrics.cs","MethodName":"CloseCommunication","StartLine":158,"NbLines":30 }]
This graph is generated in the current directory with the name<SolutionName>-Dependencies.dot
.You can open it with Graphviz or any other tool that supports the .dot format.
CodeLineCounter/│├── CodeLineCounter/│ ├── Models/│ │ └── AnalysisResult.cs│ │ └── Dependencies.cs│ │ └── DuplicationCode.cs│ │ └── NamespaceMetrics.cs│ │ └── Settings.cs│ ├── Services/│ │ ├── CodeMetricsAnalyzer.cs│ │ ├── CodeDuplicationChecker.cs│ │ └── CyclomaticComplexityCalculator.cs│ │ └── DependencyAnalyzer.cs│ │ └── DependencyGraphGenerator.cs│ │ └── SolutionAnalyzer.cs│ ├── Utils/│ │ ├── CoreUtils.cs│ │ │── CsvHandler.cs│ │ │── DataExporter.cs│ │ │── FileUtils.cs│ │ └── HashUtils.cs│ │ └── JSONHandler.cs│ ├── Program.cs│ └── CodeLineCounter.csproj├── CodeLineCounter.Tests/│ ├── CodeAnalyzerTests.cs│ ├── CodeDuplicationCheckerTests.cs│ ├── CodeLineCounter.Tests.csproj│ ├── CyclomaticComplexityCalculatorTests.cs│ ├── CoreUtilsTests.cs│ ├── DataExporterTests.cs│ ├── DependencyGraphGeneratorTests.cs│ ├── CsvHandlerTests.cs│ ├── FileUtilsTests.cs│ ├── HashUtilsTests.cs│ ├── JSONHandlerTests.cs│ └── SolutionAnalyzerTests.cs├── .gitignore├── README.md├── SECURITY.md├── LICENSE├── CodeLineCounter.sln├── generate-corvertura.cmd├── generate-corvertura.sh├── publish.cmd└── publish.sh
- To run the unit tests, use the following command:
dotnettest
- To generate code coverage, use the following command:
dotnettest --collect:"XPlat Code Coverage;Format=json,lcov,cobertura" --results-directory CodeLineCounter.Tests\TestResults
- Or use generate-covertura.sh to generate code coverage.
generate-covertura.sh
- Or generate-covertura.cmd for Windows
generate-covertura.cmd
To publish the project, use the following command:
dotnet publish -c Release -o publish -a x64 --sctrue /p:PublishSingleFile=true /p:IncludeNativeLibrariesForSelfExtract=true /p UseAppHost=true
Contributions are welcome! Please open an issue or a pull request for any suggestions or improvements.
This project is licensed under the MIT License. See theLICENSE file for more details.
About
Extract essential metrics fron a .NET solution
Topics
Resources
License
Security policy
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Packages0
Uh oh!
There was an error while loading.Please reload this page.
Contributors4
Uh oh!
There was an error while loading.Please reload this page.