Skip to content

Commit d31a297

Browse files
committed
C#: Make support for .slnx files.
1 parent 5212e63 commit d31a297

File tree

5 files changed

+24
-11
lines changed

5 files changed

+24
-11
lines changed

csharp/autobuilder/Semmle.Autobuild.Shared/Autobuilder.cs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -182,8 +182,16 @@ protected Autobuilder(IBuildActions actions, TAutobuildOptions options, Diagnost
182182
if (ret is not null)
183183
return ret;
184184

185+
// Then look for language specific solution files, e.g. `.slnx` files
186+
if (Options.Language.SolutionExtension is string solutionExtension)
187+
{
188+
ret = FindFiles(solutionExtension, f => new Solution<TAutobuildOptions>(this, f, false))?.ToList();
189+
if (ret is not null)
190+
return ret;
191+
}
192+
185193
// Finally look for language specific project files, e.g. `.csproj` files
186-
ret = FindFiles(this.Options.Language.ProjectExtension, f => new Project<TAutobuildOptions>(this, f))?.ToList();
194+
ret = FindFiles(Options.Language.ProjectExtension, f => new Project<TAutobuildOptions>(this, f))?.ToList();
187195
return ret ?? new List<IProjectOrSolution>();
188196
});
189197

csharp/autobuilder/Semmle.Autobuild.Shared/Solution.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,11 @@
44
using System.Linq;
55
using Microsoft.Build.Construction;
66
using Microsoft.Build.Exceptions;
7-
using Semmle.Util.Logging;
87

98
namespace Semmle.Autobuild.Shared
109
{
1110
/// <summary>
12-
/// A solution file, extension .sln.
11+
/// A solution file, extension .sln or .slnx.
1312
/// </summary>
1413
public interface ISolution : IProjectOrSolution
1514
{

csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/FileProvider.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ public FileProvider(DirectoryInfo sourceDir, ILogger logger)
3737
smallNonBinary = new Lazy<string[]>(() => ReturnAndLogFiles("small non-binary", SelectSmallFiles(allNonBinary.Value).SelectFileNames().ToArray()));
3838
sources = new Lazy<string[]>(() => SelectTextFileNamesByExtension("source", ".cs"));
3939
projects = new Lazy<string[]>(() => SelectTextFileNamesByExtension("project", ".csproj"));
40-
solutions = new Lazy<string[]>(() => SelectTextFileNamesByExtension("solution", ".sln"));
40+
solutions = new Lazy<string[]>(() => SelectTextFileNamesByExtension("solution", ".sln", ".slnx"));
4141
dlls = new Lazy<string[]>(() => SelectBinaryFileNamesByExtension("DLL", ".dll"));
4242
nugetConfigs = new Lazy<string[]>(() => SelectTextFileNamesByName("nuget.config"));
4343
globalJsons = new Lazy<string[]>(() => SelectTextFileNamesByName("global.json"));

csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/SolutionFile.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
namespace Semmle.Extraction.CSharp.DependencyFetching
77
{
88
/// <summary>
9-
/// Access data in a .sln file.
9+
/// Access data in a .sln or .slnx file.
1010
/// </summary>
1111
internal class SolutionFile
1212
{
@@ -17,7 +17,7 @@ internal class SolutionFile
1717
/// <summary>
1818
/// Read the file.
1919
/// </summary>
20-
/// <param name="filename">The filename of the .sln.</param>
20+
/// <param name="filename">The filename of the .sln or .slnx.</param>
2121
public SolutionFile(string filename)
2222
{
2323
// SolutionFile.Parse() expects a rooted path.
@@ -26,7 +26,7 @@ public SolutionFile(string filename)
2626
}
2727

2828
/// <summary>
29-
/// Projects directly included in the .sln file.
29+
/// Projects directly included in the .sln or .slnx file.
3030
/// </summary>
3131
public IEnumerable<string> MsBuildProjects
3232
{

csharp/extractor/Semmle.Util/Language.cs

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,27 @@
22
{
33
public sealed class Language
44
{
5-
public static Language Cpp { get; } = new Language(".vcxproj", "CPP");
6-
public static Language CSharp { get; } = new Language(".csproj", "CSHARP");
5+
public static Language Cpp { get; } = new Language("CPP", ".vcxproj");
6+
public static Language CSharp { get; } = new Language("CSHARP", ".csproj", ".slnx");
77

88
public bool ProjectFileHasThisLanguage(string path) =>
99
System.IO.Path.GetExtension(path) == ProjectExtension;
1010

1111
public string ProjectExtension { get; }
12+
public string? SolutionExtension { get; }
1213
public string UpperCaseName { get; }
1314

14-
private Language(string extension, string name)
15+
private Language(string name, string projectExtension)
1516
{
16-
ProjectExtension = extension;
17+
ProjectExtension = projectExtension;
1718
UpperCaseName = name;
1819
}
1920

21+
private Language(string name, string projectExtension, string solutionExtension) : this(name, projectExtension)
22+
{
23+
SolutionExtension = solutionExtension;
24+
}
25+
2026
public override string ToString() =>
2127
ProjectExtension == Cpp.ProjectExtension ? "C/C++" : "C#";
2228
}

0 commit comments

Comments
 (0)