Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions UnityEngineAnalyzer.CLI/AnalyzerReport.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,11 @@ public void AddExporter(IAnalyzerExporter exporter)
_exporters.Add(exporter);
}

public int GetExporterCount()
{
return _exporters.Count;
}

public void AppendDiagnostics(IEnumerable<Diagnostic> diagnosticResults)
{
if (_exporters.Count == 0)
Expand Down
6 changes: 3 additions & 3 deletions UnityEngineAnalyzer.CLI/ConfigurationFileGenerator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,11 @@ public void GenerateConfigurationFile()

var rootJson = new JObject();

foreach (var type in allTypes)
foreach (var typeInfo in allTypes)
{
if (type.BaseType == typeof(DiagnosticAnalyzer))
if (typeInfo.BaseType == typeof(DiagnosticAnalyzer))
{
rootJson.Add(new JProperty(type.Name, true));
rootJson.Add(new JProperty(typeInfo.Name, true)); //TODO SupportedDiagnostics.IsEnabledByDefault;
}
}

Expand Down
21 changes: 21 additions & 0 deletions UnityEngineAnalyzer.CLI/Options.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
using CommandLine;
using System.Collections.Generic;
using UnityEngineAnalyzer.CLI.Reporting;

namespace UnityEngineAnalyzer.CLI
{
internal class Options
{
[ValueOption(0)]
public string ProjectFile { get; set; }

[Option('e', "exporter", HelpText = "Exporters to be used.")]
public IEnumerable<string> Exporters { get; set; }

[Option('c', "configuration", HelpText = "Custom json configuration to be used.")]
public string ConfigurationFile { get; set; }

[Option('s', "severity", DefaultValue = DiagnosticInfo.DiagnosticInfoSeverity.Warning, HelpText = "Minimal severity to be reported.")]
public DiagnosticInfo.DiagnosticInfoSeverity MinimalSeverity { get; set; }
}
}
39 changes: 21 additions & 18 deletions UnityEngineAnalyzer.CLI/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,52 +17,55 @@ static Program()
AvailableExporters.Add(nameof(ConsoleAnalyzerExporter), typeof(ConsoleAnalyzerExporter));
}


