mirror of
https://github.com/github/codeql.git
synced 2025-12-16 16:53:25 +01:00
Fix code review findings
This commit is contained in:
@@ -23,7 +23,7 @@ namespace Semmle.Extraction.CSharp.DependencyFetching
|
||||
this.dotNet = dotNet;
|
||||
this.logger = logger;
|
||||
|
||||
newestSdkVersion = new Lazy<DotNetVersion?>(GetNewestSdk);
|
||||
newestSdkVersion = new Lazy<DotNetVersion?>(GetNewestSdkVersion);
|
||||
cscPath = new Lazy<string?>(GetCscPath);
|
||||
}
|
||||
|
||||
@@ -46,7 +46,7 @@ namespace Semmle.Extraction.CSharp.DependencyFetching
|
||||
return sdks;
|
||||
}
|
||||
|
||||
private DotNetVersion? GetNewestSdk()
|
||||
private DotNetVersion? GetNewestSdkVersion()
|
||||
{
|
||||
var listed = dotNet.GetListedSdks();
|
||||
var sdks = ParseSdks(listed);
|
||||
@@ -55,14 +55,14 @@ namespace Semmle.Extraction.CSharp.DependencyFetching
|
||||
|
||||
private string? GetCscPath()
|
||||
{
|
||||
var sdk = GetNewestSdk();
|
||||
if (sdk is null)
|
||||
var newestSdkVersion = GetNewestSdkVersion();
|
||||
if (newestSdkVersion is null)
|
||||
{
|
||||
logger.LogWarning("No dotnet SDK found.");
|
||||
return null;
|
||||
}
|
||||
|
||||
var path = Path.Combine(sdk.FullPath, "Roslyn", "bincore", "csc.dll");
|
||||
var path = Path.Combine(newestSdkVersion.FullPath, "Roslyn", "bincore", "csc.dll");
|
||||
logger.LogDebug($"Source generator CSC: '{path}'");
|
||||
if (!File.Exists(path))
|
||||
{
|
||||
|
||||
@@ -73,13 +73,7 @@ namespace Semmle.Extraction.CSharp.DependencyFetching
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!groupedFiles.TryGetValue(project.File, out var files))
|
||||
{
|
||||
files = [];
|
||||
groupedFiles[project.File] = files;
|
||||
}
|
||||
|
||||
files.Add(additionalFile);
|
||||
groupedFiles.AddAnother(project.File, additionalFile);
|
||||
}
|
||||
|
||||
try
|
||||
|
||||
@@ -35,23 +35,22 @@ namespace Semmle.Extraction.CSharp.DependencyFetching
|
||||
|
||||
public IEnumerable<string> RunSourceGenerator(IEnumerable<string> additionalFiles, string csprojFile, IEnumerable<string> references, string targetDir)
|
||||
{
|
||||
var name = Guid.NewGuid().ToString("N").ToUpper();
|
||||
var tempPath = FileUtils.GetTemporaryWorkingDirectory(out var shouldCleanUp);
|
||||
var analyzerConfig = Path.Combine(tempPath, $"{name}.txt");
|
||||
var dllPath = Path.Combine(tempPath, $"{name}.dll");
|
||||
var cscArgsPath = Path.Combine(tempPath, $"{name}.rsp");
|
||||
var outputFolder = Path.Combine(targetDir, name);
|
||||
Directory.CreateDirectory(outputFolder);
|
||||
|
||||
try
|
||||
{
|
||||
var name = Guid.NewGuid().ToString("N").ToUpper();
|
||||
using var tempDir = new TemporaryDirectory(Path.Join(FileUtils.GetTemporaryWorkingDirectory(out _), "source-generator"), "source generator temporary", logger);
|
||||
var analyzerConfigPath = Path.Combine(tempDir.DirInfo.FullName, $"{name}.txt");
|
||||
var dllPath = Path.Combine(tempDir.DirInfo.FullName, $"{name}.dll");
|
||||
var cscArgsPath = Path.Combine(tempDir.DirInfo.FullName, $"{name}.rsp");
|
||||
var outputFolder = Path.Combine(targetDir, name);
|
||||
Directory.CreateDirectory(outputFolder);
|
||||
logger.LogInfo("Producing analyzer config content.");
|
||||
GenerateAnalyzerConfig(additionalFiles, csprojFile, analyzerConfig);
|
||||
GenerateAnalyzerConfig(additionalFiles, csprojFile, analyzerConfigPath);
|
||||
|
||||
logger.LogDebug($"Analyzer config content: {File.ReadAllText(analyzerConfig)}");
|
||||
logger.LogDebug($"Analyzer config content: {File.ReadAllText(analyzerConfigPath)}");
|
||||
|
||||
var args = new StringBuilder();
|
||||
args.Append($"/target:exe /generatedfilesout:\"{outputFolder}\" /out:\"{dllPath}\" /analyzerconfig:\"{analyzerConfig}\" ");
|
||||
args.Append($"/target:exe /generatedfilesout:\"{outputFolder}\" /out:\"{dllPath}\" /analyzerconfig:\"{analyzerConfigPath}\" ");
|
||||
|
||||
foreach (var f in Directory.GetFiles(SourceGeneratorFolder, "*.dll", new EnumerationOptions { RecurseSubdirectories = false, MatchCasing = MatchCasing.CaseInsensitive }))
|
||||
{
|
||||
@@ -91,27 +90,6 @@ namespace Semmle.Extraction.CSharp.DependencyFetching
|
||||
logger.LogInfo($"Failed to generate source files from {FileType} files: {ex.Message}");
|
||||
return [];
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (shouldCleanUp)
|
||||
{
|
||||
DeleteFile(analyzerConfig);
|
||||
DeleteFile(dllPath);
|
||||
DeleteFile(cscArgsPath);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void DeleteFile(string path)
|
||||
{
|
||||
try
|
||||
{
|
||||
File.Delete(path);
|
||||
}
|
||||
catch (Exception exc)
|
||||
{
|
||||
logger.LogWarning($"Failed to delete file {path}: {exc}");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,9 +15,9 @@ namespace Semmle.Util
|
||||
|
||||
public DirectoryInfo DirInfo { get; }
|
||||
|
||||
public TemporaryDirectory(string name, string userReportedDirectoryPurpose, ILogger logger)
|
||||
public TemporaryDirectory(string path, string userReportedDirectoryPurpose, ILogger logger)
|
||||
{
|
||||
DirInfo = new DirectoryInfo(name);
|
||||
DirInfo = new DirectoryInfo(path);
|
||||
DirInfo.Create();
|
||||
this.userReportedDirectoryPurpose = userReportedDirectoryPurpose;
|
||||
this.logger = logger;
|
||||
|
||||
Reference in New Issue
Block a user