| 1 | namespace CascadeIDE.Services.Lsp; |
| 2 | |
| 3 | /// <summary>Пресеты запуска C# language server (один активный процесс).</summary> |
| 4 | public static class CSharpLspProviderIds |
| 5 | { |
| 6 | public const string ParseOnly = "ParseOnly"; |
| 7 | public const string OmniSharp = "OmniSharp"; |
| 8 | public const string CSharpLs = "CSharpLs"; |
| 9 | public const string Custom = "Custom"; |
| 10 | |
| 11 | public static readonly string[] All = [ParseOnly, OmniSharp, CSharpLs, Custom]; |
| 12 | |
| 13 | public static (string fileName, string arguments) ResolveProcessArgs(string providerId, string? solutionPath, string? userExecutable, string? userArguments) |
| 14 | { |
| 15 | var extra = string.IsNullOrWhiteSpace(userArguments) ? "" : userArguments.Trim(); |
| 16 | return providerId switch |
| 17 | { |
| 18 | CSharpLs => ( |
| 19 | string.IsNullOrWhiteSpace(userExecutable) ? "csharp-ls" : userExecutable.Trim(), |
| 20 | extra), |
| 21 | Custom => ( |
| 22 | userExecutable?.Trim() ?? "dotnet", |
| 23 | extra), |
| 24 | OmniSharp => ( |
| 25 | string.IsNullOrWhiteSpace(userExecutable) ? "OmniSharp" : userExecutable.Trim(), |
| 26 | CombineArgs("--languageserver", extra)), |
| 27 | _ => ("", "") |
| 28 | }; |
| 29 | } |
| 30 | |
| 31 | private static string CombineArgs(string preset, string extra) => |
| 32 | string.IsNullOrEmpty(extra) ? preset : $"{preset} {extra}"; |
| 33 | } |
| 34 | |