Skip to content

Commit

Permalink
Merge pull request #79958 from van800/master-rider-path-locator-fleet
Browse files Browse the repository at this point in the history
Delegate opening files for Rider to the RiderPathLocator NuGet package
  • Loading branch information
akien-mga committed Aug 4, 2023
2 parents e605a1d + 7f8e3ab commit c236503
Show file tree
Hide file tree
Showing 4 changed files with 25 additions and 44 deletions.
8 changes: 4 additions & 4 deletions modules/mono/editor/GodotTools/GodotTools/GodotSharpEditor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -280,7 +280,7 @@ public Error OpenInExternalEditor(Script script, int line, int col)
case ExternalEditorId.Rider:
{
string scriptPath = ProjectSettings.GlobalizePath(script.ResourcePath);
RiderPathManager.OpenFile(GodotSharpDirs.ProjectSlnPath, scriptPath, line);
RiderPathManager.OpenFile(GodotSharpDirs.ProjectSlnPath, scriptPath, line + 1, col);
return Error.Ok;
}
case ExternalEditorId.MonoDevelop:
Expand Down Expand Up @@ -540,22 +540,22 @@ public override void _EnablePlugin()
settingsHintStr += $",Visual Studio:{(int)ExternalEditorId.VisualStudio}" +
$",MonoDevelop:{(int)ExternalEditorId.MonoDevelop}" +
$",Visual Studio Code:{(int)ExternalEditorId.VsCode}" +
$",JetBrains Rider:{(int)ExternalEditorId.Rider}" +
$",JetBrains Rider and Fleet:{(int)ExternalEditorId.Rider}" +
$",Custom:{(int)ExternalEditorId.CustomEditor}";
}
else if (OS.IsMacOS)
{
settingsHintStr += $",Visual Studio:{(int)ExternalEditorId.VisualStudioForMac}" +
$",MonoDevelop:{(int)ExternalEditorId.MonoDevelop}" +
$",Visual Studio Code:{(int)ExternalEditorId.VsCode}" +
$",JetBrains Rider:{(int)ExternalEditorId.Rider}" +
$",JetBrains Rider and Fleet:{(int)ExternalEditorId.Rider}" +
$",Custom:{(int)ExternalEditorId.CustomEditor}";
}
else if (OS.IsUnixLike)
{
settingsHintStr += $",MonoDevelop:{(int)ExternalEditorId.MonoDevelop}" +
$",Visual Studio Code:{(int)ExternalEditorId.VsCode}" +
$",JetBrains Rider:{(int)ExternalEditorId.Rider}" +
$",JetBrains Rider and Fleet:{(int)ExternalEditorId.Rider}" +
$",Custom:{(int)ExternalEditorId.CustomEditor}";
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="JetBrains.Annotations" Version="2019.1.3.0" ExcludeAssets="runtime" PrivateAssets="all" />
<PackageReference Include="JetBrains.Rider.PathLocator" Version="1.0.1" />
<PackageReference Include="JetBrains.Rider.PathLocator" Version="1.0.4" />
<PackageReference Include="Microsoft.NETFramework.ReferenceAssemblies" Version="1.0.0" PrivateAssets="All" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
<Reference Include="GodotSharp">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,4 +48,9 @@ public void Error(string message, Exception e = null)
else
GD.PushError(message, e);
}

public void Verbose(string message, Exception e = null)
{
// do nothing, since IDK how to write only to the log, without spamming the output
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Godot;
Expand All @@ -11,10 +10,13 @@ namespace GodotTools.Ides.Rider
public static class RiderPathManager
{
private static readonly RiderPathLocator RiderPathLocator;
private static readonly RiderFileOpener RiderFileOpener;

static RiderPathManager()
{
RiderPathLocator = new RiderPathLocator(new RiderLocatorEnvironment());
var riderLocatorEnvironment = new RiderLocatorEnvironment();
RiderPathLocator = new RiderPathLocator(riderLocatorEnvironment);
RiderFileOpener = new RiderFileOpener(riderLocatorEnvironment);
}

public static readonly string EditorPathSettingName = "dotnet/editor/editor_path_optional";
Expand Down Expand Up @@ -46,7 +48,7 @@ public static void Initialize()
}

var riderPath = (string)editorSettings.GetSetting(EditorPathSettingName);
if (IsRiderAndExists(riderPath))
if (File.Exists(riderPath))
{
Globals.EditorDef(EditorPathSettingName, riderPath);
return;
Expand All @@ -63,12 +65,6 @@ public static void Initialize()
}
}

public static bool IsExternalEditorSetToRider(EditorSettings editorSettings)
{
return editorSettings.HasSetting(EditorPathSettingName) &&
IsRider((string)editorSettings.GetSetting(EditorPathSettingName));
}

public static bool IsRider(string path)
{
if (string.IsNullOrEmpty(path))
Expand All @@ -84,49 +80,29 @@ public static bool IsRider(string path)

private static string CheckAndUpdatePath(string riderPath)
{
if (IsRiderAndExists(riderPath))
if (File.Exists(riderPath))
{
return riderPath;
}

var editorSettings = GodotSharpEditor.Instance.GetEditorInterface().GetEditorSettings();
var paths = RiderPathLocator.GetAllRiderPaths();

if (!paths.Any())
var allInfos = RiderPathLocator.GetAllRiderPaths();
if (allInfos.Length == 0)
return null;

string newPath = paths.Last().Path;
var riderInfos = allInfos.Where(info => IsRider(info.Path)).ToArray();
string newPath = riderInfos.Length > 0
? riderInfos[riderInfos.Length - 1].Path
: allInfos[allInfos.Length - 1].Path;
var editorSettings = GodotSharpEditor.Instance.GetEditorInterface().GetEditorSettings();
editorSettings.SetSetting(EditorPathSettingName, newPath);
Globals.EditorDef(EditorPathSettingName, newPath);
return newPath;
}

private static bool IsRiderAndExists(string riderPath)
{
return !string.IsNullOrEmpty(riderPath) && IsRider(riderPath) && new FileInfo(riderPath).Exists;
}

public static void OpenFile(string slnPath, string scriptPath, int line)
public static void OpenFile(string slnPath, string scriptPath, int line, int column)
{
string pathFromSettings = GetRiderPathFromSettings();
string path = CheckAndUpdatePath(pathFromSettings);

var args = new List<string>();
args.Add(slnPath);
if (line >= 0)
{
args.Add("--line");
args.Add((line + 1).ToString()); // https://github.com/JetBrains/godot-support/issues/61
}
args.Add(scriptPath);
try
{
Utils.OS.RunProcess(path, args);
}
catch (Exception e)
{
GD.PushError($"Error when trying to run code editor: JetBrains Rider. Exception message: '{e.Message}'");
}
RiderFileOpener.OpenFile(path, slnPath, scriptPath, line, column);
}
}
}

0 comments on commit c236503

Please sign in to comment.