Browse Source

Merge pull request #79958 from van800/master-rider-path-locator-fleet

Delegate opening files for Rider to the RiderPathLocator NuGet package
Rémi Verschelde 2 years ago
parent
commit
c236503b75

+ 4 - 4
modules/mono/editor/GodotTools/GodotTools/GodotSharpEditor.cs

@@ -280,7 +280,7 @@ namespace GodotTools
                 case ExternalEditorId.Rider:
                 case ExternalEditorId.Rider:
                 {
                 {
                     string scriptPath = ProjectSettings.GlobalizePath(script.ResourcePath);
                     string scriptPath = ProjectSettings.GlobalizePath(script.ResourcePath);
-                    RiderPathManager.OpenFile(GodotSharpDirs.ProjectSlnPath, scriptPath, line);
+                    RiderPathManager.OpenFile(GodotSharpDirs.ProjectSlnPath, scriptPath, line + 1, col);
                     return Error.Ok;
                     return Error.Ok;
                 }
                 }
                 case ExternalEditorId.MonoDevelop:
                 case ExternalEditorId.MonoDevelop:
@@ -540,7 +540,7 @@ namespace GodotTools
                 settingsHintStr += $",Visual Studio:{(int)ExternalEditorId.VisualStudio}" +
                 settingsHintStr += $",Visual Studio:{(int)ExternalEditorId.VisualStudio}" +
                                    $",MonoDevelop:{(int)ExternalEditorId.MonoDevelop}" +
                                    $",MonoDevelop:{(int)ExternalEditorId.MonoDevelop}" +
                                    $",Visual Studio Code:{(int)ExternalEditorId.VsCode}" +
                                    $",Visual Studio Code:{(int)ExternalEditorId.VsCode}" +
-                                   $",JetBrains Rider:{(int)ExternalEditorId.Rider}" +
+                                   $",JetBrains Rider and Fleet:{(int)ExternalEditorId.Rider}" +
                                    $",Custom:{(int)ExternalEditorId.CustomEditor}";
                                    $",Custom:{(int)ExternalEditorId.CustomEditor}";
             }
             }
             else if (OS.IsMacOS)
             else if (OS.IsMacOS)
@@ -548,14 +548,14 @@ namespace GodotTools
                 settingsHintStr += $",Visual Studio:{(int)ExternalEditorId.VisualStudioForMac}" +
                 settingsHintStr += $",Visual Studio:{(int)ExternalEditorId.VisualStudioForMac}" +
                                    $",MonoDevelop:{(int)ExternalEditorId.MonoDevelop}" +
                                    $",MonoDevelop:{(int)ExternalEditorId.MonoDevelop}" +
                                    $",Visual Studio Code:{(int)ExternalEditorId.VsCode}" +
                                    $",Visual Studio Code:{(int)ExternalEditorId.VsCode}" +
-                                   $",JetBrains Rider:{(int)ExternalEditorId.Rider}" +
+                                   $",JetBrains Rider and Fleet:{(int)ExternalEditorId.Rider}" +
                                    $",Custom:{(int)ExternalEditorId.CustomEditor}";
                                    $",Custom:{(int)ExternalEditorId.CustomEditor}";
             }
             }
             else if (OS.IsUnixLike)
             else if (OS.IsUnixLike)
             {
             {
                 settingsHintStr += $",MonoDevelop:{(int)ExternalEditorId.MonoDevelop}" +
                 settingsHintStr += $",MonoDevelop:{(int)ExternalEditorId.MonoDevelop}" +
                                    $",Visual Studio Code:{(int)ExternalEditorId.VsCode}" +
                                    $",Visual Studio Code:{(int)ExternalEditorId.VsCode}" +
-                                   $",JetBrains Rider:{(int)ExternalEditorId.Rider}" +
+                                   $",JetBrains Rider and Fleet:{(int)ExternalEditorId.Rider}" +
                                    $",Custom:{(int)ExternalEditorId.CustomEditor}";
                                    $",Custom:{(int)ExternalEditorId.CustomEditor}";
             }
             }
 
 

+ 1 - 1
modules/mono/editor/GodotTools/GodotTools/GodotTools.csproj

@@ -28,7 +28,7 @@
   </PropertyGroup>
   </PropertyGroup>
   <ItemGroup>
   <ItemGroup>
     <PackageReference Include="JetBrains.Annotations" Version="2019.1.3.0" ExcludeAssets="runtime" PrivateAssets="all" />
     <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="Microsoft.NETFramework.ReferenceAssemblies" Version="1.0.0" PrivateAssets="All" />
     <PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
     <PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
     <Reference Include="GodotSharp">
     <Reference Include="GodotSharp">

+ 5 - 0
modules/mono/editor/GodotTools/GodotTools/Ides/Rider/RiderLocatorEnvironment.cs

@@ -48,4 +48,9 @@ public class RiderLocatorEnvironment : IRiderLocatorEnvironment
         else
         else
             GD.PushError(message, e);
             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
+    }
 }
 }

+ 15 - 39
modules/mono/editor/GodotTools/GodotTools/Ides/Rider/RiderPathManager.cs

@@ -1,5 +1,4 @@
 using System;
 using System;
-using System.Collections.Generic;
 using System.IO;
 using System.IO;
 using System.Linq;
 using System.Linq;
 using Godot;
 using Godot;
@@ -11,10 +10,13 @@ namespace GodotTools.Ides.Rider
     public static class RiderPathManager
     public static class RiderPathManager
     {
     {
         private static readonly RiderPathLocator RiderPathLocator;
         private static readonly RiderPathLocator RiderPathLocator;
+        private static readonly RiderFileOpener RiderFileOpener;
 
 
         static RiderPathManager()
         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";
         public static readonly string EditorPathSettingName = "dotnet/editor/editor_path_optional";
@@ -46,7 +48,7 @@ namespace GodotTools.Ides.Rider
                 }
                 }
 
 
                 var riderPath = (string)editorSettings.GetSetting(EditorPathSettingName);
                 var riderPath = (string)editorSettings.GetSetting(EditorPathSettingName);
-                if (IsRiderAndExists(riderPath))
+                if (File.Exists(riderPath))
                 {
                 {
                     Globals.EditorDef(EditorPathSettingName, riderPath);
                     Globals.EditorDef(EditorPathSettingName, riderPath);
                     return;
                     return;
@@ -63,12 +65,6 @@ namespace GodotTools.Ides.Rider
             }
             }
         }
         }
 
 
-        public static bool IsExternalEditorSetToRider(EditorSettings editorSettings)
-        {
-            return editorSettings.HasSetting(EditorPathSettingName) &&
-                IsRider((string)editorSettings.GetSetting(EditorPathSettingName));
-        }
-
         public static bool IsRider(string path)
         public static bool IsRider(string path)
         {
         {
             if (string.IsNullOrEmpty(path))
             if (string.IsNullOrEmpty(path))
@@ -84,49 +80,29 @@ namespace GodotTools.Ides.Rider
 
 
         private static string CheckAndUpdatePath(string riderPath)
         private static string CheckAndUpdatePath(string riderPath)
         {
         {
-            if (IsRiderAndExists(riderPath))
+            if (File.Exists(riderPath))
             {
             {
                 return 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;
                 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);
             editorSettings.SetSetting(EditorPathSettingName, newPath);
             Globals.EditorDef(EditorPathSettingName, newPath);
             Globals.EditorDef(EditorPathSettingName, newPath);
             return 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 pathFromSettings = GetRiderPathFromSettings();
             string path = CheckAndUpdatePath(pathFromSettings);
             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);
         }
         }
     }
     }
 }
 }