Auto detect all Visual Studio and Rider installs

This commit is contained in:
Simon Lübeß
2026-08-14 23:34:04 +02:00
parent f8e533f28d
commit 62ad8bee35
13 changed files with 703 additions and 563 deletions
+2 -4
View File
@@ -3,9 +3,7 @@ namespace GlitchyEditor.CodeEditors;
interface IIdeAdapter
{
static void OpenScript(StringView fileName);
void OpenScript(StringView fileName, int lineNumber = 0);
static void OpenScript(StringView fileName, int lineNumber);
static void OpenScriptProject();
void OpenScriptProject();
}
@@ -6,29 +6,34 @@ using System.IO;
using System.IO;
using GlitchyEditor.EditWindows;
using ImGui;
using GlitchyEditor.Settings;
namespace GlitchyEditor.CodeEditors;
class RiderIdeAdapter : IIdeAdapter
{
public static void OpenScript(StringView fileName)
private IdeInstallation _ideInstallation;
public this(IdeInstallation ideInstallation)
{
OpenScript(fileName, 0);
Debug.Assert(ideInstallation.Ide == .Rider);
_ideInstallation = ideInstallation;
}
public static void OpenScript(StringView fileName, int lineNumber)
public void OpenScript(StringView fileName, int lineNumber)
{
String solutionPath = scope .();
Editor.Instance.CurrentProject.GetPathToScriptSolutionFile(solutionPath);
ProcessStartInfo startInfo = scope .();
startInfo.SetFileName(EditorApp.Instance.Settings.ScriptSettings.RiderPath);
startInfo.SetFileName(_ideInstallation.Path);
startInfo.SetArguments(scope $"{solutionPath} --line {lineNumber} {fileName}");
scope SpawnedProcess().Start(startInfo);
}
public static void OpenScriptProject()
public void OpenScriptProject()
{
String solutionPath = scope .();
Editor.Instance.CurrentProject.GetPathToScriptSolutionFile(solutionPath);
@@ -39,7 +44,7 @@ class RiderIdeAdapter : IIdeAdapter
return;
}
if (!File.Exists(EditorApp.Instance.Settings.ScriptSettings.RiderPath))
if (!File.Exists(_ideInstallation.Path))
{
Editor.Instance.ShowSettings();
Editor.Instance.SettingsWindow.HighlightSetting("Tools", "Rider path");
@@ -51,7 +56,7 @@ class RiderIdeAdapter : IIdeAdapter
}
ProcessStartInfo startInfo = scope .();
startInfo.SetFileName(EditorApp.Instance.Settings.ScriptSettings.RiderPath);
startInfo.SetFileName(_ideInstallation.Path);
startInfo.SetArguments(solutionPath);
scope SpawnedProcess().Start(startInfo);
@@ -2,12 +2,22 @@ using System;
using System.Diagnostics;
using GlitchyEngine;
using System.Collections;
using GlitchyEditor.Settings;
namespace GlitchyEditor.CodeEditors;
class VisualStudioIdeAdapter : IIdeAdapter
{
public static bool IsRunning()
private IdeInstallation _ideInstallation;
public this(IdeInstallation ideInstallation)
{
Debug.Assert(ideInstallation.Ide == .VisualStudio);
_ideInstallation = ideInstallation;
}
public bool IsRunning()
{
List<Process> processes = scope .();
@@ -19,6 +29,7 @@ class VisualStudioIdeAdapter : IIdeAdapter
for (Process process in processes)
{
// TODO?
}
ClearAndDeleteItems!(processes);
@@ -26,12 +37,12 @@ class VisualStudioIdeAdapter : IIdeAdapter
return false;
}
public static void OpenScript(StringView fileName)
public void OpenScript(StringView fileName, int lineNumber)
{
if (IsRunning())
{
ProcessStartInfo startInfo = scope .();
startInfo.SetFileName(EditorApp.Instance.Settings.ScriptSettings.VisualStudioPath);
startInfo.SetFileName(_ideInstallation.Path);
startInfo.SetArguments(scope $"/Edit {fileName}");
scope SpawnedProcess().Start(startInfo);
@@ -39,25 +50,20 @@ class VisualStudioIdeAdapter : IIdeAdapter
else
{
ProcessStartInfo startInfo = scope .();
startInfo.SetFileName(EditorApp.Instance.Settings.ScriptSettings.VisualStudioPath);
startInfo.SetFileName(_ideInstallation.Path);
startInfo.SetArguments(scope $"/Edit {fileName}");
scope SpawnedProcess().Start(startInfo);
}
}
public static void OpenScript(StringView fileName, int lineNumber)
{
OpenScript(fileName);
}
public static void OpenScriptProject()
public void OpenScriptProject()
{
String solutionPath = scope .();
Editor.Instance.CurrentProject.GetPathToScriptSolutionFile(solutionPath);
ProcessStartInfo psi = scope .();
psi.SetFileName("devenv");
psi.SetFileName(_ideInstallation.Path);
psi.SetArguments(solutionPath);
scope SpawnedProcess().Start(psi);