public static void Main(string[] args)
{
try
{
//TODO: Use a proper parser for the commands
var options = new Options();
var isValid = CommandLine.Parser.Default.ParseArgumentsStrict(args, options);

if (args.Length <= 0)
if (isValid == false || options.ProjectFile == null)
{
return;
}

var startTime = DateTime.Now;

var fileName = args[0];
var fileName = options.ProjectFile;
var fileInfo = new FileInfo(fileName);

//NOTE: This could be configurable via the CLI at some point
var report = new AnalyzerReport();

int optinalArgumentIndex = 1;
if (args.Length > optinalArgumentIndex && AvailableExporters.ContainsKey(args[optinalArgumentIndex]))
if (options.Exporters != null)
{
var exporterInstance = Activator.CreateInstance(AvailableExporters[args[optinalArgumentIndex]]);
report.AddExporter(exporterInstance as IAnalyzerExporter);

optinalArgumentIndex++;
foreach (var exporter in options.Exporters)
{
if (AvailableExporters.ContainsKey(exporter))
{
var exporterInstance = Activator.CreateInstance(AvailableExporters[exporter]);
report.AddExporter(exporterInstance as IAnalyzerExporter);
}
}
}
else
{

if (report.GetExporterCount() == 0)
{
//It's generally a good idea to make sure that the Console Exporter is last since it is interactive
report.AddExporter(new JsonAnalyzerExporter());
report.AddExporter(new ConsoleAnalyzerExporter());
report.AddExporter(new JsonAnalyzerExporter(options.MinimalSeverity));
report.AddExporter(new ConsoleAnalyzerExporter(options.MinimalSeverity));
}


report.InitializeReport(fileInfo);

var tasks = new List<Task>();
if (fileInfo.Exists)
{
FileInfo configFileInfo = null;
if (args.Length > optinalArgumentIndex)

if (options.ConfigurationFile != null)
{
var configFileName = args[optinalArgumentIndex];
configFileInfo = new FileInfo(configFileName);
configFileInfo = new FileInfo(options.ConfigurationFile);
}

var solutionAnalyzer = new SolutionAnalyzer();
Expand Down
21 changes: 21 additions & 0 deletions UnityEngineAnalyzer.CLI/Reporting/AnalyzerExporter.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
using System;
using System.IO;

namespace UnityEngineAnalyzer.CLI.Reporting
{
public abstract class AnalyzerExporter : IAnalyzerExporter
{
//NOTE: Can we use using.static.DiagnosticsInfo; C#6 feature?
protected DiagnosticInfo.DiagnosticInfoSeverity MinimalSeverity;

public AnalyzerExporter(DiagnosticInfo.DiagnosticInfoSeverity MinimalSeverity)
{
this.MinimalSeverity = MinimalSeverity;
}

public abstract void AppendDiagnostic(DiagnosticInfo diagnosticInfo);
public abstract void FinalizeExporter(TimeSpan duration);
public abstract void InitializeExporter(FileInfo projectFile);
public abstract void NotifyException(Exception exception);
}
}
3 changes: 3 additions & 0 deletions UnityEngineAnalyzer.CLI/Reporting/ConsoleAnalyzerExporter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@ namespace UnityEngineAnalyzer.CLI.Reporting
{
public class ConsoleAnalyzerExporter : StandardOutputAnalyzerReporter
{
public ConsoleAnalyzerExporter(DiagnosticInfo.DiagnosticInfoSeverity MinimalSeverity) : base(MinimalSeverity)
{
}

public override void FinalizeExporter(TimeSpan duration)
{
Expand Down
2 changes: 0 additions & 2 deletions UnityEngineAnalyzer.CLI/Reporting/DiagnosticInfo.cs
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
namespace UnityEngineAnalyzer.CLI.Reporting
{


public class DiagnosticInfo
{
//TODO: Rename this to something like AnalysisResult
Expand Down
16 changes: 8 additions & 8 deletions UnityEngineAnalyzer.CLI/Reporting/JsonAnalyzerExporter.cs
Original file line number Diff line number Diff line change
@@ -1,33 +1,33 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using Newtonsoft.Json;

namespace UnityEngineAnalyzer.CLI.Reporting
{
public class JsonAnalyzerExporter : IAnalyzerExporter
public class JsonAnalyzerExporter : AnalyzerExporter
{
private const string JsonReportFileName = "report.json";
private const string HtmlReportFileName = "UnityReport.html";
private const DiagnosticInfo.DiagnosticInfoSeverity MinimalSeverity = DiagnosticInfo.DiagnosticInfoSeverity.Warning;


private JsonTextWriter _jsonWriter;
private readonly JsonSerializer _jsonSerializer = new JsonSerializer();
private readonly List<Exception> _exceptions = new List<Exception>();
private string _destinationReportFile;

public JsonAnalyzerExporter(DiagnosticInfo.DiagnosticInfoSeverity MinimalSeverity) : base(MinimalSeverity)
{
}

public void AppendDiagnostic(DiagnosticInfo diagnosticInfo)
public override void AppendDiagnostic(DiagnosticInfo diagnosticInfo)
{
if (diagnosticInfo.Severity >= MinimalSeverity)
{
_jsonSerializer.Serialize(_jsonWriter, diagnosticInfo);
}
}

public void FinalizeExporter(TimeSpan duration)
public override void FinalizeExporter(TimeSpan duration)
{
_jsonWriter.WriteEndArray();

Expand All @@ -50,7 +50,7 @@ public void FinalizeExporter(TimeSpan duration)
//Process.Start(_destinationReportFile);
}

public void InitializeExporter(FileInfo projectFile)
public override void InitializeExporter(FileInfo projectFile)
{
if (!projectFile.Exists)
{
Expand Down Expand Up @@ -81,7 +81,7 @@ public void InitializeExporter(FileInfo projectFile)
_jsonSerializer.Formatting = Formatting.Indented;
}

public void NotifyException(Exception exception)
public override void NotifyException(Exception exception)
{
_exceptions.Add(exception);
}
Expand Down
28 changes: 15 additions & 13 deletions UnityEngineAnalyzer.CLI/Reporting/StandardOutputAnalyzerReporter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,16 @@

namespace UnityEngineAnalyzer.CLI.Reporting
{
public class StandardOutputAnalyzerReporter : IAnalyzerExporter
public class StandardOutputAnalyzerReporter : AnalyzerExporter
{
protected const string ConsoleSeparator = "\t";
protected const DiagnosticInfo.DiagnosticInfoSeverity MinimalSeverity = DiagnosticInfo.DiagnosticInfoSeverity.Warning;

protected const string FailurePrefix = "# ";

public void AppendDiagnostic(DiagnosticInfo diagnosticInfo)
public StandardOutputAnalyzerReporter(DiagnosticInfo.DiagnosticInfoSeverity MinimalSeverity) : base(MinimalSeverity)
{
}

public override void AppendDiagnostic(DiagnosticInfo diagnosticInfo)
{
if (diagnosticInfo.Severity < MinimalSeverity)
{
Expand Down Expand Up @@ -48,15 +50,7 @@ private ConsoleColor ConsoleColorFromSeverity(DiagnosticInfo.DiagnosticInfoSever
}
}

public virtual void FinalizeExporter(TimeSpan duration)
{
}

public virtual void InitializeExporter(FileInfo projectFile)
{
}

public virtual void NotifyException(Exception exception)
public override void NotifyException(Exception exception)
{
Console.ForegroundColor = ConsoleColor.Red;

Expand All @@ -72,5 +66,13 @@ public virtual void NotifyException(Exception exception)

Console.ResetColor();
}

public override void FinalizeExporter(TimeSpan duration)
{
}

public override void InitializeExporter(FileInfo projectFile)
{
}
}
}
5 changes: 5 additions & 0 deletions UnityEngineAnalyzer.CLI/UnityEngineAnalyzer.CLI.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,9 @@
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="CommandLine, Version=1.9.71.2, Culture=neutral, PublicKeyToken=de6f01bd326f8c32, processorArchitecture=MSIL">
<HintPath>..\packages\CommandLineParser.1.9.71\lib\net45\CommandLine.dll</HintPath>
</Reference>
<Reference Include="Microsoft.CodeAnalysis, Version=1.3.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.CodeAnalysis.Common.1.3.2\lib\net45\Microsoft.CodeAnalysis.dll</HintPath>
<Private>True</Private>
Expand Down Expand Up @@ -105,6 +108,8 @@
<ItemGroup>
<Compile Include="AnalyzerReport.cs" />
<Compile Include="ConfigurationFileGenerator.cs" />
<Compile Include="Options.cs" />
<Compile Include="Reporting\AnalyzerExporter.cs" />
<Compile Include="Reporting\JsonAnalyzerExporter.cs" />
<Compile Include="Reporting\ConsoleAnalyzerExporter.cs" />
<Compile Include="Reporting\DiagnosticInfo.cs" />
Expand Down
1 change: 1 addition & 0 deletions UnityEngineAnalyzer.CLI/packages.config
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="CommandLineParser" version="1.9.71" targetFramework="net452" />
<package id="Microsoft.CodeAnalysis" version="1.3.2" targetFramework="net452" />
<package id="Microsoft.CodeAnalysis.Analyzers" version="1.1.0" targetFramework="net452" />
<package id="Microsoft.CodeAnalysis.Common" version="1.3.2" targetFramework="net452" />
Expand Down
Loading