Skip to content

Commit

Permalink
feat: initial support for sln and slnx files
Browse files Browse the repository at this point in the history
  • Loading branch information
PhilippHeuer committed Nov 21, 2024
1 parent 804a8bc commit fbea1a5
Show file tree
Hide file tree
Showing 5 changed files with 83 additions and 3 deletions.
3 changes: 3 additions & 0 deletions analyzerapi/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,9 @@ const (
BuildSystemSyntaxDefault ProjectBuildSystemSyntax = "default"
BuildSystemSyntaxGradleGroovyDSL ProjectBuildSystemSyntax = "groovy"
BuildSystemSyntaxGradleKotlinDSL ProjectBuildSystemSyntax = "kotlin"
BuildSystemSyntaxDotNetSLN ProjectBuildSystemSyntax = "sln"
BuildSystemSyntaxDotNetSLNX ProjectBuildSystemSyntax = "slnx"
BuildSystemSyntaxDotNetCSProj ProjectBuildSystemSyntax = "csproj"
BuildSystemSyntaxContainerFile ProjectBuildSystemSyntax = "containerfile"
BuildSystemSyntaxContainerBuildahScript ProjectBuildSystemSyntax = "buildah-script"
BuildSystemSyntaxMkdocsTechdocs ProjectBuildSystemSyntax = "mkdocs-techdocs"
Expand Down
47 changes: 46 additions & 1 deletion modules/dotnet/dotnet.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,51 @@ func (a Analyzer) GetName() string {
func (a Analyzer) Scan(ctx analyzerapi.AnalyzerContext) []*analyzerapi.ProjectModule {
var result []*analyzerapi.ProjectModule

// find solution files
for _, file := range ctx.FilesByExtension["sln"] {
filename := filepath.Base(file)
if strings.HasSuffix(filename, ".sln") {
module := analyzerapi.ProjectModule{
RootDirectory: ctx.ProjectDir,
Directory: filepath.Dir(file),
Name: filepath.Base(filepath.Dir(file)),
Slug: slug.Make(filepath.Base(filepath.Dir(file))),
Discovery: []analyzerapi.ProjectModuleDiscovery{{File: file}},
Type: analyzerapi.ModuleTypeBuildSystem,
BuildSystem: analyzerapi.BuildSystemDotNet,
BuildSystemSyntax: analyzerapi.BuildSystemSyntaxDotNetSLN,
Language: nil,
Dependencies: nil,
Submodules: nil,
Files: ctx.Files,
FilesByExtension: ctx.FilesByExtension,
}
analyzerapi.AddModuleToResult(&result, &module)
}
}
for _, file := range ctx.FilesByExtension["slnx"] {
filename := filepath.Base(file)
if strings.HasSuffix(filename, ".slnx") {
module := analyzerapi.ProjectModule{
RootDirectory: ctx.ProjectDir,
Directory: filepath.Dir(file),
Name: filepath.Base(filepath.Dir(file)),
Slug: slug.Make(filepath.Base(filepath.Dir(file))),
Discovery: []analyzerapi.ProjectModuleDiscovery{{File: file}},
Type: analyzerapi.ModuleTypeBuildSystem,
BuildSystem: analyzerapi.BuildSystemDotNet,
BuildSystemSyntax: analyzerapi.BuildSystemSyntaxDotNetSLNX,
Language: nil,
Dependencies: nil,
Submodules: nil,
Files: ctx.Files,
FilesByExtension: ctx.FilesByExtension,
}
analyzerapi.AddModuleToResult(&result, &module)
}
}

// find project files
for _, file := range ctx.FilesByExtension["csproj"] {
filename := filepath.Base(file)
if strings.HasSuffix(filename, ".csproj") {
Expand All @@ -28,7 +73,7 @@ func (a Analyzer) Scan(ctx analyzerapi.AnalyzerContext) []*analyzerapi.ProjectMo
Discovery: []analyzerapi.ProjectModuleDiscovery{{File: file}},
Type: analyzerapi.ModuleTypeBuildSystem,
BuildSystem: analyzerapi.BuildSystemDotNet,
BuildSystemSyntax: analyzerapi.BuildSystemSyntaxDefault,
BuildSystemSyntax: analyzerapi.BuildSystemSyntaxDotNetCSProj,
Language: nil,
Dependencies: nil,
Submodules: nil,
Expand Down
28 changes: 26 additions & 2 deletions modules/dotnet/dotnet_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,32 @@ func TestAnalyzer_AnalyzeVisualStudioSolution(t *testing.T) {
assert.Len(t, result, 1)
assert.Equal(t, "dotnet", result[0].Name)
assert.Equal(t, analyzerapi.ModuleTypeBuildSystem, result[0].Type)
assert.Equal(t, "dotnet", string(result[0].BuildSystem))
assert.Equal(t, "default", string(result[0].BuildSystemSyntax))
assert.Equal(t, analyzerapi.BuildSystemDotNet, result[0].BuildSystem)
assert.Equal(t, analyzerapi.BuildSystemSyntaxDotNetCSProj, result[0].BuildSystemSyntax)

// print result
for i, item := range result {
t.Logf("result[%d]: %+v", i, *item)
}
}

func TestAnalyzer_AnalyzeVisualStudioSolutionNested(t *testing.T) {
ctx := analyzerapi.GetAnalyzerContext(analyzerapi.GetTestDataDir(t, "dotnet-nested"))

analyzer := Analyzer{}
result := analyzer.Scan(ctx)

// module
assert.Len(t, result, 1)
assert.Equal(t, "dotnet-nested", result[0].Name)
assert.Equal(t, analyzerapi.ModuleTypeBuildSystem, result[0].Type)
assert.Equal(t, analyzerapi.BuildSystemDotNet, result[0].BuildSystem)
assert.Equal(t, analyzerapi.BuildSystemSyntaxDotNetSLN, result[0].BuildSystemSyntax)
assert.Len(t, result[0].Submodules, 1)
assert.Equal(t, "dotnet-nested-hello-world", result[0].Submodules[0].Name)
assert.Equal(t, analyzerapi.ModuleTypeBuildSystem, result[0].Submodules[0].Type)
assert.Equal(t, analyzerapi.BuildSystemDotNet, result[0].Submodules[0].BuildSystem)
assert.Equal(t, analyzerapi.BuildSystemSyntaxDotNetCSProj, result[0].Submodules[0].BuildSystemSyntax)

// print result
for i, item := range result {
Expand Down
Empty file.
8 changes: 8 additions & 0 deletions testdata/dotnet-nested/hello-world/HelloWorld.csproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<Project>
<ItemGroup>
<Compile Include="helloworld.cs"/>
</ItemGroup>
<Target Name="Build">
<Csc Sources="@(Compile)"/>
</Target>
</Project>

0 comments on commit fbea1a5

Please sign in to comment.