forked from boxqkrtm/com.unity.ide.cursor
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCli.cs
88 lines (81 loc) · 2.69 KB
/
Cli.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
using System;
using System.Linq;
using Unity.CodeEditor;
namespace Microsoft.Unity.VisualStudio.Editor
{
internal static class Cli
{
internal static void Log(string message)
{
// Use writeline here, instead of UnityEngine.Debug.Log to not include the stacktrace in the editor.log
Console.WriteLine($"[VisualStudio.Editor.{nameof(Cli)}] {message}");
}
internal static string GetInstallationDetails(IVisualStudioInstallation installation)
{
return $"{installation.ToCodeEditorInstallation().Name} Path:{installation.Path}, LanguageVersionSupport:{installation.LatestLanguageVersionSupported} AnalyzersSupport:{installation.SupportsAnalyzers}";
}
internal static void GenerateSolutionWith(VisualStudioEditor vse, string installationPath)
{
if (vse != null && vse.TryGetVisualStudioInstallationForPath(installationPath, lookupDiscoveredInstallations: true, out var vsi))
{
Log($"Using {GetInstallationDetails(vsi)}");
vse.SyncAll();
}
else
{
Log($"No Visual Studio installation found in ${installationPath}!");
}
}
internal static void GenerateSolution()
{
if (CodeEditor.CurrentEditor is VisualStudioEditor vse)
{
Log($"Using default editor settings for Visual Studio installation");
GenerateSolutionWith(vse, CodeEditor.CurrentEditorInstallation);
}
else
{
Log($"Visual Studio is not set as your default editor, looking for installations");
try
{
var installations = Discovery
.GetVisualStudioInstallations()
.Cast<VisualStudioInstallation>()
.OrderByDescending(vsi => !vsi.IsPrerelease)
.ThenBy(vsi => vsi.Version)
.ToArray();
foreach(var vsi in installations)
{
Log($"Detected {GetInstallationDetails(vsi)}");
}
var installation = installations
.FirstOrDefault();
if (installation != null)
{
var current = CodeEditor.CurrentEditorInstallation;
try
{
CodeEditor.SetExternalScriptEditor(installation.Path);
GenerateSolutionWith(CodeEditor.CurrentEditor as VisualStudioEditor, installation.Path);
}
finally
{
CodeEditor.SetExternalScriptEditor(current);
}
} else
{
Log($"No Visual Studio installation found!");
}
}
catch (Exception ex)
{
Log($"Error detecting Visual Studio installations: {ex}");
}
}
}
}
}